Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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)