Buzzby Berkeley Robot Hokey Pokey
Compito
Scrivi un programma o una funzione per produrre un'animazione artistica ASCII che raffigura una linea di robot che danzano sul testo di Hokey Pokey (o Cokey, se preferisci) nello stile di un numero di Busby Berkeley!
Esempio di output
Ingresso
Accetta tre argomenti (considerati validi):
N = numero di robot nella linea (Min = 6)
B = durata di un "battito" in millisecondi (Min = 10)
D = ritardo in ms tra i robot successivi (Min = 0)
(Nell'esempio sopra riportato: N = 8, B = 380, C = 75)
specificazioni
N robot sono mostrati in fila su un palco.
Una riga di testo da "il verso" è mostrata alla volta sotto il palcoscenico (centrata all'interno di 1 carattere e racchiusa tra virgolette).
I robot eseguono le azioni per ciascuna riga come mostrato fino a quando il verso non è stato ripetuto 5 volte.
Un'azione viene eseguita raffigurando un robot che utilizza un set di caratteri ASCII e attende una durata specificata prima di eseguire l'azione successiva. La durata di un'azione è misurata in "battiti". La durata di 1 battuta è un numero di millisecondi, B .
Il primo robot inizia a eseguire le azioni per ciascuna riga del verso immediatamente quando viene visualizzato il testo della riga.
Ogni robot successivo ritarda l'avvio delle sue azioni fino a un tempo specifico ( D ) dopo che il robot alla sua destra (la tua sinistra!) Inizia le sue azioni.
Le rappresentazioni dei robot variano in base ai caratteri ASCII che rappresentano l '"antenna" di un robot, di cui esistono 5 tipi possibili, distribuiti casualmente ogni volta che il programma viene eseguito.
Ogni tipo di antenna deve essere utilizzato da almeno un robot, ma lo stesso tipo non deve apparire su alcun robot separato da meno di 3 altri robot. Le quantità di due tipi di antenne non possono differire di non più di 1 (ad es. 1xType_4 e 3xType_5 sono illegali dal 3-1> 1)
Verso e azioni
L'intero verso è ripetuto 5 volte, 1 riga alla volta ...
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
Per ogni ripetizione (R) del verso, sostituire? e ??...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Modelli di azioni e ASCII
Ogni azione etichettata è rappresentata da 5 linee di 8 simboli ASCII.
La rappresentazione di ogni azione è la seguente ...
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__/
Nella riga 1, sostituire "1-4" con il simbolo corrispondente per ciascun tipo di antenna ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Produzione
L'intera scena deve essere riprodotta almeno una volta immediatamente ogni volta che il contenuto della scena cambia in alcun modo. (Supponendo che il ritardo tra le azioni dei robot sia> 0, l'output può essere renderizzato non meno di N volte per azione.)
Idealmente, per un'animazione la console o l'area di output equivalente viene cancellata prima del rendering di ogni aggiornamento. Per garantire che le lingue non siano in grado di cancellare la console, l'output può anche essere riprodotto in un flusso continuo, soggetto agli stessi requisiti sopra descritti.
punteggio
I vincitori sono i programmi più brevi in ogni lingua, nonché i più brevi in assoluto.
Eccezione 1 Poiché la cancellazione della console per ogni rendering è preferibile, sebbene non richiesta, i byte utilizzati esclusivamente per questo lussuoso scopo non contano per i byte totali. Ciò include i comandi per cancellare la console e l'output di riempimento con righe vuote per scorrere i contenuti della console fuori dalla vista.
I CSS di eccezione 2 o mezzi effettivamente simili utilizzati esclusivamente allo scopo di definire lo stile dell'output oltre i requisiti minimi non contano ai byte totali. Ad esempio, *{color:blue;text-align:center;}
conta solo 32-10 = 22 byte poiché color:blue;
non serve a soddisfare alcuna specifica, mentre viene specificato il testo centrato.
Meta
Ispirato da (mostrando la mia età) il Demone Danza TRS-80 , Android Nim e ovviamente Busby Berkeley (e no, non sono così vecchio).