Votre travail consiste à simuler un jeu mathématiquement parfait de 2048. L'idée est de trouver la limite supérieure théorique de jusqu'où un jeu 2048 peut aller, et de trouver comment y arriver.
Pour avoir une idée de ce à quoi cela ressemble, jouez avec ce clone 2x2 et essayez de marquer 68 points. Si vous le faites, vous vous retrouverez avec une tuile 2, 4, 8 et 16. Il est impossible d'avancer au-delà de ce point.
Votre tâche est facilitée car vous pouvez choisir où les tuiles apparaissent et quelles sont leurs valeurs, tout comme ce clone .
Vous devez écrire un programme ou une fonction qui accepte une carte 2048 en entrée et qui sort la carte avec la tuile générée et la carte après la réduction des tuiles. Par exemple:
Input:
-------
0 0 0 0
0 0 0 0
0 0 0 0
0 0 8 8
Output:
-------
0 0 0 0
0 0 0 0
0 0 0 0
0 4 8 8
0 0 0 0
0 0 0 0
0 0 0 0
0 0 4 16
Votre programme sera alimenté à plusieurs reprises sa propre sortie pour simuler un jeu entier de 2048. La première entrée du programme sera un plateau vide. Vous devez faire apparaître une tuile dessus, contrairement aux deux tuiles du jeu original. À la dernière étape du jeu, vous ne pourrez pas vous déplacer, vos deux cartes de sortie peuvent donc être identiques.
Vous devez bien sûr uniquement produire des mouvements légaux. Seul 2 ou 4 peuvent être générés, vous devez déplacer ou réduire au moins une tuile lors d'un mouvement, etc.
J'ai délibérément rendu les exigences d'entrée et de sortie vagues. Vous êtes libre de choisir le format de l'entrée et de la sortie. Vous pouvez utiliser des matrices, des tableaux, des chaînes ou tout ce que vous voulez. Tant que vous pouvez simuler un jeu 2048 avec eux, vos entrées et sorties sont correctes.
Le gagnant sera celui qui termine la partie avec le plus grand nombre de tuiles du plateau, puis le plus petit nombre d'octets dans le code source. Le score du jeu original ne sera pas pris en compte. (Astuce: utilisez 4)
la source
Réponses:
Ruby, dans le coin, score: 3340
Voici une stratégie très simple pour lancer cela. J'ai une idée d'un score (presque) parfait, mais j'ai du mal à le formaliser, alors voici quelque chose de simple pour faire avancer les choses.
La
advance
fonction est celle que vous demandez. Il prend une planche en tableau 1d et retourne la planche après que la tuile a été générée et après que le mouvement a été effectué.Vous pouvez le tester avec cet extrait
La stratégie est très simple, et c'est celle que j'ai utilisée pour passer au 128 lorsque je jouais 2048 moi-même: il suffit d'alterner entre haut et gauche . Pour que cela fonctionne aussi longtemps que possible, de nouveaux
4
s apparaissent dans le coin inférieur droit.EDIT: J'ai ajouté un commutateur codé en dur pour aller à droite plusieurs fois à des étapes spécifiques juste avant la fin, ce qui me permet en fait d'atteindre 1024. Cela devient cependant quelque peu incontrôlable, donc je vais arrêter avec cela pour l'instant et penser à une approche généralement meilleure demain. (Honnêtement, le fait que je puisse augmenter mon score d'un facteur 4 en ajoutant des hacks ajustés à la main me dit seulement que ma stratégie est de la merde.)
C'est le tableau avec lequel vous vous retrouvez
la source