Tu pájaro ha estado picando por algo de ejercicio y está harto de estar atrapado en posiciones estáticas todo el tiempo. Escriba un programa que muestre un pájaro ascii bailando al azar, actualizándose cada 100 ms * no 200 ms * n según el movimiento de baile. El pájaro siempre comienza con el movimiento de baile <(")>
.
El programa debe aceptar una entrada que es un número para multiplicar el intervalo de suspensión por ( n >= 0 && n <= 50
).
Movimientos de 100 ms
^(")v
v(")^
^(")^
v(")v
200 ms movimientos
(>")>
<(")>
<("<)
Detalles extra
- La aleatoriedad no tiene que ser uniforme, pero cada movimiento de baile debe tener una probabilidad razonable de ocurrir (al menos 1 de cada 60 parece justo, está bien si el mismo movimiento ocurre dos veces seguidas)
- Solo debe mostrarse un pájaro a la vez, no múltiples pájaros
- El espacio en blanco al final está permitido (pero otros caracteres finales no están permitidos)
- Se debe mostrar un pájaro antes de dormir
Ejemplo en Python 3
import random, time, sys
birds = """(>")>
<(")>
<("<)
^(")v
v(")^
^(")^
v(")v"""
birds = birds.split()
interval = int(input("Sleep for 100ms*"))
selection = -1
while True:
if selection == -1:
selection = 1
else:
selection = random.randint(0, len(birds)-1)
sys.stdout.write('\r'+birds[selection])
if selection > 2:
time.sleep(0.1*interval)
else:
time.sleep(0.2*interval)
Victorioso
- Este es el código de golf, ¡ por lo que gana menos bytes!
\r
escape de Lua parece actuar como a\n
. Tampoco puedo usaros.execute("cls")
allí. @redstarcoderRespuestas:
MATL , 53 bytes
Los movimientos son uniformemente aleatorios.
A continuación se muestra una muestra con
n = 2
. ¡O pruébalo en MATL Online! (El intérprete es experimental. Si no se ejecuta inicialmente, intente presionar "Ejecutar" nuevamente o actualizar la página).Explicación
fuente
Matlab,
125117 bytesDesafortunadamente, esto no se puede mostrar en TIO ya que no hay "transmisión" de la salida. Aquí hay un gif para una entrada de en su
1
lugar:¡Gracias @LuisMendo por -8 bytes!
fuente
*> <> ,
103101bytesPruébalo aquí! (escriba en
n
la pila inicial o obtendrá un error)Decidí probar mi desafío ya que no había respuestas de menos de 100 bytes. Coloca
n
en la pila y ¡listo! Esto reutiliza los(")
caracteres para guardar algunos bytes.Explicación
Inicialización
<vD[3'(")'
Aquí almacenamos
(")
para su uso posterior.Selector de baile
Esto se ejecuta con frecuencia para seleccionar qué tipo de baile vamos a generar.
Hay una
v
arribax
y un<
a la derecha. Esto hace quex
se vuelva a ejecutar si intenta mover la IP en la dirección incorrecta.Genera 100 ms de baile
Aquí generamos y sacamos uno de los movimientos de baile de 100 ms.
43C - Genera "^" o "v"
Esta es una función simple que genera "^" o "v" y luego regresa. Funciona de manera similar al selector de baile donde tiene instrucciones sobre
x
para garantizar que la IP solo se mueva hacia la izquierda o hacia la derecha.Genera 200 ms de baile
Este es otro que comienza con
x
. Se separará en dos secciones:<(")>
y otra(>")> and <("<)
, porque son dos secciones distintas yx
es lo único que comparten.<(")>
Básicamente, esto hace el comienzo de la
generate 100ms dance
rutina, pero llena las manos del pájaro como><
un^v
combo aleatorio . Se multiplican
por dos esta vez también. Esto hace que todo esté configurado para utilizar lagenerate 100ms dance
rutina para generar el pájaro completo y esperar 200 ms en su lugar.(>")>
y<("<)
Esta pequeña explicación es sobre la generación
(>")>
y<("<)
, aunquex
puede enviar la IP fuera de ella (se explica a continuación).fuente
JavaScript (ES6) + HTML5:
118116+ 8 = 124 bytesJavascript: 119 bytes
Estoy usando los milisegundos desde la época para generar un número aleatorio. Teóricamente, esto siempre generaría el mismo (conjunto de) número (s), pero una prueba en mi PC me dio un resultado bastante aleatorio (la mayoría de los números aparecieron más o menos por igual). También usando el hecho de que los elementos html con una identificación se agregan al objeto de ventana global en JavaScript, por lo que
document.getElementById()
lo que no es necesario.HTML: 8 bytes
Estoy omitiendo las citas aquí y no estoy cerrando la
b
etiqueta. No es html válido, pero todos los navegadores cierran automáticamente la etiqueta de todos modos. Lo puse en negrita porqueb
es un elemento HTML de un carácter y porque el baile de mi pájaro merece ser notado.fuente
PowerShell ,
124117bytes(Gracias TimmyD )
Pruébalo en línea! (No es que funcione en TIO ...)
fuente
$b
y usar un pseudoternario para bajar a 117for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}
... Creo que más corto es posible; Todavía lo estoy hurgando.Noodel , 67 bytes no competitivos
Este desafío fue muy difícil para Noodel porque no tiene operadores aritméticos inteligentes o comparativos. Pero después de hacer este desafío, creo que Noodel está listo para su primer lanzamiento.
Intentalo:)
Cómo funciona
64 bytes
Aquí hay una versión que funciona como un fragmento de código.
fuente
Python, 157 bytes
También intenté hacerlo sin el pollo ascii art, pero eso fue mucho más tiempo.
fuente
Ruby, 97 + 1 = 98 bytes
+1 byte de la
-n
bandera.fuente
Clojure,
185178 bytes+18 bytes porque no comenzaba con
<(")>
.-7 bytes en línea
birds
y deshaciéndose delet
.Simplemente divide las aves en los espacios, elige un índice aleatorio de 0-6, muestra el ave elegida, luego, si el índice elegido es mayor que 2, espera 100 ms, de lo contrario 200 ms.
Clojure realmente necesita una cuerda
split
método de en el núcleo.Sin golf:
fuente