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).
Odpowiedzi:
Szanowni Państwo, proszę powitać naszą kochaną
Pełna grupa taneczna Frontend-Stack,
13201 378 1425 1495bajtówJavaScript: 1,195 bajtów | CSS: 103 bajty | HTML: 22 bajty
To słodkie wyzwanie. Ma również wiele specjalnych przypadków. Och chłopcze, tyle specjalnych przypadków. A te anteny…
Będzie ona trwać wiecznie i ponownie po wykonaniu wszystkich czynności (
left foot
,right foot
etc.) są zakończone.Możesz go wypróbować na jsFiddle lub za pomocą krótkiego fragmentu kodu:
Testowane w Chrome i Firefox na macOS, Windows 10 i Ubuntu
Edycje
createElement
i usunąłem długi dostęp do.firstChild
.getElementById
. To powoduje, że buforowanie staje siędocument
niepotrzebne.||
i&&
bitowe&
i|
. Dzięki TheLethalCoder .źródło
||
i&&
do|
i&
?C #, 1188
13761382bajtów po wyjątkachZagęszczony:
Nieco ładniejsze formatowanie i zapakowane w program wykonywalny:
Wypróbuj online!
mono main.exe 8 400 40
Edytuj 1
Zastąpione
string.Format(i,j)
zi.Replace("?",j)
oszczędności 6 bajtów ogólnej.Edytuj 2
Całkowicie odnowiony z sugestiami z komentarzy.
źródło
c
się małej oszczędności. Wiedziałem, że zapomniałem lepszego sposobu niżnew string(c,n)
. Jednak teraz, kiedy już aliasS=String
,new S(c,n)
jest jeszcze krótszy.JavaScript, 948 bajtów
Prawdopodobnie kiepska forma na odpowiedź na twoje pytanie, ale w każdym razie ...
Próbowałem różnych sposobów kompresji tekstu, ale większość zakończyła się dłużej niż oryginał z dołączonym algorytmem klucz +. Jestem pewien, że jest jeszcze bardziej optymalny sposób na skompresowanie tego wszystkiego, ale muszę gdzieś wytyczyć granicę.
Co ciekawe, wyszukiwanie przyniosło jeden lub dwa pomysły na inne wyzwania, które mogę udoskonalić i opublikować później.
( Uwaga: zawiera niektóre postacie z zakresu 1-31, których reprezentacje są nieco dziwne, gdy zamieszczono tutaj)
Obejrzyj pełny psychodeliczny cykl taneczny na CodePen !
źródło