Drag Race Countdown


10

Défi:

Dans un scénario hypothétique, le compte à rebours pour une course a des intervalles aléatoires entre les comptages, pour éviter un démarrage prématuré, par exemple

3 (0.82 seconds pass), 2 (0.67 seconds pass), 1

Contribution:

rien


Production:

Écrivez un programme (ou une fonction) qui imprime les 3 nombres avec un intervalle de temps aléatoire de 0,50 seconde à 1 seconde entre chaque comptage.


Remarque:

  • Le programme doit sortir chaque nombre (3, 2, 1) avec l' intervalle de temps aléatoire ( n'importe quel nombre entre 0,50 et 1 au centième; pas de codage en dur) entre chacun. La précision de l'intervalle aléatoire doit aller aux centaines (ex: 0,52). Vous n'êtes pas obligé de sortir l'intervalle, seulement le nombre.
  • Comme @JoKing l'a précisé, je veux dire uniformément aléatoire (vous pouvez utiliser le générateur pseudo-aléatoire de votre langue.
  • Comme beaucoup de gens l'ont précisé, je veux vraiment dire n'importe quel nombre à 2 décimales entre 0,5 et 1. (0,50, 0,51, etc., jusqu'à 0,98, 0,99, 1)

Il s'agit de , donc le programme avec le plus petit nombre d'octets gagne.


4
Salut LordColus, et bienvenue chez PPCG! Cela semble être un bon premier défi. Pour les défis à venir, nous vous recommandons de passer par le bac à sable d' abord pour aplanir tous les détails.

1
@ LordColus: J'ai amélioré la déclaration d'origine et quelques autres modifications, jetez un œil et approuvez si vous le souhaitez.
Muhammad Salman

1
Comme je l'ai dit dans un commentaire précédent qui a été supprimé, spécifier "uniformément aléatoire" est correct si vous n'êtes pas trop strict avec précision. Dans l'état actuel des choses, les temps de pause doivent être uniformes avec une précision de deux décimales (ou s'agit-il d' au moins deux décimales?). Est-ce à dire que la distribution doit être uniforme sur l'ensemble 0,5, 0,51, 0,52, ..., 1, ou peut-il s'agir de n'importe quelle virgule flottante (éventuellement avec plus de deux décimales) entre 0,5 et 1?
Luis Mendo

2
Est-ce que ma dernière modification le clarifie?
LordColus

6
@ mbomb007 Idem ... pourquoi cela a-t-il été refermé? Il compte essentiellement de 3 à 1 avec deux attentes de 0,50 à 1,00 seconde entre les deux. Ce n'est vraiment pas compliqué.
Magic Octopus Urn

Réponses:



2

SmileBASIC, 64 62 octets

?3M?2M?1DEF M
M=MILLISEC
WHILE MILLISEC<M+500+RND(501)WEND
END

Malheureusement, je ne peux pas utiliser WAIT car cela ne prend en charge que des intervalles de 1/60 de seconde (rien de moins n'est normalement utile car les entrées / sorties ne sont mises à jour qu'une fois par image)

Cela nécessite un ajustement en fonction de la vitesse du système sur lequel il fonctionne, il peut donc ne pas être valide (46 octets):

?3M?2M?1DEF M
FOR I=-66E4-RND(66E4)TO.NEXT
END

Version WAIT non valide (36 octets):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1

2

R , 46 44 octets

pour un compte à rebours réel:

for(i in 3:1){cat(i)
Sys.sleep(runif(1,.5))}

Essayez-le en ligne!

intervalle d'impression car j'ai initialement mal compris le défi (46 octets) Merci Giuseppe d' avoir enregistré 2 caractères.

for(i in 3:1)cat(i,format(runif(1,.5),,2)," ")

Essayez-le en ligne!


Je crois runif()par défaut a les extrémités gauche et droite 0et 1respectivement, de sorte runif(1,.5)devraient travailler les mêmes pour -2 octets dans les deux.
Giuseppe

Bonne prise merci @Giuseppe.
JayCe

2

Python 2 , 58 octets

from time import*
for a in'321':print a;sleep(1-time()%.5)

Essayez-le en ligne!

J'ai créé un générateur de nombres aléatoires très simple qui prend le temps de démarrage (comme beaucoup de gens le font).


Améliorations


1-time()%.5devrait faire l'affaire. (Vous avez besoin [3,2,1]d'ailleurs)
Jonathan Allan

for a in'321' Épargne
Jonathan Allan

@JonathanAllan Très bon point, mis à jour.
Neil

Cela dort une fois avant le compte à rebours. Je pense que vous avez besoin de la déclaration imprimée avant le sommeil.
Urne Magic Octopus

@MagicOctopusUrn D'accord, mis à jour.
Neil

1

APL + WIN, 37 octets

3⋄r←⎕dl ↑n←.49+.01×2?51⋄2⋄r←⎕dl 1↓n⋄1

1

Java 8, 86 octets

v->{for(int i=0;++i<4;Thread.sleep((int)(Math.random()*500+500)))System.out.print(i);}

Imprime sans délimiteur. Si cela n'est pas autorisé, c'est +2 octets en changeant printenprintln (délimiteur de nouvelle ligne).

Essayez-le en ligne.
Prouvez que les intervalles sont dans la plage correcte de [500, 1000)ms.

Explication:

v->{                        // Method with empty unused parameter and no return-type
  for(int i=0;++i<4;        //  Loop in range [1,4)
      Thread.sleep((int)(Math.random()*500+500)))
                            //    After every iteration: sleep for [500, 1000) ms randomly
     System.out.print(i);}  //   Print the current number


1

JavaScript (Node.js) , 75 65 60 octets

  • merci à @Shaggy pour avoir réduit de 10 octets
  • merci à @Kevin Cruijssen pour avoir réduit de 5 octets
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Essayez-le en ligne!



1
@Shaggy sera-t-il vraiment aléatoire si vous utilisez Date? (pour la deuxième fois le hasard s'est produit)
DanielIndie

1
Pourquoi *1000%500+500? Vous pouvez simplement utiliser *500+500.
Kevin Cruijssen

Avec les mises à jour de la spécification, ce ne sera probablement pas assez aléatoire, mais cela pourrait valoir la peine de demander des éclaircissements.
Shaggy


1

Puce -wingjj , 33 octets

0123456e7f s
???????p*9S!ZZZtaABb

Essayez-le en ligne!

Dans Chip, nous ne pouvons pas attendre exactement 1 / 100 de seconde, mais nous pouvons attendre 1 / 256 de seconde, donc nous utilisons ici.

p, Lorsqu'on lui demande, va interrompre l' exécution de la tête d'empilage (un octet) * 1 / 256 secondes. A chaque cycle, nous avons mis toujours le bit de la pile ( 128 / 256 ) et mis tous les autres bits de la pile au hasard (avec ?l »). Cela donne une distribution uniforme entre 0,50 et 1,00 seconde.

Certains des arguments -wet -gjjspécifient que l'entrée, au lieu d'utiliser stdin, doit être un compte à rebours de 0xFFà 0x00(puis encapsulation). Nous l'utilisons pour fournir les deux bits bas pour le compte à rebours. Tous les autres bits de sortie restent constants (à la valeur correspondant à ASCII0 ).

Enfin, une fois que nous avons terminé, nous terminons le programme avec t, empêchant une pause après le dernier numéro.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.