Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)]) + " |"
Ejemplo n.º 4
0
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 =====')
Ejemplo n.º 5
0
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 =====')
Ejemplo n.º 6
0
Archivo: vaja2.py Proyecto: neradl/dpll
# -*- 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:
        
            

Ejemplo n.º 7
0
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: 
Ejemplo n.º 8
0
Archivo: test.py Proyecto: neradl/dpll
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)