Implémentation du jeu Sudoku en Common Lisp
Bonsoir,
Je dois implémenter le jeu sudoku en Lisp et je voulais savoir quel choix d'implémentation est le plus simple entre un tableau à deux dimensions et un objet d'objets.
En effet j'ai commencé par ne créer qu'un tableau à deux dimenssion je me suis rendu compte que j'ai des problèmes pour gérer les carrés de la grille sudoku. En objet je ne sais pas du tou comment generer la grille.
En vous remerciant d'avance pour vos réponses.
Mais pourquoi une table de hashage?
J'ai choisi la table de hachage parce qu'un accès à elle coûte moins chère.
Écris-nous ton algorithme et on te dira ce qu'on en pense.
les clés pour les accès a la table vont de 1 au nombre de case vide (dans la grille). Et chaque case contient un objet Box qui contient les coordonnées de la case, la valeur jouée et la liste des possibilités sur cette case (dans la quelle on ajoute 0 en queue de liste).
Algo:
--->strategy (grille, table, index)
----> dernier-index = taille(table)
----> si getValeur(table, dernier-index) != 0 alors
---->retrourner true;
----> sinon
---->si jouerUnCoup(grille, table, index) == true alors
----> strategy (grille, table, (index+1));
---->sinon
----> strategy(grille, table, (index-1))
Pour la fonction jouerUnCoup
---->jouerUnCoup (grille, table, index)
---->play = false
---->si premierElementListe(table, index) == 0 alors
---->on la place en queue de liste
----> retourner false;
---->sinon
---->Tant premierElementListe(table, index)!= 0 et play == false faire
---->si valide(grille, premierElementListe(table, index), getX(table, index), getY(table, index)) alors
---->grille[getX(table, index)][getY(table, index)] = premierElementListe(table, index)
---->setValeur(table, index, premierElementListe(table, index))
---->play = true
----> on la place le premier element en queue de liste
---->retuourner play
Sauf que dans ce cas il fait une boucle infinie ou essaie d'accéder la l'index 0 de la table de hachage (ce qui n'existe pas).
Je te code ça ce soir et te donne le résultat demain...
Merci. C'est vraiment gentillle.