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.

LordColus
la source
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:

5

05AB1E , 12 octets

3LRε=₄D;ŸΩ.W

Essayez-le en ligne!


3LR          # Push [3,2,1]
   ε         # For each...
    =        # Print it.
     ₄       # Push 1000.
      D      # Duplicate top (1000).
       ;     # Divided by 2 (500).
        Ÿ    # Range from b to a ([1000 .. 500]).
         Ω   # Random pick.
          .W # Wait X ms.

Essayez-le avec le débogage activé: essayez-le en ligne!

Urne de poulpe magique
la source
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
12Me21
la source
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!

JayCe
la source
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

Neil
la source
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
Graham
la source
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
Kevin Cruijssen
la source
1

Python 3, 122 octets

import random as r,time
def w():time.sleep(abs(r.random()-.5)+.5)
print(3,end="");w();print(", 2",end="");w();print(", 1")

Essayez-le en ligne!

hakr14
la source
6
Vous avez besoin des importations
Jonathan Allan
À
propos de la
Oups! Il a été corrigé.
hakr14
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!

DanielIndie
la source
55 octets
Shaggy
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

Perl 5 , 39 octets

Amélioré progressivement à 39 octets, grâce à @ jonathan-allan + @xcali.

say-$_+select$a,$a,$a,1-rand.5for-3..-1

Essayez-le en ligne!

Steve
la source
1
serait 1-rand(.5)travailler?
Jonathan Allan
Bonne idée. Peut ensuite utiliser 1-rand.5aussi.
steve
1
Coupez quatre octets supplémentaires en supprimant les parens et en changeant le compteur pour qu'il soit négatif. Essayez-le en ligne!
Xcali
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.

Phlarx
la source