*> <> , 103 101 Bytes
<vD[3'(")'
1x<.5
S\:43_C43CdooI:o@:o@:o@Do
R!"^"x"v">
>:2* _"><"92.
x '>)">('u.02S*2:oooooodO<'<("<)'
Probieren Sie es hier aus! (Schreiben Sie in nden Anfangsstapel, sonst wird eine Fehlermeldung angezeigt.)
Ich beschloss, meine Herausforderung anzupacken, da es keine Antworten unter 100 Byte gab. Platz nauf dem Stack und gehen Sie weg! Dadurch werden die (")Zeichen wiederverwendet , um einige Bytes zu speichern.
Erläuterung
Initialisierung
<vD[3'(")'
Hier speichern wir (")zur späteren Verwendung.
< move the IP left
[3'(")' push '(")' to a new stack
D move back down to a clean stack
v move the IP down into "dance chooser"
Tanzwähler
1x<.5
\
Dies wird häufig ausgeführt, um auszuwählen, welche Art von Tanz erzeugt werden soll.
x generate a 100ms dance or a 200ms dance
1 .5 jump to "200ms dance"
\ mirror IP into "100ms dance"
Es gibt auch ein vdarüber xund ein <rechts davon. Diese veranlassen die xerneute Ausführung, wenn versucht wird, die IP in die falsche Richtung zu verschieben.
Generiere 100ms Tanz
S\:1*43_C43CdooI:o@:o@:o@Do
Hier erzeugen wir eine der 100ms Tanzbewegungen und geben sie aus.
\ mirror the IP right
: copy n
43 C43C call "generate '^' or 'v'" twice
_ ignored mirror
do output a carriage return
o output the first hand of the bird
I:o@:o@:o@D select, copy, and output '(")'
o output the second hand of the bird
S sleep for previous n*100ms
\ mirror IP back to "dance chooser"
43C - "^" oder "v" erzeugen
R!"^"x"v">
Dies ist eine einfache Funktion, die "^" oder "v" generiert und dann zurückgibt. Es funktioniert ähnlich wie der Tanzwähler, in dem Anweisungen vorhanden sind, um xsicherzustellen, dass sich die IP nur nach links oder rechts bewegt.
x generate "^" or "v"
R!"^" > push "^" to stack and return
R "v" push "v" to stack and return
200ms Tanz erzeugen
Dies ist eine andere, die mit beginnt x. Es wird in zwei Abschnitte unterteilt: <(")>und einen weiteren (>")> and <("<), da es sich um zwei unterschiedliche Abschnitte handelt und xder einzige ist, den sie teilen.
<(")>
>:2* _"><"b2.
Dies ist im Grunde genommen der Anfang der generate 100ms danceRoutine, füllt aber die Vogelhände wie ><bei einer zufälligen ^vKombination. Auch ndiesmal multipliziert es sich mit zwei. Dies macht es zum Setup, die generate 100ms danceRoutine zu verwenden, um den gesamten Vogel auszugeben und stattdessen 200 ms zu warten.
> move IP right
:2* copy n and do n*2
_ ignored mirror
"><" push "><" to stack
b2. jump to "output carriage return" in "generate 100ms dance"
(>")> und <("<)
x '>)">('u.02S*2:oooooodO<'<("<)'
Diese kleine Erklärung bezieht sich auf die (>")>und <("<)-Erzeugung, obwohl xdie IP außerhalb davon gesendet werden kann (unten erklärt).
x move to "choose dance", generate (>")>, <("<), or <(")> (previous routine)
'>)">(' push '(>")>' to the stack
'<("<)' push '<("<)' to the stack
u O< ensure inner code block is always executed with IP moving left
od output carriage return
ooooo output bird
S*2: sleep for n*200ms
.02 jump to "dance chooser"