Pause deux fois plus longue

15

Votre défi est d'imprimer l'entrée, d'attendre n'importe quelle durée, d'imprimer l'entrée, d'attendre deux fois le temps que vous avez initialement attendu, d'imprimer à nouveau l'entrée, etc. Le retard initial doit être inférieur à 1 heure et vous devez avoir une précision de +/- 5% dans les retards suivants. En dehors de cela, il n'y a aucune restriction sur le temps de retard.

Exemple:

Entrée: hi.

Sortie: hi(1ms pause) hi(2ms pause) hi(4ms pause) hi(8ms pause) hi(16ms pause), etc.

Également autorisé:

hi(Pause de 1 minute) hi( pause de 2 minutes) hi( pause de 4 minutes) hi(pause de 8 minutes) hi(pause de 16 minutes), etc.

L'entrée doit être fournie au début du programme (STDIN, paramètre de ligne de commande, paramètre de fonction, etc.) et sera une chaîne.

Le délai initial ne peut pas être 0.

programmer5000
la source
La sortie doit-elle être infinie ou peut-elle s'arrêter après un certain temps?
Camarade SparklePony
1
@ComradeSparklePony, il doit sortir aussi longtemps qu'il le peut (jusqu'à la mort par la chaleur de l'univers, un crash informatique, un stackoverflow, une perte de mémoire, etc.)
programmer5000
@ComradeSparklePony uniquement s'il s'agit de quelque chose comme stackoverflow, de mémoire insuffisante, etc. Ce y=x=>(x&&alert(x),y())serait techniquement autorisé, mais je le voterais de manière négative.
programmer5000
@ programmer5000 Merci, j'ai compris.
Camarade SparklePony
Puis-je imprimer une nouvelle ligne?
MD XF

Réponses:

12

05AB1E , 6 octets

Code:

[=No.W

Explication:

[        # Start an infinite loop
 =       # Print the top of the stack without popping
  No     # Compute 2 ** (iteration index)
    .W   # Wait that many milliseconds

Essayez-le en ligne!

Adnan
la source
Si vous commencez par attendre 1 seconde, vous pouvez utiliser à la wplace de .W.
Riley
@Riley Je ne pense pas que cela fonctionnerait. wattend une seconde, quoi qu'il .Warrive , apparaît et attend autant de millisecondes.
Camarade SparklePony
@ComradeSparklePony Vous avez raison. il faudrait que ce soit Gw.
Riley
Je ne sais pas si cela reflète nécessairement un problème dans le code, mais au moment où je lance l'exemple lié, le moteur me donne: "Avertissement: la demande a dépassé le délai de 60 secondes et a été terminée."
doppelgreener
@doppelgreener Oui, l'interprète en ligne n'est peut-être pas la meilleure option dans ce cas. Hors ligne, cela fonctionne comme un charme.
Adnan
15

Scratch, 8 blocs + 3 octets

set [n] to [1]; forever { say [x]; wait (n) secs; set [n] to ((n) * (2)) }

Équivalent en Python:

import time
n = 1
while 1:
    print("x")
    time.sleep(n)
    n = n * 2
OldBunny2800
la source
1
pourquoi "+ 3 octets"?
Cole Johnson
2
9 blocs (par exemple Forever, n) + 3 octets (par exemple x, 2)
OldBunny2800
5

Python 3, 60 56 octets

import time
def f(x,i=1):print(x);time.sleep(i);f(x,i*2)

Journal des modifications:

  • changé lambda récursif en fonction récursive (-4 octets)
L3viathan
la source
Vous pouvez économiser un octet sur la printdéclaration en passant à Python 2 :)
numbermaniac
1
@numbermaniac Oui, mais je devrais alors passer à Python 2.: P
L3viathan
5

MATL , 8 octets

`[email protected]

La première pause est de 2 secondes.

Essayez-le sur MATL Online . Ou consultez une version modifiée qui affiche le temps écoulé depuis le démarrage du programme. (Si l'interprète ne fonctionne pas, veuillez actualiser la page et réessayer).

Ou voyez un gif:

enter image description here

Explication

`     % Do...while
  G   %   Push input
  D   %   Display
  @   %   Push iteration index (1-based)
  W   %   2 raised to that
  Y.  %   Pause for that time
  T   %   Push true. This will be used as loop confition
      % End (implicit). The top of the stack is true, which produces an infinite loop 
Luis Mendo
la source
@ programmer5000 Par curiosité: l'interprète en ligne a-t-il fonctionné pour vous?
Luis Mendo
Oui, pourquoi?
programmer5000
@ programmer5000 Merci. Juste pour vérifier. Parfois, il y a des problèmes de dépassement de délai
Luis Mendo
5

Mathematica 34 32 30 29 octets

Solution d'origine 34 octets:

For[x=.1,1<2,Pause[x*=2];Print@#]&

Raser 2 octets avec Do

x=1;Do[Pause[x*=2];Print@#,∞]&

Rasez un octet de plus avec la solution récursive de @ MartinEnder

±n_:=#0[Print@n;Pause@#;2#]&@1

@ngenisis utilise la récursion ReplaceRepeated pour raser un autre octet

1//.n_:>(Print@#;Pause@n;2n)&
Kelly Lowder
la source
4
Trueest 1>0. Mais quelque chose comme ça est un peu plus court:±n_:=#0[Print@n;Pause@#;2#]&@1
Martin Ender
Je mets l' 1<2avant avant ton commentaire. Cependant, votre solution récursive enregistre un octet. Merci @MartinEnder
Kelly Lowder
±est un octet dans le codage CP-1252 (codage Windows par défaut).
JungHwan Min
3
Encore plus court:1//.n_:>(Print@#;Pause@n;2n)&
ngenisis
5

Octave, 42 41 octets

x=input('');p=1;while p*=2,pause(p),x,end

Un octet enregistré grâce à rahnema1, p*=2est plus court que p=p*2.

Je ne peux pas croire que je n'ai pas pu jouer au golf, mais ce n'était pas si simple.

  • L'entrée doit être au début, donc la première partie est impossible à éviter.
  • J'ai besoin d'un nombre qui double, et il doit être initialisé devant la boucle
    • Il serait possible d'utiliser l'entrée comme conditionnelle pour la boucle, mais je devrais alors avoir p*=2quelque part ailleurs.
    • La pause n'a pas de valeur de retour, sinon elle aurait pu être while pause(p*=2)
Stewie Griffin
la source
2
Une astuce que j'ai apprise de rahnema1: input(0)travaux
Luis Mendo
1
@LuisMendo Malheureusement, l'astuce ne fonctionne pas dans la version récente d'octave :(
rahnema1
4

Java (OpenJDK 8) , 113 octets

interface M{static void main(String[]a)throws Exception{for(int i=1;;Thread.sleep(i*=2))System.out.print(a[0]);}}

Essayez-le en ligne!

-60 octets grâce à Leaky Nun!

HyperNeutrino
la source
2
+1 pour "N'utilisez pas Java pour jouer au golf. C'est une mauvaise idée." Pourriez-vous ajouter un lien TIO?
programmer5000
@ programmer5000 Bien sûr, mais cela ne fonctionne pas, car TIO attend la fin du code.
HyperNeutrino
2
Pourquoi une interface au lieu d'une classe?
plié à droite
2
@rightfold Une interface vous permet d'omettre l' publicen public static void main.
Leaky Nun
1
@ColeJohnson les arguments sont requis.
Leaky Nun
4

R, 50 48 octets

function(x,i=1)repeat{cat(x);Sys.sleep(i);i=i*2}

renvoie une fonction anonyme qui a un argument obligatoire, la chaîne à imprimer. N'imprime aucune nouvelle ligne, crache juste xsur l'écran. iest un argument facultatif qui prend par défaut 1, attend les isecondes et double i.

-2 octets grâce à pajonk

Essayez-le en ligne!

Giuseppe
la source
Pourquoi ne pas commencer à i=1utiliser ensuite i=i*2à la fin et dormir juste i?
pajonk
c'est une excellente idée ... je vais changer ça.
Giuseppe
4

Ruby, 34 28 23 22 (+2 pour -n) = 24 octets

3 octets économisés grâce à Value Ink!

1 octet économisé grâce à daniero

loop{print;sleep$.*=2}

Commence 2alors 4, etc.

Explication

-n                       # read a line from STDIN
  loop{                } # while(true):
       print;            # print that line
             sleep$.*=2  # multiply $. by 2, then sleep that many seconds. 
                         # $. is a Ruby special variable that starts at 1.
Cyoce
la source
Il dormira une seconde avant de lire l'entrée, mais vous pouvez déjà l'entrer
John Dvorak
Le démarrage du programme Ruby avec l' -nindicateur vous permet d'ignorer l' getsappel initial , car l'indicateur le gérera pour vous
Value Ink
printsans argument équivaut à puts$_- un octet enregistré
daniero
4

Alice , 16 octets

1/?!\v
T\io/>2*.

Essayez-le en ligne! (Pas grand-chose à voir bien sûr, mais vous pouvez vérifier la fréquence à laquelle il a été imprimé en une minute.)

Explication

1    Push 1 to the stack. The initial pause duration in milliseconds.
/    Reflect to SE. Switch to Ordinal.
i    Read all input.
!    Store it on the tape.
/    Reflect to E. Switch to Cardinal.
>    Move east (does nothing but it's the entry of the main loop).
2*   Double the pause duration.
.    Duplicate it.
     The IP wraps around to the first column.
T    Sleep for that many milliseconds.
\    Reflect to NE. Switch to Ordinal.
?    Retrieve the input from the tape.
o    Print it.
\    Reflect to E. Switch to Cardinal.
v    Move south.
>    Move east. Run another iteration of the main loop.
Martin Ender
la source
4

R, 44 43 octets

Biffé 44 est toujours régulier 44; (

Cette réponse fournit déjà une solution décente, mais nous pouvons économiser quelques octets supplémentaires.

function(x)repeat{cat(x);Sys.sleep(T<-T*2)}

Fonction anonyme prenant pratiquement n'importe quoi imprimable comme argument x. Commence à 2 secondes et double à chaque fois par la suite. Abuse le fait qui Test défini par défaut comme TRUEqui s'évalue 1.

Aussi, tant que ce commentaire obtient toujours le feu vert d'OP, nous pouvons le rendre encore plus court, mais je ne pense pas que ce soit dans l'esprit du défi. Les temps d'attente de 0 ne sont plus autorisés.

function(x)repeat cat(x)
JAD
la source
2
regardez-vous, abusez des pauvres Tcomme ça. dans la version courte de la réponse, vous n'avez même pas besoin d'appareils orthopédiques, juste un espace.
Giuseppe
1
Hé, s'il Tne l'aime pas, Tpeut se défendre. Aussi, bonne trouvaille :)
JAD
3

Cubix , 30 octets

/(?:u<q.;1A>?ou2$/r;w;q^_q.\*/

Essayez-le ici

Cela correspond à un cube avec une longueur de côté 3.

      / ( ?              # The top face does the delay.  It takes the stack element with the
      : u <              # delay value, duplicates and decrements it to 0.  When 0 is hit the
      q . ;              # IP moves into the sequence which doubles the delay value.
1 A > ? o u 2 $ / r ; w  # Initiates the stack with one and the input.  For input hi this
; q ^ _ q . \ * / . . .  # gives us 1, -1, 10, 105, 104.  There is a little loop that prints 
. . . . . . . . . . . .  # each item in the stack dropping it to the bottom until -1 is hit.
      . . .              # Then the delay sequence is started om the top face
      . . .
      . . .
MickyT
la source
oh wow cela ressemble à une langue soignée
Skidsdev
3

Bash , 37 octets

for((t=1;;t*=2)){ sleep $t;echo $1;};

Pour une raison quelconque, TIO n'affiche pas la sortie tant que vous n'avez pas arrêté l'exécution du programme.

Essayez-le en ligne!

Maxim Mikhaylov
la source
Oui, il ne renvoie la sortie qu’à la fin.
Jonathan Allan
3

PHP, 31 octets

for(;;sleep(2**$i++))echo$argn;
for(;;sleep(1<<$i++))echo$argn;

dort 1, 2, 4, 8, ... secondes. Exécuter en tant que tuyau avecphp -nR '<code>'

Fonctionnera jusqu'à la 63e impression (sur une machine 64 bits), après quoi il n'y aura plus d'attente.
La version 1 produira des avertissements sleep() expects parameter 1 to be integer, float given, la
version 2 produira un avertissement sleep(): Number of seconds must be greater than or equal to 0.

Insérez @avant sleeppour désactiver les avertissements.

Titus
la source
3

TI-Basic, 21 octets

Prompt Str0
1
While 1
Disp Str0
Wait Ans
2Ans
End
pizzapants184
la source
2

Python 3, 61 octets

import time;i=1;x=input()
while 1:print(x);time.sleep(i);i*=2

Similaire au golf de @ L3viathan, mais utilise la whileboucle

Wondercricket
la source
2

CJam, 26 octets

qKes{es1$-Y$<{W$o;2*es}|}h

Ne fonctionne pas correctement sur TIO.

La première pause est de 20 millisecondes.

Explication

q                           e# Push the input.
 K                          e# Push 20 (the pause time).
  es                        e# Push the time (number of milliseconds since the Unix epoch).
    {                       e# Do:
     es1$-                  e#  Subtract the stored time from the current time.
          Y$<{              e#  If it's not less than the pause time:
              W$o           e#   Print the input.
                 ;2*es      e#   Delete the stored time, multiply the pause time by 2, push
                            e#     the new time.
                      }|    e#  (end if)
                        }h  e# While the top of stack (not popped) is truthy.
                            e#  (It always is since the time is a positive integer)
Chat d'affaires
la source
2

C, 51 octets

main(c,v)char**v;{puts(v[1]);sleep(c);main(2*c,v);}

C, 35 octets en fonction

c=1;f(n){puts(n);sleep(c*=2);f(n);}

Prend l'entrée comme argument de ligne de commande.

cleblanc
la source
2

Lot, 62 octets

@set/at=%2+0,t+=t+!t
@echo %1
@timeout/t>nul %t%
@%0 %1 %t%

Cela s'est avéré être un octet plus court que le doublement explicite tdans une boucle:

@set t=1
:g
@echo %1
@timeout/t>nul %t%
@set/at*=2
@goto g
Neil
la source
2

Réticulaire , 12 octets

1idp~dw2*~2j

Essayez-le en ligne!

Explication

1idp~dw2*~2j
1               push 1 (initial delay)
 i              take line of input
  d             duplicate it
   p            print it
    ~           swap
     d          duplicate it
      w         wait (in seconds)
       2*       double it
         ~      swap
          2j    skip next two characters
1i              (skipped)
  d             duplicate input
   p            print...
                etc.
Conor O'Brien
la source
2

C #, 80 79 octets

s=>{for(int i=1;;System.Threading.Thread.Sleep(i*=2))System.Console.Write(s);};

Un octet enregistré grâce à @raznagul.

TheLethalCoder
la source
Vous pouvez enregistrer 1 octet en déplaçant l' Writeinstruction dans le corps de la boucle.
raznagul
@raznagul Je ne sais pas comment j'ai raté celui-là, merci!
TheLethalCoder
2

Python 2, 54 octets

Utilise un calcul long au lieu de bibliothèques de synchronisation.

def f(x,a=1):
 while 1:a*=2;exec'v=9**9**6;'*a;print x
Skyler
la source
Je remarque maintenant que ma réponse est similaire à la vôtre. Je n'avais pas lu votre réponse lorsque j'ai posté, mais si vous souhaitez intégrer ma solution dans la vôtre, je retirerai volontiers ma réponse.
Tim
2

PowerShell, 35 33 30 29 octets

Avec un indice utile de tout et Joey

%{for($a=1){$_;sleep($a*=2)}}

Explication

%{          # Foreach
for($a=1){  # empty for loop makes this infinite and sets $a
$_;         # prints current foreach item
sleep($a*=2)# Start-Sleep alias for $a seconds, reassign $a to itself times 2           
}}          # close while and foreach

Exécuté avec:

"hi"|%{for($a=1){$_;sleep($a*=2)}}
SomeShinyMonica
la source
1
vous devriez pouvoir utiliser un vide pour au lieu du temps:% {$ a = 1; for () {$ _; sleep ($ a * = 2)}} ``
quel que soit
Merci! J'avais déjà essayé d'utiliser une boucle for mais je l'ai mis for(;;). N'a même pas essayé de supprimer les points-virgules.
SomeShinyMonica
1
Mettez le $a=1comme l'initialisation dans le forpour enregistrer un autre octet ( for($a=1){...}). De plus, je ne sais pas s'il faut compter le %, car la routine que vous exécutez n'est qu'un bloc de script. (Mes défis ont tendance à être plutôt stricts quant à la nécessité d'un programme, en évitant de telles réflexions, mais pour tout ce qui va des questions, je ne sais toujours pas comment compter les différentes façons d'utiliser PowerShell.)
Joey
@Joey, doux qui fonctionne. Merci pour l'astuce
SomeShinyMonica
2

Python 3, 49 octets

b=input();x=6**6
while 1:print(b);exec("x+=1;"*x)

Utilise le léger retard de l' +=opération et l'exécute plusieurs xfois. xdouble en s'ajoutant à lui-même autant de fois que la valeur dex .

Il commence à 6^6(46656) pour s'en tenir à la variation maximale de 5% du retard.

Tim
la source
Intelligent, mais c'est un porc de mémoire.
eush77
@ eush77 oui, sur ma tablette, elle s'est terminée après seulement 7 itérations de la boucle! Je m'attends à ce que cela dure un peu plus longtemps sur mon bureau.
Tim
1

Perl 6 , 39 octets

print(once slurp),.&sleep for 1,2,4...* 

Essayez-le (print remplacé pour ajouter des informations de synchronisation)

Étendu:

  print(        # print to $*OUT
    once slurp  # slurp from $*IN, but only once
  ), 
  .&sleep       # then call sleep as if it was a method on $_

for             # do that for (sets $_ to each of the following)

  1, 2, 4 ... * # deductive sequence generator
Brad Gilbert b2gills
la source
1

JS (ES6), 44 42 40 38 36 octets

Barré 44 est toujours 44

i=1,y=x=>setTimeout(y,i*=2,alert(x))

Vous n'aimez pas les bombes alertes?

i=1,y=x=>setTimeout(y,i*=2,console.log(x))

Techniquement correct, mais abusif:

y=x=>(x&&alert(x),y())

-3 octets grâce à Cyoce, -2 grâce à Business Cat, -2 grâce à Neil

programmer5000
la source
2
Je ne semble pas être en mesure de tester cela correctement, mais vous pourriez probablement le faire i=1,y=x=>(alert(x),setTimeout(y,i*=2))pour économiser quelques octets
Business Cat
1
Je suis allé de l'avant et édité dans un message de crédit pour Cyoce; si vous voulez le changer, n'hésitez pas à éditer / restaurer.
HyperNeutrino
1
Et alors i=1,y=x=>setTimeout(y,i*=2,console.log(x))?
Neil
1

Lisp commun, 49 octets

(do((a(read))(i 1(* 2 i)))(())(print a)(sleep i))

le premier délai devrait être le 1deuxième.


la source
1
Vous avez 321 représentants!
programmer5000
@ programmer5000 vous avez 3683 rep!
Cyoce
1

Pyth, 7 octets

#|.d~yT

Explication:

#           Infinitely loop
  .d         Delay for 
      T      10 seconds
    ~y       and double T each time
 |           print input every iteration, too
Steven H.
la source
1

TI-BASIC, 36 octets

La période d'attente initiale est de 1 seconde.

1→L
Input Str1
checkTmr(0→T
While 1
While L>checkTmr(T
End
Disp Str1
2L→L
End
kamoroso94
la source
1

Raquette, 51 octets

(λ(s)(do([n 1(* n 2)])(#f)(displayln s)(sleep n)))

Exemple

➜  ~  racket -e '((λ(s)(do([n 1(* n 2)])(#f)(displayln s)(sleep n)))"Hello")'
Hello
Hello
Hello
Hello
Hello
^Cuser break
Winny
la source