Schreiben Sie ein Programm, das eine gewinnbringende Folge von Zügen zur deterministischen Variante des Spiels 2048 erzeugt. Die Folge sollte in Form einer Folge von Zahlen 0-3 mit 0: aufwärts, 1: rechts, 2: abwärts, 3: links. Beispielsweise bedeutet die Zeichenfolge "1132" rechts rechts links unten. Das Gewinnerprogramm ist der kürzeste Quellcode, der bis 2048 reicht!
Die Regeln für das deterministische Jahr 2048: Das Spiel wird auf einem 4x4-Gitter gespielt, das anfangs 1 Plättchen in der oberen linken Ecke enthält. Jede Bewegung besteht aus dem Befehl "left", "right", "up" oder "down". Mit dem Befehl left werden alle Kacheln im Raster nach links verschoben und dann wie Kacheln von links beginnend kombiniert und summiert. Ebenso verschiebt der Befehl rechts die Kacheln nach rechts und kombiniert dann beginnend von rechts.
Jedes Plättchen kann nur an einer Kombination pro Zug teilnehmen.
Nach einem Zug wird in der ersten Spalte von links ein neues 2-Plättchen mit einem verfügbaren Platz erstellt, in dem ersten verfügbaren Platz von oben in dieser Spalte.
Beispielsweise führt die Reihenfolge "rechts rechts links unten" zu den Zuständen
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
Das auf die Zeile _ 2 2 2 angewendete Befehlsrecht ergibt _ _ 2 4 Das auf die Zeile 2 2 2 2 angewendete Befehlsrecht ergibt _ _ 4 4
Diese Frage inspiriert von http://jmfork.github.io/2048/
quelle
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Antworten:
Python, 740 Zeichen (665 Zeichen komprimiert)
Code :
(Mischt Tabulatoren mit Leerzeichen zum Einrücken, um ein paar Bytes zu sparen.)
Ich muss beim Golfen auf die Nerven gegangen sein, denn wenn ich nur den obigen Code komprimiere, ihn mit der Base-64-Codierung codiere und
exec
er ist nur 665 Zeichen lang. Folgendes ist genau gleichbedeutend mit dem oben genannten, keine fest codierte Lösung oder etwas:Antwort :
Dauert ~ 47 Sekunden (17 Sekunden ohne Golf), um die 1111-Bewegungssequenz zu finden:
Mit der folgenden endgültigen Brettposition und Bewegung:
Trivia: Die Lösung ist 309 Bytes komprimiert und 418 Bytes komprimiert und Base64-codiert. Es wäre also ein kürzeres Programm, das einfach zu dekodieren und auszudrucken, aber das macht überhaupt keinen Spaß .
Erklärung :
Hier ist ein Pastebin der ungolfed Version, der das Board nach jedem Zug druckt, sehr lustig anzusehen!
Es ist eine sehr einfache Brute-Force-KI. Er weist jeder Boardposition einen EV zu:
Es führt eine Tiefensuche vier Züge voraus durch und wählt den Weg, der in vier Zügen zum höchsten EV führt. Die EV-Funktion ermutigt es, das Brett zu säubern und die wertvollsten Teile in der Ecke zu halten, was am Ende ziemlich optimal ist. Es ist genug, um es dort zu bekommen!
Wenn Sie die EV-Funktion ändern, um einen höheren Wert für andere Board-Spots festzulegen, ist dies etwa wie folgt:
Diese Funktion erreicht Folgendes:
16k :
Eureka! Mit einem 5-Stufen-Lookahead anstelle einer 4 und den folgenden Gewichten:
Es wird fast 32k und endet am:
Die Reihenfolge ist hier .
32k :
Ja, meine Damen und Herren, wir haben die Marke von 32.000 erreicht. Anstatt Quadrate mit einer Konstanten zu multiplizieren, erhöht die EV-Funktion jedes Quadrat auf die folgenden Potenzen und addiert sie.
x
bedeutet, dass das Quadrat nicht beteiligt ist:Es summiert immer noch alle Werte einmal und addiert 256 für jedes leere Quadrat. Lookahead war bis zu 32 km mit 4 unterwegs und dann mit 5, aber es scheint nicht wirklich viel zu bewirken. Endboard:
Pastebin der Sequenz mit 24.625 Zügen .
quelle