Buzzby Berkeley Robot Hokey Pokey
Zadanie
Napisz program lub funkcję do stworzenia animacji artystycznej ASCII przedstawiającej linię robotów tańczących do tekstów Hokey Pokey (lub Cokey, jeśli wolisz) w stylu numeru Busby'ego Berkeleya!
Przykładowy wynik
Wkład
Akceptuje trzy argumenty (zakładane jako poprawne):
N = liczba robotów w linii (Min = 6)
B = czas trwania jednego „uderzenia” w milisekundach (min = 10)
D = opóźnienie w ms między kolejnymi robotami (Min = 0)
(W powyższym przykładzie wyjście: N = 8, B = 380, C = 75)
Dane techniczne
N robotów pokazano na scenie w rzędzie.
Jeden wiersz tekstu z „wersetu” jest wyświetlany naraz pod sceną (wyśrodkowany w obrębie 1 znaku i ujęty w cudzysłów).
Roboty wykonują akcje dla każdej linii, tak jak pokazano, aż wiersz zostanie powtórzony 5 razy.
Akcja jest wykonywana przez zobrazowanie robota przy użyciu zestawu znaków ASCII i odczekanie określonego czasu przed wykonaniem następnej akcji. Czas trwania akcji mierzony jest w „uderzeniach”. Czas trwania 1 bicie to liczba milisekund, B .
Pierwszy robot rozpoczyna wykonywanie akcji dla każdego wiersza wiersza natychmiast po wyświetleniu tekstu wiersza.
Każdy kolejny robot opóźnia rozpoczęcie swoich działań, aż określony czas ( D ) po tym, jak robot po swojej prawej stronie (po lewej stronie!) Rozpocznie swoje działania.
Przedstawienia robotów różnią się w zależności od znaków ASCII, które reprezentują „antenę” robota, której jest 5 możliwych typów, rozmieszczonych losowo przy każdym uruchomieniu programu.
Każdy typ anteny musi być używany przez co najmniej jednego robota, ale ten sam typ nie może pojawić się na żadnym z robotów oddzielonych mniej niż 3 innymi robotami. Ilości dowolnych dwóch rodzajów anten mogą różnić się nie więcej niż o 1 (np. 1xType_4 i 3xType_5 są nielegalne, ponieważ 3-1> 1)
Wiersz i działania
Cały wiersz powtarza się 5 razy, po jednym wierszu na raz ...
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
Zastąpić dla każdego powtórzenia (R) wersetu? i ??...
R ?= ??=
-- ----------- ---
1. right foot RF
2. left foot LF
3. right hand RH
4. left hand LH
5. whole self WS
Akcje i wzorce ASCII
Każde oznaczone działanie jest reprezentowane przez 5 linii 8 symboli ASCII.
Reprezentacja każdej akcji jest następująca ...
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__/
W wierszu 1 zastąp „1-4” odpowiednim symbolem dla każdego typu anteny ...
1 | 1234 1234 1234 1234 1234
| \/\/ |┌┐| )||( |||| ┐/\┌ <-- Symbols 1-4 for...
| 1 2 3 4 5 <-- ...antenna types 1-5
Wydajność
Cała scena musi być renderowana co najmniej raz natychmiast, ilekroć zawartość sceny zmienia się w jakikolwiek sposób. (Tzn. Zakładając, że opóźnienie między działaniami robotów wynosi> 0, wynik może być renderowany nie mniej niż N razy na akcję.)
W przypadku animacji najlepiej jest wyczyścić konsolę lub równoważny obszar wyjściowy przed renderowaniem każdej aktualizacji. Aby zapewnić obsługę języków niezdolnych do wyczyszczenia konsoli, dane wyjściowe mogą być również renderowane w ciągłym strumieniu, z zastrzeżeniem tych samych wymagań opisanych powyżej.
Punktacja
Zwycięzcy to najkrótsze programy w każdym języku, a także najkrótsze ogólnie.
Wyjątek 1 Ponieważ wyczyszczenie konsoli każdego renderowania jest preferowane, choć nie jest wymagane, bajty używane wyłącznie do tego luksusowego celu nie liczą się do całkowitej liczby bajtów. Obejmuje to polecenia wyczyszczenia konsoli i wypełnianie danych wyjściowych pustymi liniami do przewijania zawartości konsoli poza zasięgiem wzroku.
Wyjątek 2 CSS lub efektywnie podobne środki stosowane wyłącznie w celu nadania stylu wynikom wykraczającym poza minimalne wymagania nie liczą się do całkowitej liczby bajtów. Np. *{color:blue;text-align:center;}
Liczy się tylko jako 32-10 = 22 bajtów, ponieważ color:blue;
nie spełnia żadnej specyfikacji, podczas gdy tekst wyśrodkowany jest określony.
Meta
Zainspirowany (pokazując mój wiek) TRS-80 Dancing Demon , Android Nim i oczywiście Busby Berkeley (i nie, nie jestem aż tak stary).