def preveri(): i = 0 primeri = preberi('primeri.txt') for polja in primeri: i += 1 print(" Sudoku št. {0}".format(i)) print("=================") formula = sudoku(polja).cnf() resljivo = dpll(formula) if resljivo==0: print("Ta sudoku ni rešljiv. \n") else: polja2 = resitev(resljivo) print("Sudoku je možno rešiti. \n\tRešitev: \n") narisi(polja2) print("\n\n")
from random import * from dpll import * from sudoku import * print("Prazen sudoku:") print("="*20) rez = dpll(sudoku([]).cnf()) if rez==0: print("Sudoku ni rešljiv!") print("\n\n") else: print("sudoku je rešljiv. Rešitev: \n") K = [vr for vr in rez if rez[vr]==T()] vrstice = {j : {int(i[2]):int(i[4]) for i in K if i[0] == str(j)} for j in range(1,10)} for vrstica in range(1,10): elti = vrstice[vrstica] vrsta = [] for stolpc in range(1,10): vrsta.append(elti[stolpc]) print(vrsta) print("\n\n") for i in range(10): #koliko primerov bomo naredili P = randint(1, 60) #koliko bo danih polj; lahko do 81 polja = [] p = 0 while p<P: vrstica = randint(1,9) #zgeneriramo dana polja in njih vrednosti stolpec = randint(1,9)
print("""[OPOZORILO: priporočeni so n<10. Dinamična verzija funkcije, ki vrne logično formulo tega problema sicer deluje kar hitro (za n=24 potrebuje zgolj 12s, za n=14 manj kot pol sekunde), vendar pa lahko pretvorba v cnf obliko že pri n=6 potrebuje ogromnih 30+ min...]""") sajz = int(input("\nVnesi n: ")) prikaz1 = input("Želiš prikaz formule? (y/n) ") prikaz2 = input("Želiš prikaz njene CNF oblike? (y/n) ") H = hadamard2(sajz) if prikaz1=="y": print("\nLogična formula:\n hadamard2({0}) = ".format(sajz), H) C = H.cnf() if prikaz2=="y": print("\nCNF oblika formule:\n formula.cnf() = ", C) D = dpll(C) print("\nPreverjanje rešljivosti formule:\n dpll(formula.cnf()) = ", D) interp = input("Želiš človeku prijazno interpretacijo rezultata? (y/n) ") if interp=="y": if D==0: print("\nHadamardova matrika velikosti {0}x{0} ne obstaja. ".format(sajz)) else: def polje(spr): lst = map(int,spr[2:-1].split(",")) return tuple(lst) D = {polje(i) : " 1" if D[i]==T() else "-1" for i in D} print("\nPrimer Hadamardove matrike velikosti {0}x{0}: ".format(sajz)) for vr in range(1, sajz+1): vrstica = "\t | " + " ".join([D[(vr, st)] for st in range(1, sajz+1)]) + " |"
x=Spr('x') y=Spr('y') z=Spr('z') w=Spr('w') xx=Lit('x') yy=Lit('y') zz=Lit('z') ww=Lit('w') primer1=Ali(x,y,z) print('===== Primer 1 =====') print (primer1) print (primer1.cnf()) print(dpll(primer1)) primer2=Ali(x, y, In(z,w)) print('===== Primer 2 =====') print (primer2) print (primer2.cnf()) print (dpll(primer2)) primer3=In(x,y,z) print('===== Primer 3 =====') print (primer3) print (primer3.cnf()) print (dpll(primer3)) primer4=In(x, Ali(x,y)) print('===== Primer 4 =====')
from boolean import * from cnf import * from dpll import * x=Spr('x') y=Spr('y') z=Spr('z') w=Spr('w') q=Spr('q') primer1 = Ali(x, y, z) print('===== Primer 1 =====') print (primer1) print (primer1.cnf()) print(dpll(primer1.cnf())) primer2 = Ali(x, y, In(z,w)) print('===== Primer 2 =====') print (primer2) print (primer2.cnf()) print (dpll(primer2.cnf())) primer3 = In(x, y, z) print('===== Primer 3 =====') print (primer3) print (primer3.cnf()) print (dpll(primer3.cnf())) primer4 = In(x, Ali(x, y)) print('===== Primer 4 =====')
# -*- encoding: utf-8 -*- from bool import * from cnf import * from dpll import * from sudoku import * f = open('newfile.txt', 'r+') s=[] i=1 for line in f: j=1 for ch in line: if ch == "\n": break if ch != " ": s.append((i,j,int(ch))) j=j+1 i=i+1 (a,b)=dpll(sudoku4(s)) for (k,v) in list(b.items()): if v == True:
if Pot!=0: k2 = int(input("Željeno št. vozlišč poti: (vpiši naravno št.)\n")) Cik = int(input("Želiš preizkusiti obarvljivost cikla? \n")) if Cik!=0: k3 = int(input("Željeno št. vozlišč cikla: (vpiši naravno št.)\n")) cnfji = input("Izpišem tudi CNF izrazov, ki predstavljajo obarvljivosti? (y/n)\n") ########################### if Pet!=0: print(" \n{0} barvanje Petersenovega grafa".format(Pet) + "\n=================================\n") izraz = kbarvanje(Pet, 10, petersen) CNF = izraz.cnf() if cnfji=="y": print("CNF oblika: \n", CNF) mozno = dpll(CNF) if mozno!=0: print("{0}-barvanje je možno, med drugim na naslednji način: \n".format(Pet), HumanFriendlyVersion(mozno)) else: print("{0}-barvanje ni možno!\n".format(Pet)) if Gro!=0: print(" \n{0} barvanje Grotzchevega grafa".format(Gro) + "\n=================================\n") izraz = kbarvanje(Gro, 11, grotzch) CNF = izraz.cnf() if cnfji=="y": print("CNF oblika: \n", CNF) mozno = dpll(CNF) if mozno!=0: print("{0}-barvanje je možno, med drugim na naslednji način: \n".format(Gro), HumanFriendlyVersion(mozno)) else:
from bool import * from cnf import * from dpll import * from sudoku import * primer=[(1,1,5),(1,2,3),(1,5,7),(2,1,6),(2,4,1),(2,5,9),(2,6,5),(3,2,9),(3,3,8),(3,8,6),(4,1,8),(4,5,6),(4,9,3),(5,1,4),(5,4,8),(5,6,3),(5,9,1),(6,1,7),(6,5,2),(6,9,6),(7,2,6),(7,7,2),(7,8,8),(8,4,4),(8,5,1),(8,6,9),(8,9,5),(9,5,8),(9,8,7),(9,9,9)] primer2=[(1,1,1),(1,2,4),(1,4,3),(2,2,2),(2,4,1),(3,2,3),(3,3,1),(4,1,2),(4,4,4)] primer3=[] (a,b)=dpll(sudoku9(primer3)) for (k,v) in list(b.items()): if v==True: print(k)