Buzzby Berkeley Robot Hokey Pokey
Tarea
¡Escriba un programa o función para producir una animación artística ASCII que represente una línea de robots bailando con la letra de Hokey Pokey (o Cokey, si lo prefiere) al estilo de un número de Busby Berkeley!
Salida de ejemplo
Entrada
Acepta tres argumentos (se supone que son válidos):
norte = número de robots en la línea (Min = 6)
si = duración de un "latido" en milisegundos (Min = 10)
re = retraso en ms entre robots sucesivos (Min = 0)
(En el ejemplo de salida anterior: N = 8, B = 380, C = 75)
Presupuesto
N robots se muestran en una fila sobre un escenario.
Se muestra una línea de texto de "el verso" a la vez debajo del escenario (centrada dentro de 1 carácter y entre comillas).
Los robots realizan las acciones para cada línea como se muestra hasta que el verso se repite 5 veces.
Una acción se realiza representando un robot usando un conjunto de caracteres ASCII y esperando una duración específica antes de realizar la siguiente acción. La duración de una acción se mide en "latidos". La duración de 1 latido es un número de milisegundos, B .
El primer robot comienza a realizar las acciones para cada línea del verso inmediatamente cuando se muestra el texto de la línea.
Cada robot posterior retrasa el inicio de sus acciones hasta un momento específico ( D ) después de que el robot a su derecha (¡su izquierda!) Comience sus acciones.
Las representaciones de los robots varían según los caracteres ASCII que representan la "antena" de un robot, de los cuales hay 5 tipos posibles, distribuidos aleatoriamente cada vez que se ejecuta el programa.
Cada tipo de antena debe ser utilizado por al menos un robot, pero el mismo tipo no debe aparecer en ningún robot separado por menos de otros 3 robots. Las cantidades de dos tipos de antenas pueden diferir en no más de 1 (por ejemplo, 1xType_4 y 3xType_5 es ilegal ya que 3-1> 1)
Verso y acciones
Todo el verso se repite 5 veces, 1 línea a la vez ...
Line Text Action/Beats,
---- ----------------------------- ------------------------------------
1 You put your ? in ??/4
2 You take your ? out AA/4
3 You put your ? in ??/4
4 And you shake it all about AA/1, ??/1, AA/1, ??/1
5 You do the Hokey Pokey and...
...you turn yourself around AA/1, H[1-7]/1
6 That's what it's all about! AA/4, ZZ/4
Para cada repetición (R) del verso, ¿sustituir? y ?? ...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Acciones y patrones ASCII
Cada acción etiquetada está representada por 5 líneas de 8 símbolos ASCII.
La representación de cada acción es la siguiente ...
1 | 12 12 12 12 12 12 12
2 | [''] [''] [''] [''] [''] [''] \[*-]
3 | └[__]┘ └[__]┘ └[__]┘┌[__]┘ └[__]┐ ┌[__]┐ [__]\
4 | || /< >\ <\ /> / \ /|
5 |--------------------------------------------------------
|\__AA__/\__RF__/\__LF__/\__RH__/\__LH__/\__WS__/\__ZZ__/
1 | 12 12_ 34_ 34 _34 _12 12
2 | [''] [" ] [ _] [__] [_ ] [ "] ['']
3 | >[__]< [_<] [<.] <[..]> [.>] [>_] <[__]>
4 | || |\ || /| || |\ ||
5 |--------------------------------------------------------
|\__H1__/\__H2__/\__H3__/\__H4__/\__H5__/\__H6__/\__H7__/
En la fila 1, reemplace "1-4" con el símbolo correspondiente para cada tipo de antena ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Salida
La escena completa debe representarse al menos una vez inmediatamente cuando el contenido de la escena cambie de alguna manera. (Es decir, suponiendo que el retraso entre las acciones de los robots es> 0, la salida se puede representar no menos de N veces por acción).
Idealmente, para una animación, la consola o el área de salida equivalente se borra antes de que se presente cada actualización. Para proporcionar idiomas que no pueden borrar la consola, la salida también se puede representar en un flujo continuo, sujeto al mismo requisito descrito anteriormente.
Tanteo
Los ganadores son los programas más cortos en cada idioma, así como los más cortos en general.
Excepción 1 Debido a que es preferible borrar la consola de cada render, aunque no es obligatorio, los bytes utilizados exclusivamente para este lujoso propósito no cuentan para el total de bytes. Esto incluye comandos para borrar la consola y resultados de relleno con líneas en blanco para desplazar el contenido de la consola fuera de la vista.
La excepción 2 CSS o medios similares efectivamente utilizados exclusivamente con el propósito de diseñar la salida más allá de los requisitos mínimos no cuentan para el total de bytes. Por ejemplo, *{color:blue;text-align:center;}
cuenta como solo 32-10 = 22 bytes ya color:blue;
que no sirve para satisfacer ninguna especificación, mientras que se especifica el texto centrado.
Meta
Inspirado por (mostrando mi edad) el Demonio Bailar TRS-80 , Android Nim , y por supuesto Busby Berkeley (y no, no estoy de que edad).
Respuestas:
Damas y caballeros, por favor den la bienvenida a nuestra encantadora
Grupo de baile completo de frontend-stack, 1.320
1.3781.4251.495bytesJavaScript: 1,195 bytes | CSS: 103 bytes | HTML: 22 bytes
Este es un lindo desafío. También tiene muchos casos especiales. Oh chico, tantos casos especiales. Y esas antenas ...
Se ejecutará para siempre y se reiniciará después de que se completen todas las acciones (
left foot
,right foot
etc.).Puede probarlo en jsFiddle o utilizando el fragmento de código que se muestra a continuación:
Probado en Chrome y Firefox en macOS, Windows 10 y Ubuntu
Ediciones
createElement
y se eliminó el acceso largo a.firstChild
.getElementById
. Esto también hacedocument
innecesario el almacenamiento en caché .||
y&&
con bit a bit&
y|
. Gracias a TheLethalCoder .fuente
||
y&&
para|
y&
?C #, 1188
13761382bytes después de excepcionesComprimido:
Formato ligeramente más agradable y envuelto en un programa ejecutable:
Pruébalo en línea!
mono main.exe 8 400 40
Editar 1
Reemplazado
string.Format(i,j)
coni.Replace("?",j)
ahorro de 6 bytes en general.Editar 2
Renovación completa con sugerencias de los comentarios.
fuente
c
por un pequeño ahorro. Sabía que había olvidado una mejor manera quenew string(c,n)
. Sin embargo, ahora que he aliasS=String
,new S(c,n)
es más corto aún.JavaScript, 948 bytes
Probablemente deficiente para responder su propia pregunta, pero de todos modos ...
Intenté todo tipo de formas de comprimir el texto, pero la mayoría terminó más tiempo que el original con la clave + algoritmo incluido. Estoy seguro de que todavía hay una forma más óptima de comprimirlo todo, pero tengo que dibujar la línea en alguna parte.
Curiosamente, la búsqueda arrojó una o dos ideas para algunos otros desafíos que podría refinar y publicar más tarde.
( NB: contiene algunos caracteres en el rango 1-31 cuyas representaciones son un poco extrañas cuando se publican aquí)
¡Mira el ciclo de baile psicodélico completo en CodePen !
fuente