Drag Race Countdown

10

Desafío:

En un escenario hipotético, el temporizador de cuenta regresiva para una carrera tiene intervalos aleatorios entre los conteos, para evitar un arranque prematuro, por ejemplo

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

Entrada:

nada


Salida:

Escriba un programa (o función) que imprima los 3 números con un intervalo de tiempo aleatorio de 0,50 segundos a 1 segundo entre cada recuento.


Nota:

  • El programa debe generar cada número (3, 2, 1) con el intervalo de tiempo aleatorio ( cualquier número entre 0,50 y 1 hasta las centésimas; sin codificación fija) entre cada uno. La precisión del intervalo aleatorio debe llegar a cientos (p. Ej .: 0,52). No es necesario que envíe el intervalo, solo el recuento.
  • Como aclaró @JoKing, quiero decir uniformemente aleatorio (puede usar el generador pseudoaleatorio de su idioma.
  • Como muchas personas han aclarado, realmente me refiero a cualquier número de 2 decimales entre 0.5 y 1. (0.50, 0.51, etc., hasta 0.98, 0.99, 1)

Este es el , por lo que gana el programa con el recuento de bytes más bajo.

LordColus
fuente
44
Hola LordColus, y bienvenido a PPCG. Este parece ser un buen primer desafío. Para futuros desafíos, recomendamos pasar primero por el sandbox para resolver todos los detalles.
1
@ LordColus: Mejoré la declaración original y algunas otras ediciones, eche un vistazo y apruebe si lo desea.
Muhammad Salman
1
Como dije en un comentario anterior que se ha eliminado, especificar "uniformemente al azar" está bien si no eres demasiado estricto con precisión. Tal como está ahora, los tiempos de pausa deben ser uniformes con una precisión de dos decimales (¿o son al menos dos decimales?). ¿Significa eso que la distribución debe ser uniforme en el conjunto 0.5, 0.51, 0.52, ..., 1, o puede ser cualquier punto flotante (posiblemente con más de dos decimales) entre 0.5 y 1?
Luis Mendo
2
¿Mi edición más reciente lo borra?
LordColus
66
@ mbomb007 Lo mismo ... ¿por qué se volvió a cerrar esto? Básicamente cuenta de 3 a 1 con dos .50-1.00 segundos de espera en el medio. Realmente no es complicado.
Urna mágica del pulpo

Respuestas:

5

05AB1E , 12 bytes

3LRε=₄D;ŸΩ.W

Pruébalo en línea!


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.

Pruébelo con la depuración habilitada: ¡ Pruébelo en línea!

Urna de pulpo mágico
fuente
2

SmileBASIC, 64 62 bytes

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

Desafortunadamente, no puedo usar WAIT ya que solo admite intervalos de 1/60 de segundo (cualquier cosa menos no suele ser útil ya que la entrada / salida solo se actualiza una vez por fotograma)

Esto requiere un ajuste dependiendo de la velocidad del sistema en el que se está ejecutando, por lo que podría no ser válido (46 bytes):

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

Versión WAIT no válida (36 bytes):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1
12Me21
fuente
2

R , 46 44 bytes

para una cuenta regresiva real:

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

Pruébalo en línea!

intervalo de impresión ya que inicialmente entendí mal el desafío (46 bytes) Gracias Giuseppe por guardar 2 caracteres.

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

Pruébalo en línea!

JayCe
fuente
Creo que runif()por defecto tiene los puntos finales izquierdo y derecho como 0y 1respectivamente, por lo que runif(1,.5)debería funcionar igual para -2 bytes en ambos.
Giuseppe
Buena captura gracias @Giuseppe.
JayCe
2

Python 2 , 58 bytes

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

Pruébalo en línea!

Creé un generador de números aleatorios muy simple que toma el tiempo inicial (como lo hacen muchas personas).


Mejoras

Neil
fuente
1-time()%.5debería hacer el truco. (Necesitas [3,2,1]por cierto)
Jonathan Allan
También for a in'321' salva a otros dos
Jonathan Allan
@JonathanAllan Muy buen punto, actualizado.
Neil
Esto también duerme una vez antes de la cuenta regresiva. Creo que necesitas la declaración impresa antes de dormir.
Magic Octopus Urn
@MagicOctopusUrn De acuerdo, actualizado.
Neil
1

APL + WIN, 37 bytes

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

Java 8, 86 bytes

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

Imprime sin delimitador. Si eso no está permitido, son +2 bytes cambiando printa println(delimitador de nueva línea).

Pruébalo en línea.
Probar que los intervalos están en el rango correcto de [500, 1000)ms.

Explicación:

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
fuente
1

JavaScript (Node.js) , 75 65 60 bytes

  • gracias a @Shaggy por reducir en 10 bytes
  • gracias a @Kevin Cruijssen por reducir en 5 bytes
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Pruébalo en línea!

DanielIndie
fuente
55 bytes
Shaggy
1
@ Shaggy, ¿será realmente aleatorio si estás usando Date? (por segunda vez ocurrió al azar)
DanielIndie
1
¿Por qué *1000%500+500? Solo puedes usar *500+500.
Kevin Cruijssen
Con las actualizaciones de la especificación, probablemente no será lo suficientemente aleatorio, pero podría valer la pena pedir una aclaración.
Shaggy
1

Perl 5 , 39 bytes

Ajustó gradualmente a 39 bytes, gracias a @ jonathan-allan + @xcali.

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

Pruébalo en línea!

Steve
fuente
1
sería 1-rand(.5)trabajar?
Jonathan Allan
Buena idea. Entonces puede usar 1-rand.5también.
Steve
1
Corte cuatro bytes más quitando los parens y cambiando el contador para que sea negativo. Pruébalo en línea!
Xcali
1

Chip -wingjj , 33 bytes

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

Pruébalo en línea!

En Chip, no podemos esperar a que exactamente 1 / 100 de segundo, pero podemos esperar a 1 / la tecnología 256 de segundo, por lo que usamos aquí.

p, Cuando se le preguntó, hará una pausa en la ejecución para el cabezal de pila (un byte) * 1 / 256 segundos. En cada ciclo, que siempre se establece el bit alto de la pila ( 128 / 256 ) y establecer todos los demás bits de pila al azar (con la ?'s). Esto proporciona una distribución uniforme entre 0,50 y 1,00 segundos.

Algunos de los argumentos -wy -gjj, especifican que la entrada, en lugar de usar stdin, debe ser una cuenta regresiva desde 0xFFhasta 0x00(luego envoltura). Usamos esto para proporcionar los dos bits bajos para la cuenta regresiva. Todos los demás bits de salida permanecen constantes (en el valor correspondiente a ASCII 0).

Finalmente, una vez que hemos terminado, terminamos el programa con t, evitando una pausa después del último número.

Phlarx
fuente