Buzzby Berkeley Robot Hokey Pokey
Tâche
Écrivez un programme ou une fonction pour produire une animation artistique ASCII représentant une ligne de robots dansant sur les paroles du Hokey Pokey (ou Cokey, si vous préférez) dans le style d'un numéro de Busby Berkeley!
Exemple de sortie
Contribution
Accepte trois arguments (supposés valides):
N = nombre de robots dans la ligne (Min = 6)
B = durée d'un "battement" en millisecondes (Min = 10)
D = retard en ms entre les robots successifs (Min = 0)
(Dans l'exemple de sortie ci-dessus: N = 8, B = 380, C = 75)
Caractéristiques
N robots s'affichent sur une scène.
Une ligne de texte du "verset" est affichée à la fois sous la scène (centrée sur 1 caractère et entourée de guillemets.)
Les robots effectuent les actions pour chaque ligne comme indiqué jusqu'à ce que le verset ait été répété 5 fois.
Une action est exécutée en représentant un robot à l'aide d'un ensemble de caractères ASCII et en attendant une durée spécifiée avant d'effectuer l'action suivante. La durée d'une action est mesurée en "battements". La durée de 1 battement est un nombre de millisecondes, B .
Le premier robot commence à exécuter les actions pour chaque ligne de verset immédiatement lorsque le texte de la ligne est affiché.
Chaque robot suivant retarde le démarrage de ses actions jusqu'à un moment précis ( D ) après que le robot à sa droite (votre gauche!) A commencé ses actions.
Les représentations des robots varient selon les caractères ASCII qui représentent «l'antenne» d'un robot, dont il existe 5 types possibles, répartis de manière aléatoire à chaque exécution du programme.
Chaque type d'antenne doit être utilisé par au moins un robot, mais le même type ne doit apparaître sur aucun robot séparé par moins de 3 autres robots. Les quantités de deux types d'antennes quelconques peuvent différer d'au plus 1 (par exemple, 1xType_4 et 3xType_5 est illégal depuis 3-1> 1)
Verset et actions
Le verset entier est répété 5 fois, 1 ligne à la fois ...
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
Pour chaque répétition (R) du verset, remplacer? et ??...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Actions et modèles ASCII
Chaque action étiquetée est représentée par 5 lignes de 8 symboles ASCII.
La représentation de chaque action est la suivante ...
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__/
À la ligne 1, remplacez "1-4" par le symbole correspondant pour chaque type d'antenne ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Sortie
La scène entière doit être rendue au moins une fois immédiatement chaque fois que le contenu de la scène change de quelque façon que ce soit. (En supposant que le délai entre les actions des robots est> 0, la sortie peut être rendue pas moins de N fois par action.)
Idéalement, pour une animation, la console ou la zone de sortie équivalente est effacée avant le rendu de chaque mise à jour. Pour fournir des langues incapables d'effacer la console, la sortie peut également être rendue dans un flux continu, sous réserve des mêmes exigences décrites ci-dessus.
Notation
Les gagnants sont les programmes les plus courts dans chaque langue, ainsi que le plus court dans l'ensemble.
Exception 1 Étant donné que l'effacement de la console, chaque rendu est préférable mais non requis, les octets utilisés exclusivement à cette fin luxueuse ne comptent pas dans le total des octets. Cela inclut des commandes pour effacer la console et un remplissage de sortie avec des lignes vides pour faire défiler le contenu de la console hors de la vue.
Exception 2 CSS ou des moyens effectivement similaires utilisés exclusivement dans le but de styliser la sortie au-delà des exigences minimales ne sont pas pris en compte dans le nombre total d'octets. Par exemple, il ne *{color:blue;text-align:center;}
compte que 32-10 = 22 octets car color:blue;
il ne sert à satisfaire aucune spécification, tandis que le texte centré est spécifié.
Meta
Inspiré par (montrant mon âge) le TRS-80 Dancing Demon , Android Nim et bien sûr Busby Berkeley (et non, je ne suis pas si vieux).