def solve(self): """ Résoudre la grille, dessiner la solution et afficher le résultat dans le champs de texte prévu pour. """ # Rendre la grille non modifiable une fois qu'elle a été résolue self.tag_unbind("cell", "<ButtonPress-1>") # Afficher un message des fois que la recherche d'une solution mette # un peu de temps self.solvable_textvar.set("Looking for solution...") # rendre solides toutes les cases qui ne sont pas dans une zone ou solides self.dtag("selected", "selected") self.addtag_withtag("selected", "blank") self.toggle_selection_solid() # Générer les clauses cnf = gen_cnf( self.dimensions[0], self.dimensions[1], self.zones, self.black_cells ) # Convertir les clauses en 3-sat cnf = sat_3sat(cnf, self.dimensions[1], self.dimensions[0]) # Trouver une solution solution = sat.solve(cnf) # Si une solution a été trouvée, l'afficher et mettre à jour le texte if not (solution == "UNSAT" or solution == "UNKNOWN"): self.draw_solution(solution) self.solvable_textvar.set("Solution found!") # Sinon, juste mettre a jour le texte else: self.solvable_textvar.set("No solution found!")
def export_dimacsSAT(self): """ Exporte le fichier DIMACS associé à la grille. """ filename = asksaveasfilename( initialdir=".", filetypes=(("DIMACS File", "*.cnf"), ("All Files", "*.*")), title="Choose a file.", ) if filename: grid = self.dosun_grid.get_grid() sat = gen_cnf(grid["width"], grid["height"], grid["zones"], grid["blacks"]) fio.save_dimacs(sat, filename)
#!venv/bin/python from sys import argv, stderr from lib.file_io import read_grid, save_dimacs from lib.gen_formule import gen_cnf, sat_3sat if __name__ == "__main__": # vérification du nombre d'arguments if len(argv) < 2: print("Erreur: veuillez fournir au moins une grille en argument", file=stderr) print("Usage: {} path/to/grid.json path/to/another/grid.json ....". format(argv[0]), file=stderr) exit(1) # convertir chaque grille fournie en argument et les exporter au format DIMACS for i in range(1, len(argv)): # lire la grille grid = read_grid(argv[i]) # générer les clauses cnf = gen_cnf(grid["width"], grid["height"], grid["zones"], grid["blacks"]) # convertir les clauses en clauses 3-SAT cnf = sat_3sat(cnf, grid["height"], grid["width"]) # générer le nom du fichier de sortie output_filename = argv[i].split(".json")[0] + ".cnf" # exporter au format DIMACS save_dimacs(cnf, output_filename)