Table des Matières

Sujet précédent

Comment faire un environnement de simulation en Python pour résoudre un sudoku

Sujet suivant

Package: Sudoku - la méthode de la programmation orientée objet

Cette page

Lancer Programmation pour résoudre un Sudoku

Lorsque nous avons créé un monde de sudoku simulation dans l’ordinateur pour résoudre un sudoku, maintenant nous devons aller de l’avant pour mettre en œuvre des méthodes qui nous résoudre dans nos propres mains. En autre monde, la programmation, est la substance qui nous enseignons ordinateur de faire quelque chose que nous avons connue.

Nous présentons d’abord l’environnement résoudre, nous allons présenter quelques méthodes de base de cette bibliothèque.

environnement de résolution

Nous créons une fonction solve () pour faire la vraie résolution de sudoku, et nous faisons deux classes d’exception, SudokuDone, SudokuError pour capturer l’événement se produit lorsque nous utilisons des méthodes pour résoudre un sudoku.

Note

Quelle est “Exception”?

Exception est un événement défini, lorsque la condition d’événement s’est produit, le système s’arrête le traitement et passer au traitement d’exception. Il existe deux grandes exceptions dans l’environnement:

SudokuDone:

lorsque le sudoku a été résolu, va soulever cette exception

SudokuError:

quand un peuple de pays à mettre dans une maison, mais seront briser la règle de jeu, cela posera cette exception

Pour permettre à l’environnement sait combien les méthodes qu’ils peuvent utiliser pour résoudre un sudoku, nous créons une classe, SolveMethod. Nous utilisons cette classe pour créer toutes les méthodes dans un cerveau. Nous pouvons traiter ce cerveau comme le dieu de cette vallée. Chaque fois, quand les gens ne font pas la façon de choisir leurs maisons appropriées, vous pouvez demander au dieu de la vallée, et il vous donnera une réponse, ou il dire que, “** Je ne sais pas comment faire non plus! **

Chaque registre de la méthode dans le cerveau comme un objet SovleMethod, ils ont ces propriétés principales:

  1. amusant: le nom de la fonction de la méthode de codage de python

  2. idx: l’indice de la méthode, de la plus facile à la plus difficile, le cerveau va utiliser cette séquence pour régler un jeu de un à un.

  3. nom: le nom de la méthode

  4. niveau: le niveau difficile pour l’homme, l’aide à compter niveau difficile d’un jeu

processus de résolution

Voici l’organigramme de résoudre ():

_images/flowchart.png

Note

** Travailler ou non? **

Une méthode fonctionne ou pas signifie que l’utilisation de cette méthode peut:

  1. permettent une ou plusieurs personnes pour trouver son ou sa propre maison,

  2. OU peut laisser une ou plusieurs maisons savent qu’ils ne sont pas autorisés pour les personnes de certains pays.

Dans ce diagramme, nous savons que:

  1. Quand une méthode est de définir une personne ou réduire permis les gens d’une maison, il reviendra à la première méthode pour redémarrer la résolution du jeu.

  2. Si une méthode ne peut pas travailler à résoudre un jeu, il va donner le jeu à la méthode suivante pour le résoudre.

  3. Et si la méthode finale ne peut pas résoudre un jeu, il va sortir et de dire “Je ne peux pas comprendre ce jeu, désolé! “

  4. Dans le processus de résolution de problèmes, si événement “error”, “done” ou se produisent, il s’éteint.

Certaines méthodes de base

  1. fill_only_one_possible:

    Trouvez toutes les maisons dans un groupe, si il ya une seule maison que les gens d’un pays peuvent y vivre, cette maison doit laisser partir le peuple de ce pays à vivre po

  2. fill_last_position_of_group:

    Lorsque dans un groupe (ligne ou boîte) sont une seule gauche, il doit permettre un seul peuple du pays y vivent.

  3. check_obvious_number:

    Vérifiez tous les gens de la campagne qui a vécu dans une maison, et quand ces gens observent d’autres boîtes qui a encore pas vécu leurs gens du pays, peut trouver une seule maison qui a permis à leurs gens du pays ou pas?

  4. check_inobvious_number:

    C’est la même méthode que check_obvious_number, mais quelques maisons de boîtes sont formés comme un numéro de groupe ** **.

  1. reduce_by_group_number:

    Si il ya un numéro de groupe ** ** dans une boîte, des maisons vides de son même sens pourrait être de réduire les gens possibles de pays de ce numéro de groupe.

  2. update_chain:

    Comme les maisons ont été vécu certaines personnes, cela ferait quelques maisons vides réduisent les gens de certains pays possibles. Et puis ces maisons vides dans un groupe (ligne X-Way, y de ligne de chemin, boîte) peuvent former une chaîne ** **.

Comment mettre en œuvre une méthode?

Nous pourrions mettre en œuvre une méthode appelée check_obvious_for_a_country (m, num) méthode, par exemple:

 1  def check_obvious_for_a country(m, num):
 2  checked = list()
 3  for p1 in m.n[num].p:
 4      for b in m.b[p1.b].effects:
 5          possible = []
 6          if b in checked:
 7              continue
 8          else:
 9              checked.add(b)
10          if num not in m.b[b].possible:
11              continue
12          for p2 in m.b[b].p:
13              if p2.v != 0 or p2.can_see(p1) > 0:
14                  continue;
15              if not m.lineX[p2.x].allow(num):
16                  continue
17              if not m.lineY[p2.y].allow(num):
18                  continue
19              possible.append(p2)
20          if len(possible) == 1:
21              m.setit(possible[0].x, possible[0].y, num, d="Obvious For a Country People")
  1. ligne n ° 1, définir une méthode, * m * est le monde de ce jeu, et ** nombre ** est un identifiant de pays, voici 1-9.

  2. ligne n ° 3, commence à trouver les toutes les personnes qui ont vécu dans une maison d’un pays.

  3. ligne # 4-9, le scanner toutes ses boîtes d’effet si ceux n’ont pas été vérifiées.

  4. ligne # 10-11, il les gens du pays ont en direct dans cette zone, l’ignorer.

  5. ligne # 12-19, vérifier toutes les maisons vides dans cette boîte qui permettent les gens du pays ou pas, si oui, le mettre dans la liste des possibles.

  6. ligne # 20-21, si la liste des possibles ne dispose que d’une maison, il faut peut être attribué à cette maison pour les gens du pays.