Le puzzle des nombres d'Aristote est le défi de remplir chacune des 19 cellules dans une grille hexagonale avec un entier unique entre 1 et 19 de sorte que le total le long de chaque axe est de 38.
Vous pouvez imaginer le plateau de jeu comme ceci:
Et le puzzle, en substance, est la solution à l'ensemble des quinze équations suivantes:
((a + b + c) == 38 && (d + e + f + g) == 38 && (h + i + j + k + l) ==
38 && (m + n + o + p) == 38 && (q + r + s) == 38 && (a + d + h) ==
38 && (b + e + i + m) == 38 && (c + f + j + n + q) ==
38 && (g + k + o + r) == 38 && (l + p + s) == 38 && (c + g + l) ==
38 && (b + f + k + p) == 38 && (a + e + j + o + s) ==
38 && (d + i + n + r) == 38 && (h + m + q) == 38)
Où chaque variable est un nombre unique dans l'ensemble {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
.
Il existe plusieurs solutions possibles, et il existe 19!
des combinaisons possibles d'entiers, de sorte que la force brute naïve ne sera pas pratique.
Règles:
- Pas de codage en dur de la réponse ni de recherche de la réponse ailleurs; votre code doit le trouver par lui-même
- La vitesse n'a pas d'importance, mais vous devez montrer vos résultats, donc le code qui prend 1000 ans à exécuter ne vous aidera pas
- Trouvez toutes les réponses
- Traitez les réponses identiques en rotation comme identiques
- Déduisez 5% de votre nombre total d'octets si vous produisez les résultats dans un nid d'abeilles attrayant
- Le moins d'octets gagne
code-golf
game
hexagonal-grid
Michael Stern
la source
la source
Réponses:
Haskell
295289Une autre réponse similaire, en utilisant l'arithmétique pour obtenir les hexagones intermédiaires. Contrairement aux autres solutions, je ne teste pas pour ces sommes> 0, tester que les hexs triés sont égaux à la plage [1..19] est suffisant. a, c et h sont limités de sorte que seules les solutions à rotation / miroir uniques sont autorisées. La solution apparaît après quelques secondes, puis il y a une attente d'une minute environ pendant qu'elle décide qu'il n'y en a plus.
Utilisation dans ghci:
Édité pour raser quelques caractères. 'y 0 t' produit [1..19].
la source
x>0
chèque, parce que je trie la liste en incluant les négatifs au lieu d'incrémenter un tableau? D'un autre côté, je dois restreindre les plages (myy a b
) pour que Haskell fonctionne, ce qui me coûte quelques caractères. Mais il y a forcément un autre langage qui a un type intégré qui me battra de la même façon (en vous regardant, Mathematica).Java
(1517 - 75,85) = 1441,15(1429 - 71,45) = 1357,55(1325 - 66,25) = 1258,75C'était amusant.
Imprime toutes les solutions uniques grâce à la mise en miroir et à la rotation, dans un nid d'abeilles agréable (d'où une réduction de 5%)
Durée d'exécution: ~ 0,122 s (122 millisecondes) sur mon ordinateur portable de 4 ans.
Code golfé (le montage a réalisé que je répétais stupidement mes printfs, les a réduits à un seul printf pour un maximum de golf) ( nouveau montage Réduction des appels aux fonctions Set en fonctions plus petites intelligentes, quelques autres micro-optimisations):
Prendre plaisir!
la source
return;
déclaration.return;
instruction arbitraire augmente la longueur de mon code de 7, il serait insensé pour moi de l'ajouter si la vraie réponse incluait les 12 solutions qui sont simplement des versions tournées / en miroir les unes des autres. Bien que la folie ne puisse pas être exclue, dans ce cas, l'ajout dereturn;
était intentionnel, et comme je l'ai décrit, sur la base de la boîte de dialogue complète des questions et commentaires , que vous devriez prendre soin d'examiner avant de lancer des accusations. Merci!C, 366 octets (
C ++ 541 450)Compilez avec
gcc -std=c99 -O3
.Imprime toutes les solutions uniques de rotation modulo et de mise en miroir, au format
a b c d ...
, une par ligne.Durée: 0,8 seconde sur mon ordinateur.
la source
Matlab:
333320 caractèresIl s'agit d'une approche assez stupide de force brute qui n'utilise pas la récursivité. Il construit des solutions partielles dans
z
, qui sont imprimées à la fin. Chaque colonne est une solution; les éléments sont classés az de haut en bas. Le temps d'exécution est de 1 à 2 heures.Exécution depuis Matlab:
la source