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).
Réponses:
Mesdames et messieurs, veuillez accueillir notre belle
Full Frontend-Stack Dance Group, 1 320
1 378 14251 495octetsJavaScript: 1 195 octets | CSS: 103 octets | HTML: 22 octets
C'est un joli défi. Il a également beaucoup de cas spéciaux. Oh mon garçon, tant de cas spéciaux. Et ces antennes…
Il s'exécutera indéfiniment et redémarrera une fois toutes les actions (
left foot
,right foot
etc.) terminées.Vous pouvez l' essayer sur jsFiddle ou en utilisant l'extrait de code ci-dessous:
Testé dans Chrome et Firefox sur macOS, Windows 10 et Ubuntu
Modifications
createElement
et supprimé le long accès à.firstChild
.getElementById
. Cela rend également la mise en cachedocument
inutile.||
et&&
par bit&
et et|
. Merci à TheLethalCoder .la source
||
et&&
à|
et&
?C #, 1188
13761382octets après exceptionsCompacté:
Formatage légèrement plus agréable et enveloppé dans un programme exécutable:
Essayez-le en ligne!
mono main.exe 8 400 40
Modifier 1
Remplacé
string.Format(i,j)
par unei.Replace("?",j)
économie globale de 6 octets.Modifier 2
Refonte complète avec suggestions des commentaires.
la source
c
pour une petite économie. Je savais que j'avais oublié un meilleur moyen quenew string(c,n)
. Cependant, maintenant que j'ai aliaséS=String
,new S(c,n)
c'est encore plus court.JavaScript, 948 octets
Forme probablement médiocre pour répondre à votre propre question, mais de toute façon ...
J'ai essayé toutes sortes de façons de compresser le texte, mais la plupart ont fini plus longtemps que l'original avec l'algorithme clé + inclus. Je suis certain qu'il existe toujours un moyen plus optimal de tout compresser, mais je dois tracer la ligne quelque part.
Fait intéressant, la recherche a donné une ou deux idées pour d'autres défis que je pourrais affiner et publier plus tard.
( NB: contient certains caractères dans la plage 1-31 dont les représentations sont un peu bizarres lorsqu'elles sont affichées ici)
Regardez le cycle complet de danse psychédélique sur CodePen !
la source