*> <> , 103 101 bajtów
<vD[3'(")'
1x<.5
S\:43_C43CdooI:o@:o@:o@Do
R!"^"x"v">
>:2* _"><"92.
x '>)">('u.02S*2:oooooodO<'<("<)'
Wypróbuj tutaj! (napisz n
na początkowym stosie, inaczej pojawi się błąd)
Zdecydowałem się rzucić wyzwanie na moje wyzwanie, ponieważ nie było odpowiedzi poniżej 100 bajtów. Umieść n
na stosie i gotowe! Spowoduje to ponowne użycie (")
znaków do zapisania niektórych bajtów.
Wyjaśnienie
Inicjalizacja
<vD[3'(")'
Tutaj przechowujemy (")
do późniejszego wykorzystania.
< 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"
Wybór tańca
1x<.5
\
Jest to często wykonywane, aby wybrać rodzaj tańca, który będziemy generować.
x generate a 100ms dance or a 200ms dance
1 .5 jump to "200ms dance"
\ mirror IP into "100ms dance"
Jest v
powyżej x
i <
na prawo od niego zbyt. Powodują one x
ponowne uruchomienie, jeśli spróbuje przesunąć adres IP w złym kierunku.
Wygeneruj taniec 100ms
S\:1*43_C43CdooI:o@:o@:o@Do
Tutaj generujemy i generujemy jeden ze 100ms ruchów tanecznych.
\ 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 - Wygeneruj „^” lub „v”
R!"^"x"v">
Jest to prosta funkcja, która generuje „^” lub „v”, a następnie zwraca. Działa podobnie do selektora tańca, gdzie ma instrukcje, x
aby zapewnić, że IP porusza się tylko w lewo lub w prawo.
x generate "^" or "v"
R!"^" > push "^" to stack and return
R "v" push "v" to stack and return
Generuj taniec 200ms
To kolejny, który zaczyna się od x
. Zostanie on podzielony na dwie sekcje: <(")>
i drugą (>")> and <("<)
, ponieważ są to dwie odrębne sekcje i x
to jedyna rzecz, którą dzielą.
<(")>
>:2* _"><"b2.
Zasadniczo robi to początek generate 100ms dance
rutyny, ale wypełnia ręce ptaka jak ><
przypadkowe ^v
połączenie. n
Tym razem mnoży się również przez dwa. To sprawia, że wszystko jest skonfigurowane do użycia generate 100ms dance
procedury, aby wyprowadzić cały ptak i zamiast tego poczekać 200 ms.
> 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"
(>")>
i <("<)
x '>)">('u.02S*2:oooooodO<'<("<)'
To małe wyjaśnienie dotyczy generowania (>")>
i <("<)
generowania, chociaż x
może wysyłać adres IP poza nim (wyjaśniony poniżej).
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"