Contexte
Le echo
programme est tellement soigné. Vous pouvez tout dire, et il répète vos mots à la perfection! À quel point cela est cool! De manière décevante, il répète l'entrée en une seule fois, quelle que soit votre vitesse de frappe, ce qui n'est pas très réaliste. Nous devrons résoudre ce problème.
La tâche
Votre programme utilisera STDIN ou son équivalent le plus proche. Il doit lire les lignes de l’utilisateur une à une, en affichant éventuellement une invite, jusqu’à ce qu’il entre une ligne vide. Après cela, il imprimera les lignes sur STDOUT ou son équivalent le plus proche, dans le même ordre que celles qui ont été données. La dernière ligne (vide) n'est pas imprimée et la dernière ligne imprimée n'a pas besoin de nouvelle ligne.
De plus, le programme doit conserver les intervalles de temps entre chaque ligne: s'il a fallu x
quelques secondes à l'utilisateur pour entrer une ligne, x
le programme n'a pris que quelques secondes pour l'imprimer. Ceci s’applique aussi aux première et dernière lignes; la ligne vide n'est pas imprimée, mais le programme attend quand même avant de se terminer.
Exemple
Voici un exemple de session avec le programme. Toutes les actions qui ne produisent pas de texte sont décrites entre crochets et l’invite (facultatif) s’affiche sous la forme >
.
[begin program]
> fhtagn[enter; 1.48s passed since starting program]
> yum yum[enter; 3.33s passed since previous enter]
> so cool![enter; 2.24s passed since previous enter]
> [enter; 0.23s passed since previous enter]
[wait 1.48s]fhtagn
[wait 3.33s]yum yum
[wait 2.24s]so cool!
[wait 0.23s, then end program]
Sans les actions, la session ressemble à ceci:
> fhtagn
> yum yum
> so cool!
>
fhtagn
yum yum
so cool!
Règles et notation
Les temps d'attente doivent être précis à 0,01 seconde près (en pratique, si un humain moyen ne peut pas faire la différence, tout va bien). Le nombre d'octets le plus faible gagne et les failles standard sont interdites. Si votre langue dispose d'une fonction intégrée pour cette tâche, vous ne pouvez pas l'utiliser.
yum yum
, ce qui était plutôt encombrant.Réponses:
CJam,
4541393634 octetsBien sûr, cela n’a aucun sens pour l’interprète en ligne, mais cela fonctionne pour l’interprète Java.
Il ne affiche pas une invite.
Explication
la source
JavaScript,
119112 octetsEn espérant trouver quelques octets de plus à supprimer.
la source
j=i=[]
( ça++
fonctionnera toujours!) Aussi, votrewhile
besoin n'est pas!=''
aussi faux, c'est faux! Tellement déçu que j'ai manquémap
! +1!=''
. Était inquiet si l'entrée était0
, mais il semble gérer cette amende. J'avais déjà remarqué la[]
possibilité d'incrément, mais j'avais été bête et essayé de fairej++
avec. Faire des++j
travaux, puisque[]++
est apparemment 0 XD Merci!do...while
boucles dans JSJavaScript, 120 octets
Aucune chance de s'approcher de CJam avec cette approche, mais un script simple.
la source
Pyth, 68 octets
Gaspillé beaucoup d'octets sur l'appel à
sleep
, puisque Pyth n'a aucunesleep
fonction.la source
Ruby, 74
Astuces:
*a
sur la première ligne, initialise un tableau vide. Je pourrais utiliser à la$*
place, mais c'est un peu sommaire, car il est rempli d'invocations et ne me fait économiser qu'un octet.$/
est une nouvelle ligne, et$_
est la dernière ligne récupérée pargets
.Edit: Dormir à la fin coûte 20 octets de plus, probablement un moyen de jouer au golf
la source
Time.now
suffisamment de fois pour utiliserdef n;Time.now;end
, en enregistrant 2 octets entiersPython 3, 124
Ne fonctionne que sur les plateformes Windows
Garder les entrées et les heures dans des listes séparées me coûte 3 octets de plus . Probablement pas la meilleure approche.
Une version amicale Unix de 129 octets, avec le crédit de Mego :
la source
time()
au lieu declock()
sauvegarder 2 octets?SWI-Prolog, 185 octets
Il y a probablement beaucoup à jouer au golf ici, mais ça ira pour le moment ...
la source
PowerShell,
26119012195 octetsLes accessoires de TessellatngHeckler et Tomkandy pour l'assistance et l'inspiration au golf
Le concept est très similaire à la version à 121 octets ci-dessous. Nous créons et construisons de manière dynamique une liste d'objets au lieu de passer par une boucle while pour les stocker dans un tableau explicite
$a
. Dans les deux cas, cette liste d'objets est mise en pipeline dans la même boucle foreach|%{...}
. L'indexation dans le sélecteur de tableau de résultats($b=!$b+!$_)
est cette fois formulée pour éliminer lesif($_){$_}
itérations ci-dessous, ce qui économise quelques octets supplémentaires.Précédent, 121 octets
Développé et expliqué:
Précédent, 190 octets
Précédent, 261 octets
Sainte verbosité, Batman! Décomposons:
la source
$a=1,1;while($a[-1]-ne""){$a+=Measure-Command{$b=read-host};$a+=$b};$i=2;while($i-lt$a.length){sleep -m $a[($i++)].totalmilliseconds;$a[($i++)]}
@
dans ce tableau, car ce n'est pas nécessaire dans ce contexte, donc jusqu'à 121 .$($l=1;while($l){Measure-Command{$l=read-host};$l})|%{($_,(sleep -m($_.Ticks/1e4)))[($b=!$b+!$_)]}
- et avec une modification de la bascule, de sorte que lorsque la chaîne est vide, elle ne bascule pas et dort à la place - 98do{...}while($l)
boucle et laissez tomber$l=1;
pour obtenir 95 )Perl 6, 70 caractères
L'interprète Perl 6 ne définit que trois variables symboliques (contrairement à la folie de Perl 5). Pour être exact,
$/
,$!
et$_
. Ce programme les utilise tous pour éviter les coûts liés à la déclaration de variablesmy
.get
lit une ligne de STDIN. Il ne contient pas de nouvelle ligne, contrairement à Perl 5.now
Builtin renvoie une heure actuelle. Une fois soustrait, il donne un intervalle qui peut être passé à une chaîne.Méthode avec rien à gauche de celui - ci (comme
.push
et.map
dans ce code) fonctionne sur$_
.À l’aide de la
repeat while
boucle (appeléedo while
dans d’autres langages de programmation), Perl 6 écrit l’horodatage actuel sur$/
la ligne reçue (sur laquelle il stocke également$!
), et insère la différence entre l’heure et l’horodatage actuels$/
. En raison de l'ordre des paramètres,now
n'est pas calculé avant la réception d'une ligne.La
while
condition vérifie si la ligne n'est pas vide (Perl 6"0"
est une valeur vraie, contrairement à Perl 5).Après avoir obtenu tous les horodatages et les lignes, je fournis simplement ceux qui sont
map
rappelés, qui dort un peu et dit ce qui a été dit.la source
Groovy, 202 octets
Radical.
Version non-golfée:
la source
JavaScript (ES6) 102
Rassembler les efforts de Mwr247 et de Dom Hastings (CW)
la source
MATLAB,
10799Et non golfé:
Le timing ne sera pas précis à 100%, car il ne prendra pas en compte le temps d'affichage de chaque chaîne, mais cela devrait être assez rapide pour que le timing soit proche.
Après une brève visite, j'ai enregistré quelques octets en supprimant le tableau de cellules profondes à double couche. Il s’est avéré que tout ce dont j'avais besoin était
;
de le séparer correctement lors de l’emballage.la source
Java, en utilisant la version 1.04 de cette bibliothèque , 385 octets
la source
Caché ObjectScript, 123 octets
Comme d'habitude, cela suppose une table de symboles vierge avant de lancer
d r
.Ce problème ne peut pas être résolu dans ANSI MUMPS, car la norme ANSI exige uniquement une résolution de second niveau pour le temps intrinsèque
$H[OROLOG]
. Heureusement, Intersystems Caché, qui est actuellement la plate-forme leader de l'industrie pour MUMPS, fournit l'$ZT[IME]S[TAMP]
intrinsèque défini par la mise en œuvre , qui fournit une résolution au niveau de la microseconde.(Le score était auparavant de 105 octets, mais il y avait un bug.)
la source
C ++ 11,
343338 octetsJe voulais voir combien d'octets un code pour cela en c ++ aurait besoin. Beaucoup plus que ce à quoi je m'attendais. J'ai peut-être trop compliqué la solution.
Voyons si je peux réduire cela d'une manière ou d'une autre.
la source
#include
déclaration s et type pourmain
. C'est 7 octets - pas beaucoup, mais un début. Vous pourriez également être en mesure d'utiliserauto
plutôt questring
pours
.c
cela, nous n'avons pas à le préciser. J'ai d'abord essayé d'utiliserauto s
... mais on dirait qu'il est converticonst char *
et nonstd::string
. Je me demande si je peux créer un alias pourwhile
.while
utiliser un#define
peut - être.Bash,
9190 octetsCela crée un fichier temporaire
t
. Il écrasera un fichier existant portant le même nom.L'idée elle-même est assez courte, mais le traitement des caractères spéciaux dans l'entrée ajoute environ 15 octets ...
la source
VBA,
233228bytesJe suis sûr que cela peut être beaucoup joué au golf. ils ne spécifiaient pas le nombre d'entrées, donc je codai en dur mes longueurs de tableau parce que c'est plus court que
Redim preserve
.L’entrée se fait par popup, la sortie est
debug.print
parce quemsgbox
produit un MODAL et arrête le code.Je ne sais pas comment vérifier si cela est précis à 0,01s. Peut-être que quelqu'un peut tester mais je donne le numéro à la commande wait d'une manière qui DEVRAIT utiliser les millisecondes, mais VBA n'est pas connu pour faire ce qu'il devrait.
Le
If goto
peut être remplacé par un bien joué au golfDo Loop While
.la source
SmileBASIC, 122 octets
Je pense que cela pourrait être légèrement plus court.
la source
C UNIX, 272 octets
Détaillé
la source
Bash, 22 octets
Tapez ensuite l'entrée et appuyez sur Entrée.
la source