Home

1 TD 4 : Résolution d`un Sudoku

image

Contents

1. Long n 0 For k 1 To 9 EE 4 tuto te ie Then n n 1 Next k Le r sultat attendu est stock dans la variable n Il suffit juste d crire la bonne condition 5 Il reste plus qu construire le r sultat res de la fonction en compl tant le bout de programme suivant ReDim res n n 0 For k 1 To 9 TE RP Te Then End If Next k fin nombre_possible_pour_case res Petite remarque si on n avait pas d abord compt le nombre de chiffres pas possibles on n aurait pas pu cr er le bon nombre de cases dans le tableau res premi re ligne de l extrait qui pr c de ce paragraphe 6 La fonction nombre possible pour case retourne donc l ensemble des chiffres possibles pour une case vide d un Sudoku On va d abord consid rer que la case vide qu on choisit de remplir est la premi re case vide trouv e Il ne reste plus qu crire la fonction r cursive resolution c est la fonction qui r soudra le Sudoku Elle prend comme entr e un tableau Sudoku et retourne un tableau Sudoku pour la solution On choisit comme convention que ce tableau sera vide si la solution n existe pas Function resolution ByRef su As Variant As Variant End Function Il y a trois tapes 1 On trouve la premi re case vide 2 On calcule l ensemble des chiffres possibles 3 Pour tous les chiffres possibles on rappelle la fonction resolution avec une case vide en moins Deux questions quand peut on savoir que le Sud
2. 1 TD 4 R solution d un Sudoku correction page 8 R joui e ou agac e l id e de r soudre un Sudoku Et d utiliser un ordinateur pour le r soudre votre place C est pourtant ce qui va vous arriver durant les deux heures qui suivent La figure 1 1 montre ce qu est un Sudoku Ce carr incomplet qu il s agit de remplir ob it certaines r gles 1 Chaque case contient un chiffre entre 1 et 9 2 Dans chaque ligne il ne peut y avoir deux chiffres gaux 3 Dans chaque petit carr il ne peut y deux chiffres gaux mn jo eo F1G 1 1 Exemple de Sudoku A l aide de ces informations on va essayer de construire un programme sous Excel qui r soud les Sudoku La figure 1 2 donne un exemple du r sultat qu on cherche obtenir On s lectionne la plage contenant le Sudoku on s lectionne la plage devant recevoir le r sultat on clique sur le bouton et le tour est jou ou presque o njoo ojoo o N O ojoo o 7 oojo o IN O OJO O N o A O 3 0 9 8 0 4 0 TA ei 6 0 o o ojo o o o o o ojowu ojo n o oon ojo vjo o ojojo o Sudoku F1G 1 2 Mode d emploi le Sudoku est d fini par un chiffre en 1 et 9 si celui ci est connu 0 s il est inconnu On s lectionne la souris la premi re plage on appuie ensuite sur la touche Ctrl et on s lection encore la souris la second plage Il ne reste
3. censer l ensemble des chiffres qui ne sont pas possibles c est dire l ensemble des chiffres d j plac s soit sur la m me ligne soit dans le m me petit carr Il suffit pour cela de parcourir la ligne et le petit carr qui contiennent la case i j et de noter tous les chiffres qu on y rencontre On cr e donc un tableau de neuf cases qui contient O si le chiffre est possible et 1 si le chiffre n est pas possible Dim paspossible 9 As Long Dim k As Long For k 1 To 9 paspossible k 0 au d part tous les chiffres sont possibles Next k Il faut maintenant liminer tous les chiffres d j pr sents sur la ligne i On rappelle que les cases su k 1 sont soit gales 0 si elles sont vides soit leur valeur est comprise entre 1 et 9 C est vous d crire et de modifier le tableau paspossible Quelques indices il y a une boucle et un test 3 On doit maintenant liminer les chiffres pr sents dans le petit carr On calcule pour cela deux entiers ii jj gr ce aux trois lignes qui suivent Dim ii jj As Long ii i i 1 Mod 3 jj j j 1 Mod 3 Que vaux ii lorsque i varie entre 1 et 9 Et jj Ne pourrait on pas en d duire quelques lignes permettant d liminer les chiffres d j pr sents dans le petit carr qui contient la case i j 4 Maintenant qu on a limin tous les chiffres pas possibles on peut construire l ensemble des chiffres possibles On va d abord les compter Dim n As
4. enu de ch D duisez en le moyen d acc der au contenu d une case et la mani re dont VBA parcourt l ensemble des cases s lectionn es en ligne ou en colonne 12 Il faut maintenant r cup rer le contenu des 81 premi res cases de la s lection pour construire le tableau du Sudoku Il y a plusieurs mani res de le faire voici l esquisse d une Dim sudoku 9 9 as Long i i j 1 For Each ch In Selection sudoku i j If j 9 Then End If Next ch 13 On lance la r solutation Dim r As Variant nbiter 0 r resolution sudoku 14 Il n y a plus qu remplir les 81 cases suivantes de la s lection avec la solution 15 Deux choix s offrent vous dor navant Le premier consiste modifier le programme pour obtenir tous les Sudoku qui v rifient la configuration de d part Le second choix d pend de votre amour inconditionnel des Sudoku un amour qui vous enjoint de saboter d lib r ment votre programme pour que jamais il n ose encore une fois vous r pondre en dix fois moins de temps qu il ne vous en faudrait pour terminer votre Sudoku Cela dit si vous comptiez vous rabattre sur le d mineur il est sans doute heureux qu il n y ait pas de s ance de VBA suppl mentaire
5. oku est r solu Est il possible d avoir un ensemble de chiffres possibles vides A quoi cela correspond il et que fait on dans ce cas l 7 Ecrire le code qui permet de trouver la premi re case vide et crivez ce que la fonction doit faire si cette case n existe pas N h sitez pas lire les deux questions suivantes 8 Appelez la fonction nombre possible pour case pour conna tre l ensemble des chiffres possibles Que fait on si l ensemble est vide La fonction UBound permet de savoir si un tableau est vide ou non regardez l aide pour comprendre comment s en servir 9 La fonction resolution doit maintenant ressembler quelque chose comme Function resolution ByRef su As Variant As Variant tape 1 Dim i j vi vj As Long vi 1 For i 1 To 9 For j 1 To 9 If su i j O Then FE VI S ousa Then resolution Exit Function End If tape 2 Dim ens As Variant ens nombre_possible_pour_case If UBound ens Then Dim res 0 As Long resolution res Exit Function End If tape 3 Dim k As Long Dim copie solution As Variant copie su For k 1 To copie ens k solution resolution copie DE ASE Then Exit Function End If Next k au fait a t on r ussi ou non si on arrive ici lors de l ex cution du programme resolution End Function Surtout enregistrer votre programme avant chaque ex cution si votre programme es
6. plus qu cliquer sur le bouton toujours la souris Comment crire ce programme On pourrait choisir une case vide y poser un chiffre au hasard mais diff rent de ceux d j pr sents sur la m me ligne et dans le petit carr auquel appartient la case vide Une fois cette case remplie on obtient un nouveau Sudoku qu on cherche nouveau r soudre Cette constatation nous dirige vers une fonction r cursive qu on appellera resolution On peut r sumer cette fonction en trois tapes 1 on choisit une case vide 2 on place dans cette case un chiffre qui v rifie les r gles d un Sudoku 3 si toutes les cases sont pleines c est fini sinon on rappelle nouveau la fonction resolution sur ce nouveau Sudoku qui contient une case vide de moins Ce d coupage sugg re trois t ches bien d finies Choisir une case vide peut tre fait al atoirement dans un premier temps Nous verrons plus tard comment faire mieux Pour l instant nous allons nous contenter d un programme simple qui marche m me s il est lent La seconde tape maintenant placer un chiffre dans une case vide choisir entre 1 et 9 ou mieux encore dans l ensemble des chiffres non d j pr sents sur la m me ligne ou dans le petit carr Nous allons donc crire une fonction qui retourne l ensemble des chiffres possibles pour une case vide Cette fonction se pr sente sous cette forme Function nombre_possible_pour_case ByRef su As Varian
7. t _ ByVal i As Long ByVal j As Long As Variant 2 End Function Cette fonction prend comme param tres 1 su un tableau deux dimensions su k 1 d signe la case ligne k colonne 1 2 i j deux coordonn es d signant la case pour laquelle on veut d terminer l ensemble des chiffres possibles Le type Variant d signe un type inconnu en particulier un tableau deux dimensions Il existe un nom pr cis pour tous les types de variables simples Long String Double Les autres comme les tableaux sont souvent d sign s par le type Variant 1 La premi re chose faire est de v rifier que la case i j est vide La fonction nombre possible pour case doit donc commencer par ces lignes Function nombre_possible_pour_case ByRef su As Variant _ ByVal i As Long ByVal j As Long As Variant Dim res As Long on cr e le r sultat sans conna tre son contenu EE a ReDim res 0 on cr e un tableau vide nombre_possible_pour_case res c est le r sultat de la fonction Exit Function on quitte la fonction End If End Function A vous de trouver la condition crire sur la troisi me ligne Si cette case n est pas vide il n y a pas de chiffres possibles pour cette case et le r sultat de la fonction est un tableau vide C est ce que font les trois lignes suivantes 2 Si la case est vide on doit d terminer l ensemble des chiffres possibles pour cette case Ou plut t ne serait il pas plus facile de re
8. t entr dans une boucle infini il faudra fermer Excel de mani re autoritaire en utilisant le gestionnaire des t ches C est pourquoi on propose d ajouter une variable qui va compter le nombre d it rations ou d appels la fonction resolution Dim nbiter As Long Function resolution ByRef su As Variant As Variant nbiter nbiter 1 End Function 10 Est il possible de choisir une meilleure case que la premi re vide Et si parmi toutes les cases vides il y en avait une pour laquelle l ensemble des chiffres possibles est vide ou ne contient qu un seul l ment Comment modifier la fonction resolution pour tenir compte de cette information et acc l rer la r solution 11 Il ne reste plus qu extraire le Sudoky depuis une feuille de calcul pour l envoyer la fonction resolution ce qui n est pas forc ment une mince affaire Comme d habitude on crit une macro qu on pourra relier plus tard un bouton comme lors des s ances pr c dentes On v rifie d abord que l utilisateur a bien s lectionn 81 2 cases En VBA l ensemble des cases s lectionn es est Selection Sub macro_sudoku Dim i As Long i 1 For Each ch In Selection i i 1 pointeur d arr t ici Next ch If i lt gt 81 x 2 Then MsgBox Vous n avez pas s lectionn 81 2 cases Exit Sub End If End Sub Apr s avoir recopi ce petit bout de programme placez un pointeur d arr t sur la cinqui me ligne et regardez le cont

Download Pdf Manuals

image

Related Search

Related Contents

Informativo Técnico e Manual de Instruções Itafloor Piso Vinilico PVC  Platinum 2.5K Manual - AMETEK Power Instruments  Tripp Lite EnviroSense Rack Environment Sensor, Temperature, Humidity, Contact-Closure Inputs  pdf AutoComp User Manual  Garmin Forerunner 10 Owner's Manual  SI-225 - E.l.Mustee and Sons Inc  COSEPRE - Costs of urban cleaning services : user`s manual  Western Digital WD AV-GP  

Copyright © All rights reserved.
Failed to retrieve file