Niedawno (kilka lat temu) na stronach programistycznych pojawiło się trochę szumu na temat implementacji Tetris w 140 bajtach . ...
Okazuje się, że choć jest niewielki, jest to uproszczona wersja Tetris, a nawet kompletna implementacja. Tylko podstawowa funkcja logiczna mieści się w 140 bajtach JavaScript. Aby go uruchomić, potrzebujesz kolejnych ~ 840 znaków HTML.
Możemy zrobić lepiej!
Wyzwanie polega na wdrożeniu pełnej wersji „Binary Tetris” w jak najmniejszej liczbie tweetów.
Zasady binarne Tetris:
- Program musi wyświetlać pole gry zawierające co najmniej 5 kolumn i 6 rzędów komórek.
- Można stosować dowolną metodę wyświetlania, o ile bloki i krawędzie pola są wyraźnie oznaczone.
- Muszą być co najmniej dwa rodzaje bloków:
#
i##
. Dodatkowe wsparcie dla bloków, takich jak###
lub bloki kątowe w kształcie litery L, zostanie przeze mnie ocenione: P i najbardziej kompletna gra binarnych tetris (najwięcej bloków, takich jak funkcje oryginalne i rotacyjne) wygra moje szczęście i możliwe nagrody za 50 powtórzeń. - Nowe bloki są dodawane do pola w górnym rzędzie, a jedna komórka bloku musi zajmować środkową kolumnę.
- Bloki schodzą w kierunku dolnego rzędu ze stałą prędkością. Bloki muszą opadać nawet bez udziału użytkownika.
- Kiedy bloki dotykają dolnej części pola lub dolnego bloku, przestają spadać i zostają unieruchomione. Dodano nowy blok.
- Gdy wszystkie kolumny w rzędzie są wypełnione blokami, wiersz jest opróżniany, a wszystkie stałe bloki powyżej są rozwijane o jeden wiersz.
- Program musi reagować na naciśnięcia klawiszy. Muszą być 3 unikalne klucze, które wykonują następujące funkcje
- przesuń bieżący blok w lewo o 1 kolumnę
- przesuń bieżący blok w prawo o 1 kolumnę
- przesuń bieżący blok w dół o 1 rząd
- Każdy tweet może mieć tylko 140 znaków. Dozwolone jest stosowanie znaków wielobajtowych, które można umieścić w tweetach.
Zasady tego, co może znajdować się w tweecie, są proste. Jeśli możesz tweetować, możesz go użyć.
Języki interpretowane podlegają tym samym zasadom. Każda sekcja musi być zgodna ze specyfikacjami. Dopóki nie wystąpią błędy w czasie wykonywania (a reszta jest zgodna ze specyfikacjami), twoja odpowiedź jest poprawna. Zasady gry w golfa:
Ponieważ oryginalna implementacja była „tweetowalna”, to wyzwanie wymaga tego samego. Zgłoszenia muszą być przesyłane jako seria tweetów (wiersze o długości 140 znaków lub mniej).Pierwszy tweet musi zawierać nazwę kompilatora / tłumacza, nazwę programu i wszelkie argumenty wiersza poleceń
- zostanie zapisany jako plik „P0”
- Następujące N tweetów musi zawierać program jako serię wierszy.
- Każdy tweet zostanie zapisany w pliku o nazwie T <n>, gdzie n oznacza 1..N
- Każda linia zostanie dodana do poprzednich linii i skompilowana lub zinterpretowana. Musi wygenerować poprawny plik obiektowy lub program.
- Program nie musi działać, dopóki nie zostanie dodany ostatni wiersz.
Program zostanie uruchomiony w następujący sposób (pseudo-bash)
interp,prog,args = split P0 /\s/ touch $prog for file in ./T* do cat $prog file > $prog $interp $prog $args die("FAIL") if $? #detect error done
Tłumacz musi być powszechnie dostępnym programem wykonywalnym, który jeszcze nie implementuje Tetris.
Punktacja :
Najmniej tweetów, w tym P0. Więzy podzielone przez największą liczbę wolnych znaków (140 * num tweetów - łączna liczba znaków).
Przykładowe wpisy
chrome a.htm
<html><div id="output"></div></html>
<script>cool java script here</script>
Wynik = 3 (334 rezerwowy)
cc a.c ;a.out
main(){/*cool prog here*/}
Wynik = 2 (241 zapasowy)
tetris
Wynik = 1 (134 rezerwowy), jeśli było to zgodne z prawem, a nie jest
Szczególne podziękowania
Pozwolono mi to opublikować za zgodą Ashelly tutaj
źródło
Odpowiedzi:
Python 3, wynik 5 tweetów (242 zapasowych, zliczanie P0)
-19 bajtów dzięki Jonathanowi Allanowi !
Zapasowa liczba nie uwzględnia nowych linii między tweetami.
Tweet 1 (Deklaracja, 12 bajtów)
Tweet 2 (70 bajtów)
Tweet 3 (129 bajtów)
Tweet 4 (113 bajtów)
Tweet 5 (134 bajtów)
Pełny program (449 bajtów)
Czy jakieś zło wskazuje na hakowanie i przechowuje pole i kawałek w dwóch liczbach całkowitych. Postaram się wkrótce opublikować wyjaśnienie.
Uwaga: Działa to tylko w systemie Windows, ale można go przełączyć na system Linux za pomocą
msvcrt
→getch
i"cls"
→"clear"
. Dodatkowo wprowadzanie znaków nie działa na IDLE Pythona, więc polecam uruchomienie go w innym miejscu.źródło
\xe0
ma cztery bajty, a nie jeden, więc tweet 3 powinien mieć 130. Wygląda na to, że przegapiłeśtime.sleep(.1);c+=1
tweeta 4 i zmieniłeś kolejność (nie wiem, czy zmiana kolejności jest zamierzona)\n
to dwa bajty, a nie jeden, więc powinna wynosić 134 .sleep
na moim komputerze.c%10<1
i usunąćc=0
.JavaScript (4 tweety /
343317 bajtów / 243 zapasowe)Nie jestem pewien co do wymagań formatu nagłówka i tweetów, więc proszę doradzić, czy wymaga korekty. Jestem pewien, że jeszcze trochę więcej można zgolić.
Tweet 1 - P0 (11 bajtów)
Tweet 2 (82 bajty)
Tweet 3 (126 bajtów)
Tweet 4 (98 bajtów)
Uruchom go w JSFiddle: https://jsfiddle.net/CookieJon/7Lenhcge/
(Kliknij panel wyjściowy, aby ustawić fokus dla zdarzeń klawiatury)
źródło