Vous pensiez que le sudoku ordinaire était difficile, essayez maintenant Killer Sudoku !
Dans le jeu de Killer Sudoku, vous ne recevez aucun numéro. Au lieu de cela, on vous donne des régions qui totaliseraient un certain nombre. Prenons l'exemple suivant, de Wikipedia:
Et sa solution:
Le programme que vous écrivez prendra un format composé d'une séquence de 81 lettres représentant des régions, suivie d'une séquence de chiffres. Ensuite, chaque nombre dans la séquence représente la somme des nombres dans chacune des régions de lettres, en commençant par "A", "B", etc.
Il affichera ensuite une séquence de 81 chiffres représentant la solution.
Par exemple, l'exemple de puzzle ci-dessus aurait l'entrée suivante:
AABBBCDEFGGHHCCDEFGGIICJKKFLMMINJKOFLPPQNJOORSPTQNUVVRSTTQWUUXXSYZWWaaXXSYZWbbbcc
3 15 22 4 16 15 25 17 9 8 20 6 14 17 17 13 20 12 27 6 20 6 10 14 8 16 15 13 17
Et la sortie résultante serait:
215647398368952174794381652586274931142593867973816425821739546659428713437165289
Vous pouvez supposer que l'entrée est valide et que les régions apparaîtront toujours dans l'ordre par A, B, ..., Y, Z, a, b, ..., z.
(Le code le plus court qui fonctionne gagne.)
la source
Réponses:
R - 378 caractères
En supposant
378 caractères:
prend environ une heure sur mon modeste PC pour atteindre la solution attendue, après 2 964 690 itérations.
De-golfé:
la source
GolfScript, 138 caractères
Ceci est un solveur de sudoku tueur dans GolfScript. Il attend l'entrée sur STDIN sur deux lignes comme indiqué dans l'exemple ci-dessus.
Veuillez noter: Étant donné que la description du puzzle ne fait aucune restriction sur le temps d'exécution, j'ai préféré une petite taille de code à la vitesse. Le code teste toutes les configurations de grille 9 ^ 81 pour une solution qui peut prendre un certain temps sur un ordinateur lent ;-)
la source
AABBCADEFFDDGGGG
6 7 4 8 2 3 10
Ruby, 970 caractères
Le code rubis ci-dessus est opposé à mon abonnement GolfScript. Il est assez long (et pas encore entièrement golfé), mais optimisé pour la vitesse. Le sudoku tueur donné ci-dessus est résolu en moins d'une seconde (avec ma version java d'origine, il ne s'agissait que de quelques milli secondes). Le solveur lui-même est une implémentation de base de l'algorithme DLX de Knuth.
L'entrée doit être donnée sur deux lignes sur STDIN. Exemple (en ligne ):
la source