Sudokusc 1.0.0
Par a3_nm, vendredi 20 janvier 2006 à 22:12 :: Travaux :: #57
Je réalise depuis quelque temps déjà un programme de résolution des grilles de Sudoku. Baptisé Sudokusc pour des raisons assez complexes (le SC veut dire Solve Computer, par référence aux SudokuSL (SoLver) et SR (Solve Recursive) déjà programmés auparavant sur calculette, il est encore expérimental mais peut-être que son code pourra servir à quelqu'un...
Le programme est diffusé sous licence GPL, pas de garanitie, les détails sont précisés à l'intérieur du fichier. Je ne le compile pas pour ne pas vous refiler un exécutable que vous pouvez faire vous même ; sous Linux, les commandes
gcc -o sudokusc -O3 main.c chmod +x sudokusc strip sudokusc
devraient vous donner un exécutable qui fonctionne. Sous Windows, je n'ai pas testé.
Son interface est interactive, basée sur la console. La saisie de la grille est éprouvante et sans moyen de correction des erreurs, aussi je vous recommande de la saisir d'abord dans un fichier texte à part (chiffres lus de gauche à droite puis de haut en bas, avec 0 pour les cases vides, séparés par un retour à la ligne, en en mettant un supplémentaire en fin de fichier) et de mettre ce fichier en entrée standard (./sudokusc < fichier_grille).
Sse principales fonctionnalités sont la (relative) légereté et rapidité d'exécution ; je n'utilise pas Dancing Links, mais un algorithme d'exploration récursive plus naïf. Une grille de niveau diabolique est résolue en environ deux millisecondes sur ma machine à base de Sempron 2300+ (en dirigeant la sortie vers /dev/null), mais le temps ne dépend pas vraiment du niveau, et selon la charge de votre processeur et sa puissance, les temps peuvent varier. Le programme peut également être utilisé pour générer des grilles pleines (en passant une grille vide en argument), mais il a un comportement incohérent si la grille passée en entrée est déjà invalide.
En outre, il est possible de résoudre des Sudoku de dimension 4, 5 etc, en modifiant une constante préprocesseur et en recompilant (on note toujours le contenu des cases de la grille en base 10, de 1 à 16 par exemple). Ça met toutefois beaucoup plus de temps. Le rendu des grilles en sortie est très moche pour n>3, je travaille à résoudre ce problème. Voir la todo-list dans le code source.
Je ne sais pas si ça sert à quelqu'un. Le code est soigneusement commenté en anglais. Merci d'être indulgent, c'est seulement mon premier programme en C (à l'exception des hello world de circonstance). Pour le télécharger, c'est ici.
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.