Buzzby Berkeley Roboter Hokey Pokey
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, um eine ASCII-Kunstanimation zu erstellen, die eine Reihe von Robotern zeigt, die zu den Texten des Hokey Pokey (oder Cokey, wenn Sie es vorziehen) im Stil einer Busby Berkeley-Zahl tanzen!
Beispielausgabe
Eingang
Akzeptiert drei Argumente (die als gültig angenommen werden):
N = Anzahl der Roboter in der Linie (Min = 6)
B = Dauer eines "Schlags" in Millisekunden (Min = 10)
D = Verzögerung in ms zwischen aufeinanderfolgenden Robotern (Min = 0)
(In der obigen Beispielausgabe: N = 8, B = 380, C = 75)
Spezifikationen
N Roboter werden nacheinander auf einer Bühne gezeigt.
Unterhalb der Bühne wird jeweils eine Textzeile aus "dem Vers" angezeigt (auf 1 Zeichen zentriert und in Anführungszeichen eingeschlossen).
Die Roboter führen die Aktionen für jede Zeile wie gezeigt aus, bis der Vers 5 Mal wiederholt wurde.
Eine Aktion wird ausgeführt, indem ein Roboter mit einer Reihe von ASCII-Zeichen dargestellt wird und eine bestimmte Zeitspanne gewartet wird, bevor die nächste Aktion ausgeführt wird. Die Dauer einer Aktion wird in "Beats" gemessen. Die Dauer von 1 Takt ist eine Anzahl von Millisekunden, B .
Der erste Roboter führt die Aktionen für jede Verszeile sofort aus, wenn der Text der Zeile angezeigt wird.
Jeder nachfolgende Roboter verzögert den Beginn seiner Aktionen, bis eine bestimmte Zeit ( D ) nach dem Beginn seiner Aktionen durch den Roboter rechts (links von Ihnen!) Verstrichen ist.
Die Darstellungen der Roboter unterscheiden sich durch die ASCII-Zeichen, die die "Antenne" eines Roboters darstellen, von denen es 5 mögliche Typen gibt, die bei jedem Programmlauf zufällig verteilt werden.
Jeder Antennentyp muss von mindestens einem Roboter verwendet werden, derselbe Antennentyp darf jedoch nicht auf Robotern vorkommen, die von weniger als 3 anderen Robotern getrennt sind. Die Mengen von zwei beliebigen Antennentypen dürfen sich um nicht mehr als 1 unterscheiden (z. B. 1xType_4 und 3xType_5 sind ungültig, da 3-1> 1).
Vers und Handlungen
Der ganze Vers wird fünfmal wiederholt, jeweils eine Zeile ...
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
Ersetzen Sie für jede Wiederholung (R) des Verses? und ??...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Aktionen und ASCII-Muster
Jede gekennzeichnete Aktion wird durch 5 Zeilen mit 8 ASCII-Symbolen dargestellt.
Die Darstellung jeder Aktion ist wie folgt ...
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__/
Ersetzen Sie in Zeile 1 "1-4" durch das entsprechende Symbol für jeden Antennentyp ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Ausgabe
Die gesamte Szene muss mindestens einmal sofort gerendert werden, wenn sich der Inhalt der Szene in irgendeiner Weise ändert. (Unter der Annahme, dass die Verzögerung zwischen den Aktionen der Roboter> 0 ist, kann die Ausgabe mindestens N- mal pro Aktion gerendert werden .)
Im Idealfall wird für eine Animation die Konsole oder der entsprechende Ausgabebereich gelöscht, bevor jedes Update gerendert wird. Um Sprachen zur Verfügung zu stellen, die die Konsole nicht löschen können, kann die Ausgabe auch in einem kontinuierlichen Stream wiedergegeben werden, vorbehaltlich derselben oben beschriebenen Anforderung.
Wertung
Gewinner sind die kürzesten Programme in jeder Sprache sowie die kürzesten insgesamt.
Ausnahme 1 Da das Löschen der Konsole für jedes Rendering vorzuziehen, jedoch nicht erforderlich ist, zählen ausschließlich für diesen luxuriösen Zweck verwendete Bytes nicht zu den Gesamtbytes. Dies umfasst Befehle zum Löschen der Konsole und zum Auffüllen der Ausgabe mit Leerzeilen, um den Inhalt der Konsole nicht mehr anzuzeigen.
Ausnahme 2 CSS oder effektiv ähnliche Mittel, die ausschließlich zum Zweck der Gestaltung der Ausgabe über die Mindestanforderungen hinaus verwendet werden, zählen nicht für die Gesamtzahl der Bytes. ZB *{color:blue;text-align:center;}
zählt nur 32-10 = 22 Bytes, da color:blue;
dies keiner Spezifikation entspricht, wohingegen zentrierter Text angegeben wird.
Meta
Inspiriert von (zeigt mein Alter) dem TRS-80 Dancing Demon , Android Nim und natürlich Busby Berkeley (und nein, ich bin nicht so alt).