Napisz program, który generuje zwycięską sekwencję ruchów do deterministycznego wariantu gry 2048. Sekwencja powinna być w postaci ciągu liczb 0-3, z 0: góra, 1: prawo, 2: dół, 3: lewo. Na przykład ciąg „1132” oznacza prawy prawy lewy dół. Zwycięski program to najkrótszy kod źródłowy, który dostaje się do 2048 roku!
Zasady deterministycznej 2048: Gra toczy się na siatce 4x4, początkowo zawierającej 1 płytkę, w lewym górnym rogu. Każdy ruch składa się z polecenia „w lewo”, „w prawo”, „w górę” lub „w dół”. Polecenie w lewo przesuwa wszystkie kafelki na siatce w lewo, a następnie łączy i sumuje jak kafelki zaczynające się od lewej. Podobnie, prawe polecenie przesuwa kafelki w prawo, a następnie łączy zaczynając od prawej.
Każdy kafelek może uczestniczyć tylko w jednej kombinacji na ruch.
Po przeniesieniu tworzony jest nowy 2 kafelek w pierwszej kolumnie od lewej z dostępnym miejscem, w pierwszym dostępnym miejscu od góry w tej kolumnie.
Na przykład sekwencja „prawy prawy lewy dół” prowadzi do stanów
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
Prawo polecenia zastosowane do wiersza _ 2 2 2 powoduje, że _ _ 2 4 Prawo polecenia zastosowane do wiersza 2 2 2 2 powoduje, że _ _ 4 4
To pytanie zainspirowane http://jmfork.github.io/2048/
źródło
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Odpowiedzi:
Python, 740 znaków (skompresowanych 665 znaków)
Kod :
(Miesza tabulatory ze spacjami do wcięcia, aby zaoszczędzić kilka bajtów)
Musiałem go obciągać, ponieważ jeśli tylko skompresuję powyższy kod, kodowanie base-64 go koduje, i
exec
to tylko 665 znaków. Poniższe jest dokładnie równoznaczne z powyższym, brak zakodowanego rozwiązania lub cokolwiek innego:Odpowiedź :
Znalezienie sekwencji 1111 ruchów zajmuje ~ 47 sekund (17 sekund bez golfa):
Z następującą ostateczną pozycją na planszy i ruchem:
Ciekawostki: rozwiązanie ma 309 bajtów zgzipowanych i 418 bajtów, jeśli zgzipowanych i zakodowanych w base64. Byłby to więc krótszy program, który po prostu odkoduje to i wydrukuje, ale to wcale nie jest zabawne .
Objaśnienie :
Oto tabliczka z niegolfowaną wersją, która drukuje planszę po każdym ruchu, bardzo fajnie się ogląda!
To bardzo prosta sztuczna inteligencja. Przypisuje EV do każdej pozycji na planszy:
Przeszukuje dogłębnie cztery ruchy do przodu i wybiera ścieżkę, która prowadzi do najwyższej EV w czterech ruchach. Funkcja ev zachęca ją do posprzątania tablicy i trzymania najcenniejszych elementów w rogu, co ostatecznie jest całkiem optymalne. Wystarczy go tam dostać!
Jeśli zmodyfikujesz funkcję EV, aby umieścić wyższą wartość na innych miejscach na planszy, coś takiego:
Ta funkcja pozwala uzyskać:
16k :
Eureka! Z 5-stopniowym wyprzedzeniem zamiast 4 i następującymi wagami:
To prawie prawie 32k, kończąc na:
Sekwencja jest tutaj .
32k :
Tak, panie i panowie, osiągnęliśmy próg 32 tys. Funkcja EV, zamiast mnożenia kwadratów przez stałą, podnosi każdy kwadrat do następujących mocy i dodaje je.
x
oznacza, że kwadrat nie jest zaangażowany:Nadal sumuje wszystkie wartości raz i dodaje 256 dla każdego pustego kwadratu. Lookahead miał 4 lata aż do 32 tys., A potem podskoczył do 5, ale tak naprawdę nie robi wiele. Deska końcowa:
Pastebin sekwencji 24 625 ruchów .
źródło