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).
Antworten:
Sehr geehrte Damen und Herren, bitte begrüßen Sie unseren lieben
Volle Frontend-Stack-Tanzgruppe, 1.320
1.3781.4251.495BytesJavaScript: 1.195 Byte | CSS: 103 Bytes | HTML: 22 Bytes
Dies ist eine nette Herausforderung. Es hat auch viele Sonderfälle. Oh Mann, so viele Sonderfälle. Und diese Antennen ...
Es läuft immer und neu starten , nachdem alle Aktionen (
left foot
,right foot
etc.) abgeschlossen sind.Sie können es auf jsFiddle oder mit dem folgenden Code-Snippet-Ding versuchen :
Getestet in Chrome und Firefox unter MacOS, Windows 10 und Ubuntu
Bearbeitungen
createElement
entfernt und den langen Zugriff auf entfernt.firstChild
.getElementById
. Dies macht auch das Zwischenspeicherndocument
unnötig.||
und&&
durch bitweise&
und gespart|
. Vielen Dank an TheLethalCoder .quelle
||
und&&
zu|
und&
?C #, 1188
13761382Bytes nach AusnahmenVerdichtet:
Etwas besser formatiert und in ein ausführbares Programm eingebunden:
Probieren Sie es online!
mono main.exe 8 400 40
Bearbeiten 1
Ersetzt
string.Format(i,j)
durchi.Replace("?",j)
Gesamtersparnis von 6 Bytes.Bearbeiten 2
Komplette Überarbeitung mit Vorschlägen aus den Kommentaren.
quelle
c
für eine kleine Ersparnis los . Ich wusste, dass ich einen besseren Weg vergessen hatte alsnew string(c,n)
. Jetzt, da ich eine Voreingenommenheit habeS=String
,new S(c,n)
ist sie jedoch noch kürzer.JavaScript, 948 Bytes
Wahrscheinlich schlechte Form, um Ihre eigene Frage zu beantworten, aber trotzdem ...
Versucht alle Arten von Möglichkeiten, um den Text zu komprimieren, aber die meisten endeten länger als das Original mit dem Schlüssel + Algorithmus enthalten. Ich bin mir sicher, dass es immer noch eine optimalere Möglichkeit gibt, alles zu komprimieren, aber ich muss die Grenze irgendwo ziehen.
Interessanterweise ergab die Suche ein oder zwei Ideen für einige andere Herausforderungen, die ich später verfeinern und veröffentlichen könnte.
( NB: Enthält einige Zeichen im Bereich von 1 bis 31, deren Darstellungen hier etwas merkwürdig sind.)
Sehen Sie sich den gesamten psychedelischen Tanzzyklus auf CodePen an !
quelle