Écrivez un programme qui génère une séquence gagnante de coups vers la variante déterministe du jeu 2048. La séquence doit être sous la forme d'une chaîne de chiffres 0-3, avec 0: haut, 1: droite, 2: bas, 3: la gauche. Par exemple, la chaîne "1132" signifie droite droite gauche vers le bas. Le programme gagnant est le code source le plus court qui arrive jusqu'en 2048!
Les règles du déterminisme 2048: Le jeu se joue sur une grille 4x4 contenant initialement 1 tuile, dans le coin supérieur gauche. Chaque coup consiste en la commande "gauche", "droite", "haut" ou "bas". La commande gauche fait glisser toutes les tuiles de la grille vers la gauche, puis combine et additionne comme des tuiles en partant de la gauche. De même, la commande droite fait glisser les tuiles vers la droite, puis combine à partir de la droite.
Chaque tuile ne peut participer qu'à une seule combinaison par coup.
Après un déplacement, une nouvelle tuile 2 est créée dans la première colonne de gauche avec un espace disponible, dans le premier espace disponible en haut de cette colonne.
Par exemple, la séquence "droite droite gauche en bas" conduit aux états
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
Le droit de commande appliqué à la ligne _ 2 2 2 donne _ _ 2 4 Le droit de commande appliqué à la ligne 2 2 2 2 donne _ _ 4 4
Cette question inspirée de http://jmfork.github.io/2048/
la source
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Réponses:
Python, 740 caractères (665 caractères compressés)
Code :
(Mélange les onglets avec des espaces d'indentation pour économiser quelques octets)
J'ai dû craindre de jouer au golf parce que si je compresse simplement le code ci-dessus, le codage en base 64, et
exec
ce n'est que 665 caractères. Ce qui suit est exactement équivalent à ce qui précède, pas de solution codée en dur ou quoi que ce soit:Réponse :
Prend ~ 47 secondes (17 secondes sans golf) pour trouver la séquence de 1111 coups:
Avec la position finale et le mouvement suivants:
Anecdote: la solution est de 309 octets gzippés et 418 octets si gzippés et encodés en base64. Ainsi, ce serait un programme plus court de simplement décoder cela et de l'imprimer, mais ce n'est pas amusant du tout .
Explication :
Voici une boîte à pâte de la version non golfée qui imprime le tableau après chaque mouvement, très amusant à regarder!
C'est une IA de force brute très simple. Il attribue un EV à chaque poste de conseil:
Il effectue une recherche en profondeur d'abord quatre coups devant et choisit le chemin qui mène au plus haut EV en quatre coups. La fonction ev l'encourage à nettoyer la planche et à garder les pièces les plus précieuses dans le coin, ce qui finit par être assez optimal. Il suffit d'y arriver!
Si vous modifiez la fonction EV pour placer une valeur plus élevée sur d'autres spots de carte, quelque chose comme:
Cette fonction permet d'obtenir:
16k :
Eureka! Avec une anticipation en 5 étapes au lieu d'un 4 et les poids suivants:
Il a presque presque 32k, se terminant sur:
La séquence est ici .
32k :
Oui mesdames et messieurs, nous avons atteint la barre des 32k. La fonction EV, au lieu de multiplier les carrés par une constante, élève chaque carré aux pouvoirs suivants et les ajoute.
x
signifie que le carré n'est pas impliqué:Il additionne toujours toutes les valeurs une fois et ajoute 256 pour chaque carré vide. Lookahead était de 4 jusqu'à 32k, puis il est passé à 5, mais cela ne semble pas vraiment faire grand-chose. Conseil d'extrémité:
Pastebin de la séquence de 24 625 coups .
la source