2048 to niesamowicie zabawna i wciągająca gra, w której celem jest stworzenie płytki z 2048 na niej.
Oto krótki opis gry:
Naciśnięcie klawisza strzałki przesunie wszystkie bloki na scenie w tym kierunku. Na przykład, jeśli x
reprezentuje blok, w tym przypadku nacisnąłeś strzałkę w górę:
...x
.x..
..x.
xx..
Wtedy tablica stałaby się
xxxx
.x..
....
....
Ponadto bloki są ponumerowane, zaczynając od 2
. Jeśli dwa bloki o tych samych numerach zostaną przesunięte razem, połączą się one w kolejny numer. Na przykład naciśnięcie „w górę” na tej płycie:
.2..
..22
.2..
....
Utworzyłby to:
.422
....
....
....
A potem po naciśnięciu „w prawo” stałoby się ..44
, a zatem ponowne naciśnięcie w prawo stworzyłoby blok „8” i tak dalej.
W każdej turze na losowym otwartym polu tworzony jest nowy blok „2”. (W rzeczywistości nie zawsze jest to „2”, ale dla uproszczenia zachowajmy to.) Jeśli nie pozostały żadne możliwe ruchy (tj. Plansza jest pełna i nie można nic scalić), gra jest przegrana, a jeśli tworzony jest blok 2048, wygrywasz!
Twoim zadaniem jest odtworzenie tej gry w golfa!
W przypadku skrzynek, takich jak naciśnięcie „prawo” na tej płycie:
.... .222 .... ....
musisz scalić płytki najbliżej krawędzi wciśniętego klawisza strzałki. Na przykład stałoby się tak
..24
, ponieważ druga i trzecia „2” znajdują się najbliżej prawej krawędzi.Jeśli gracz naciśnie nieprawidłowy ruch (np. „W górę” na planszy takiej jak
2.2. / .... / .... / ....
), musisz go zignorować.Ruchy można akceptować w dowolny sposób, np. Klikanie, klawisze strzałek
ULRD
itp.Wszystkie płytki muszą mieć ten sam kształt - płytka „1024” powinna mieć taki sam rozmiar jak płytka „2”.
Płytki należy w jakiś sposób rozdzielić. Na przykład
|1024| 2|1024|1024|
jest poprawnym przykładem wiersza (zakładając, że płytki są kwadratami), podczas gdy1024 210241024
nie jest.Musisz podać „wygrywasz”, jeśli gracz utworzy płytkę 2048, lub „przegrywasz”, jeśli nie pozostały żadne ważne ruchy.
To jest code-golf , więc wygra najkrótszy kod w bajtach!
źródło
Odpowiedzi:
APL (Dyalog APL) ,
153150167156 bajtówMonity o ruch; 0 = w lewo, 1 = w górę 2 = w prawo, 3 = w dół
Wypróbuj online!
Bez golfa, z białymi odstępami
Wyjaśnienie
Puste linie oznaczają nową linię, a bloki linii należą do jednej linii
źródło
GolfScript, 323 znaki
Klucze, których musisz użyć są,
wasd
ale możesz zmienić stałą w kodzie na dowolne klucze, które lubisz. Z wdziękiem ignoruje każdy nieznany klucz lub nielegalny ruch. Niestety po każdym klawiszu musisz nacisnąć Enter.Rozwiązanie 256 znaków
W tym przypadku dane wyjściowe są logarytmiczne w systemie szesnastkowym, czyli
0
oznacza.
,1
dla2
,2
dla4
,3
dla8
...B
dla2048
. Ponieważ wszyscy znamy szesnastkowe i potęgi dwóch, nie powinno to wcale stanowić ograniczenia.Przykładowy przebieg (pierwsze ruchy):
źródło
J -
240230216 znakówZlicza to końcowy znak nowej linii, ponieważ jest on potrzebny do uruchomienia gry na konsoli. Graj, wpisując jeden z nich,
udlr
a następnie naciskając Enter. Ruchy, które nic nie wpływają na planszę, są obsługiwane poprawnie, ale program wścieknie się na ciebie, jeśli dasz mu jakikolwiek zły wkład.Czytelna wersja i objaśnienia są nieco za duże, aby wygodnie pasowały do postu: możesz znaleźć opis pod tym linkiem .
Stosowanie:
źródło
Mathematica, 484 znaki
Bardzo brzydkie.
Kontrolowane za pomocą klawiszy strzałek.
Nie golfowany:
źródło
Delphi XE3 (Waaay to many {szepcze} 2,979 bajtów -> nie golfił 4.560 bajtów)
Lubię nazywać ten kod „powieścią 2048”
Użyłem więcej bajtów niż lubię, ale działa i było fajnie.
Nadal będę próbował skrócić to później.
Gra w toku
Grał w golfa
Bez golfa
źródło
,
i.
w liczbach!C (standard C89), 881 bajtów
Użyj klawiszy wasd, aby się poruszać. Kompiluje w GCC i domyślnie klanguje, chyba że ustawiony na standard C99 (tak myślę). Używa termios.h, działał w systemach Linux i MacOS X. Nie jestem pewien co do systemu Windows.
Złamane w niektórych wierszach:
Wygląd:
Na pewno można to poprawić.
źródło
Java:
13461269Edytuj Więc chociaż ten konkurs jest zakończony, czasami nie mogę odpuścić, gdy można wprowadzić ulepszenia. Ta wersja oferuje szczuplejszą, wredniejszą funkcję składania na miejscu, eksmisję większości
boolean
typów, z wyjątkiem tych, które byłyby bardziej gadatliwe bez nich, oraz nieco mniejsze komórki (4x4 zamiast 5x5), aby wyciąć kilka dodatkowych znaków.To było zabawne. Dzięki za opublikowanie! Bez golfa, to było 2856 bajtów, grałem w golfa, zmniejszyłem go do 1346 bajtów. Będąc Javą nie zamierzam wygrywać, ale chciałem dobrze zagrać. Wyobrażenie sobie „ogólnej” funkcji zwijania do obsługi łączenia i przesuwania kafelków było fajne - możesz oczywiście sprawdzić moje „postępy”, przeglądając zatwierdzenia w moim repozytorium github dla tego rozwiązania .
Gra w golfa:
Ungolfed: (Sprawdź moje repozytorium github dla tego projektu, aby uzyskać zaktualizowaną wersję, w tym test oparty na stwierdzeniach dla nowych funkcji składania)
Korzystanie z programu jest proste. Aby zbudować i uruchomić:
Naciśnij,
u
aby złożyć,r
aby złożyć w prawo,d
aby złożyć,l
aby złożyć w lewo. Każdy inny klucz jest ignorowany, ruchy niepoprawne (bez rezultatu) są ignorowane. Będąc Javą, naciśnijenter
po każdym klawiszu, aby opróżnić bufor linii. Zgodnie z przepisami, jeśli wygrasz wyniki programuyou win
, jeśli stracisz wyniki programuyou lose
. Nowe2
są umieszczane losowo na otwartych kafelkach. Fuzje są zgodne z podanymi zasadami. Komórki to znaki 4x4, z ramką otaczającą każdą komórkę. Oczywiście, zostaw mi komentarz, jeśli coś pomieszałem i na pewno to naprawię.Przykładowe dane wyjściowe:
źródło
Lua,
622616615612592590575 bajtówZapytania stdin dla 1,2,3,4 skorelowane z lewym, dolnym, prawym, górnym (wykonane dla wprowadzania na klawiaturze numerycznej); ulega awarii, jeśli podasz zły wpis.
Puste kwadraty są drukowane jako „0”.
Przykładowe dane wyjściowe:
źródło
Clojure: 599
uruchom go w REPL
grał w golfa
bez golfa
źródło