def step(): res = tech.apply(mem) action = res[0] print("Action demandée : {0}".format(res)) if action == "observe": pat = res[1] print("Observer : demande d'observation : {0}".format(pat)) ui.sudoPause() found = view.lookup(pat) tech.obsFound(mem, found) print("résultat d'observation : {0}".format(found)) elif action == "place": placement = res[1] print("Grid : demande de placement : {0}".format(placement)) ui.sudoPause() valid = view.place(placement) tech.placeOk(mem, valid) print("résultat de placement : {0}".format(valid)) ui.displayGridPlace(grid, placement[0], placement[1]) else: print(res)
def pause(self, key, level, pausearg=None): '''pause conditionnelle suivant le niveau de test. Voir sudoio.sudoPause() pour les détails d'exécution de la pause. Cette méthode n'est pas affectée par le mode 'quiet'. ''' keylev = self._tstdict.get(str(key), None) #None si clé absente if keylev != None and keylev >= level: #faire la pause r = ui.sudoPause(pausearg) #si le mode graphique est actif, mettre à jour la fenêtre if self._modeUI in (MODE_GUI, MODE_BOTH): ui.updateGUI() return r else: return True
def loopTech(tech, pause=False): '''Applique itérativement la technique indiquée en bouclant loopStep() jusqu'à ce que la technique retourne 'end' pour indiquer sa fin. Permet de demander une pause clavier à chaque boucle. ''' TEST.display("loop", 1, "Boucle de résolution de TechChRCgrid sur tous les carrés") global grid iter = 0 while True: TEST.display("loop", 2, "\nloopTech - Début de boucle") if view.isCompleted(): TEST.display("loop", 1, "loopTech - Grille terminée, c'est gagné !") return action = loopStep(tech) #éviter une boucle infinie iter += 1 if iter > 200: ui.displaySTD( "loopTech - STOP, plus de 100 itérations de boucle !!!") break #fin de la technique if action == "end": break #si une pause de boucle est demandée if pause: r = ui.sudoPause(True) if r is True: TEST.display("loop", 2, "") else: #Ctrl-C ou Ctrl-D ui.displaySTD("Interruption clavier") break continue if view.isCompleted(): TEST.display("loop", 1, "loopTech - Grille terminée, c'est gagné !") else: TEST.display("loop", 1, "loopTech - Perdu, la grille n'est pas résolue.") return
def loopTech(tech, pause=False): '''Cette fonction applique répétitivement la technique 'LastPlc' sur la grille 'grid' jusqu'à un certain état d'avancement. Par exemple faire tous les carrés, ou tous les carrés et rangs, etc. ''' TEST.display("loop", 1, "Boucle de résolution de TechLastPlc sur tous les carrés") tech.reset(mem) grid = gr iter = 0 while True: if grid.isCompleted(): ui.display("\nGrille terminée.") return status = loopStep(tech) #contrôler fin du while iter += 1 if iter > 100: TEST.display("loop", 0, "Plus de 100 itérations de boucle !!! Stop.") break # if status[0] not in ("sqr", "row", "col"): if status[0] not in ("sqr", "row"): TEST.display( "loop", 1, "Boucle : les carrés, rangs et colonnes sont terminés.") break if pause: r = ui.sudoPause(True) if r: ui.display("") else: #Ctrl-C ou Ctrl-D ui.display("Interruption clavier") break continue # tech.abort(mem) return
TEST.display("main", 1, "\nCréation de la grille") grid = sudogrid.SudoGrid() gridInit = sudogrid.SudoGrid() newGrid() ui.display("\nTest du module techlplcr") ui.display("Test de la technique de résolution LastPlcRow") ui.display("------------------------------------------\n") ui.display("\nVariable SudoMemory : mem") mem = SudoMemory() ui.display("Variable SudoObserver : obs") ui.display("Instance de la technique de résolution : tech") tech = TechLastPlcRow(mem, (1, )) ui.display("\nTEST au niveau 3\n") TEST.test("loop", 0) ui.sudoPause() def reset(): '''remet la grille de test dans son état initial et crée de nouvelles instances de la technique de résolution. ''' del (mem) del (tech1) del (tech2) mem = SudoMemory tech1 = TechLastPlcRow(mem, (1, )) tech2 = TechLastPlcRow(mem, (1, )) gr.fillByRowLines(vals)