Raffaele Cecco jest programistą, który pod koniec lat osiemdziesiątych wyprodukował jedne z najlepszych gier wideo dla komputera ZX Spectrum . Między innymi, rozwinął się dużym uznaniem Cybernoid i Exolon .
Raffaele kończy 50 maja 10 maja 2017 r . To wyzwanie jest dla niego małym hołdem dla szczęśliwych godzin, które wielu z nas spędzało, grając w te wspaniałe gry, oraz dla motywacji, jaką przynieśli.
Wyzwanie
Celem jest stworzenie prostokątnej markizy inspirowanej tym, co widać na głównym ekranie menu Cybernoida , ale w sztuce ASCII.
W szczególności łańcuch "Happy birthday Raffaele Cecco "
(zwróć uwagę na ostatnią spację) będzie obracał się wzdłuż krawędzi prostokąta 12 × 5, ze stałym czasem przerwy między migawkami.
Na przykład, zakładając, że tekst jest wyświetlany zgodnie z ruchem wskazówek zegara i obracany przeciwnie do ruchu wskazówek zegara (patrz opcje poniżej), oto trzy kolejne migawki prostokątnej markizy:
Happy birthd
a
o y
c
ceC eleaffaR
następnie
appy birthda
H y
o R
cceC eleaffa
następnie
ppy birthday
a
H R
a
occeC eleaff
i tak dalej.
Zasady
Nie zostaną pobrane żadne dane wejściowe. Dane wyjściowe będą przesyłane przez STDOUT lub równoważne, lub w oknie graficznym.
Dane wyjściowe powinny faktycznie przedstawiać obracający się tekst; to znaczy, każda nowa migawka powinna zastąpić poprzednią, aby sprawiać wrażenie ruchu. Można to zrobić w dowolny sposób, na przykład pisząc odpowiednią liczbę znaków nowej linii, aby skutecznie wyczyścić ekran. Jest to dopuszczalne, jeśli jest to ważne tylko dla danego rozmiaru ekranu; po prostu podaj to w odpowiedzi.
Akceptowane są następujące opcje:
- Tekst może być wyświetlany zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara i może być obracany zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara (przykładowe migawki powyżej zakładają wyświetlanie zgodnie z ruchem wskazówek zegara i obracanie w lewo).
- Obracanie powinno następować cyklicznie w nieskończonej pętli (aż do zatrzymania programu) i może rozpocząć się w dowolnej fazie.
- Czas pauzy między migawkami powinien być w przybliżeniu stały, ale można go dowolnie wybierać między 0,1 a 1 s. Dopuszczalna jest początkowa pauza przed wyświetleniem pierwszej migawki.
- Litery mogą być dużymi, małymi lub mieszanymi (jak w powyższym przykładzie).
- Wiodące lub końcowe puste miejsce jest dozwolone.
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
Jeśli to możliwe, podaj plik gif przedstawiający dane wyjściowe lub link do przetestowania programu.
Najkrótszy kod w bajtach wygrywa.
Odpowiedzi:
Galaretka ,
7465 bajtówWersja systemu Windows działająca w 6-liniowej konsoli cp-65001.
Pomiędzy iteracjami trwa pół sekundy (plus ocena):
W jaki sposób?
źródło
HTML + ES6, 200 bajtów
źródło
ZX Spectrum BASIC, 187 bajtów
Zirytowany, że Philip pobił mnie do tego o kilka minut :-) Numery takie jak
\{15}
to nie drukowalne kody kontrolne - skompiluj ze zmakebas, jeśli chcesz majstrować. Zauważ, że pełny prostokąt nie jest drukowany natychmiast, ale wpada na miejsce po kilku pierwszych klatkach.Wypróbuj tutaj (wersja emulowana JS online, naciśnij Enter, aby rozpocząć) ... http://jsspeccy.zxdemo.org/cecco/
Możesz także zapisać cztery bajty, czyszcząc ekran między ramkami zamiast DRUKOWAĆ AT, ale jest zbyt migotliwy, aby był tego wart ...
źródło
V,
757170 bajtów4 bajty zapisane dzięki @DJMcMayhem
Oto link do TIO, ale pamiętaj, że to nie zadziała w TIO, ponieważ program zapętla się w nieskończoność. Wypróbuj online!
Ponieważ ten kod zawiera niedrukowalne, oto zrzut heksowy.
Czas snu wynosi 500 milisekund.
źródło
H|
->{
.<C-v>êx
->dê
i5L
->}
±± a
,o° y
ic±±<space>
5L
=>}
.ZX Spectrum BASIC, 274 bajty
Cóż, ktoś musiał to zrobić. Pedanci mogą chcieć zdyskwalifikować to za zbyt powolne działanie i brak przerwy między animacjami, ale tutaj zgłaszam specjalny przypadek :-)
Nie bardzo golfa. 274 bajtów to liczba bajtów zapisanych przez Spectrum na taśmie podczas zapisywania tego programu.
źródło
SGN PI
dla1
(zapisuje 5 bajtów), ale zapomniałeśNOT PI
dla0
iVAL
dla innych stałych ...NOT PI
Właśnie tęskniłem. Celowo nie zrobił tego,VAL
ponieważ był wystarczająco powolny iVAL
był strasznie wolny.SVG (HTML5), 267 bajtów
Cóż, jest prostokątny i jest namiotem, i jest tekstem ASCII ...
źródło
PHP, 184 bajty
drukuje 39 nowych linii, aby wyczyścić ekran; biegać z
-nr
.Rzeczywista pauza wynosi 1 sekundę; ale przyspieszyłem gif.
bez golfa
źródło
Python 2,
230184 bajtówWypróbuj w repl.it
źródło
Python 3 , 160 bajtów
Wypróbuj online! (Bez animacji)
źródło
Python 2,
218200190181176 bajtów-18 bajtów przez usunięcie
str
formatowania-10 bajtów, dzięki sugestiom @Uriel i @ElPedro
-9 bajtów poprzez usunięcie ujemnego indeksowania
-5 bajtów przez przechowywanie odwróconych
f
jakov
iwhile
warunkówrepl.it
źródło
while 1:
iprint
zastąpić następną;
(rzeczywistą) nową linią. Równieżf='H..
. Takf[:1]
naprawdę jestf[0]
.time.sleep(1)
wziąć go poniżej 200?Ruby + GNU Core Utils, 136 bajtów
źródło
Python 2,
182179173160 bajtówWypróbuj w repl.it
Nie działa na TIO, więc moja pierwsza próba użycia repl.it
Edycja Używanie pętli „marnowania czasu” do zliczenia do 1000000 daje spójne opóźnienie między 0,1 a 1 s na mojej maszynie i repl.it i oszczędza importowania
time
. Myślę, że jeśli uruchomiłeś go na starym komputerze 286 z 64 MB pamięci RAM, może to potrwać 1 sekundę, ale jestem pewien, że tak się nie stanie. Jeśli tak, po prostu zmniejsz 1000000 i zaoszczędź mi kilka bajtów :-)Edytuj 2-6, aby zapamiętać, że wyrażenia z listy w Pythonie 2 przeciekają ostatnią wartość,
s
więc mogę użyć jej później, a także pamiętam, że całkiem dobrze wszystko inne niż 0 i „” jest prawdziwe. Błędy lub funkcje? Nie obchodzi mnie to. Zaoszczędziło mi to 6 bajtów :-)Edytuj 3 Kolejne 13, odwracając obrót i korzystając ze zrozumienia listy dla środkowych rzędów w złączeniu i zmieniając
3000000
na40**4
. Dzięki @FelixDombek za ostatni. Musiałem jednak stracić moją sztuczkę ze zrozumieniem listy.źródło
999999
zamiast1000000
bajtu: VKod maszynowy ZX81 Z80,
158130 bajtówOK, więc ma dużo bajtów, dopóki się nie zmontuje, ale potem spada do 130 bajtów. Nie jesteś pewien, czy to łamie jakieś zasady? To mój pierwszy post i tylko jako gość.
Program używa „brutalnej siły” do wyświetlenia komunikatu, a nie sprytnego użycia funkcji, co widać po sposobie, w jaki ma oddzielne fragmenty kodu dla górnej linii, prawej pionowej, dolnej i lewej pionowej. Animację uzyskuje się poprzez obrócenie zawartości wiadomości, a następnie wyświetlenie jej po krótkim opóźnieniu, które powinno wynosić dokładnie dokładnie 0,2 sekundy, ponieważ czeka na 10 klatek z szybkością 50 (w każdym razie w przypadku Zeddys z Wielkiej Brytanii).
Muszę wyrazić uznanie dla kmurty za obrócenie wiadomości w celu uzyskania animacji - dzięki temu zaoszczędzono 28 bajtów !!!
Niestety nie mogę opublikować linku do niego działającego, ponieważ jest to skompilowany program w formacie .P dla EightyOne (lub innych emulatorów) lub rzeczywistego Zeddy, jeśli masz ZXPand lub podobny do ładowania.
Plik .P można pobrać ze strony http://www.sinclairzxworld.com/viewtopic.php?f=11&t=2376&p=24988#p24988
źródło