Ejemplo n.º 1
0
Archivo: demo.py Proyecto: JanaVi/LVR
    def sudoku(self):
        self.lab.destroy()
        self.obvestilo.set('''Naj bo zacetne = [(i_1,j_1,k_1), (i_2,j_2,k_2), ... , (i_n,j_n,k_n)] seznam začetnih vrednosti. Prva
koordinata označuje vrstico, druga stolpec, tretja pa vrednost na tem polju.

- sudoku_pretvori(zacetne)  nam vrne logični izraz, ki ga lahko podamo SAT solverju.

- sudoku(zacetne)  nam vrne izpisan rešen sudoku (če je ta rešljiv, sicer vrne niz 'Sudoku s tako
  podanimi začetnimi vrednostmi ni rešljiv.').

primer = [(1,1,9),(1,2,2),(1,5,1),(1,6,5),(2,3,5),(2,8,6),
              (3,1,6),(3,2,1),(3,4,3),(3,9,4),(4,1,2),(4,2,8),(4,5,4),
              (5,1,1),(5,5,3),(5,9,6),(6,5,8),(6,8,9),(6,9,5),
              (7,1,4),(7,6,9),(7,8,5),(7,9,3),(8,2,9),(8,7,6),
              (9,4,8),(9,5,6),(9,8,4),(9,9,1)]

sudoku(primer) = 9 2 4 | 6 1 5 | 7 3 8 
                          7 3 5 | 4 2 8 | 1 6 9 
                          6 1 8 | 3 9 7 | 5 2 4 
                         -- -- -- -- -- -- -- -- -- --
                          2 8 9 | 5 4 6 | 3 1 7 
                          1 5 7 | 9 3 2 | 4 8 6 
                          3 4 6 | 7 8 1 | 2 9 5 
                         -- -- -- -- -- -- -- -- -- --
                          4 6 1 | 2 7 9 | 8 5 3 
                          8 9 3 | 1 5 4 | 6 7 2 
                          5 7 2 | 8 6 3 | 9 4 1 ''')
Ejemplo n.º 2
0
def single_test():
    s = sudoku()

    clauses = formulate_sudoku(s, 3)

    sol = DPLL(clauses)
    
    display(s, sol, 3)
Ejemplo n.º 3
0
    def processSudoku(self):
        '''process the loaded problem, solve, and display'''
        self.event = 'solution'
        problem = sudoku(self.prob.get())
        solution = problem.solve()

        var = self.sol.set(solution)

        self.txt.insert(END,"\nThe solution to the problem is")
        self.txt.insert(END,"\n")
        self.show(self.event)
        self.txt.insert(END,"\n")
Ejemplo n.º 4
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.º 5
0
def bench_sudoku_resolution():
    # timeit.timeit("single_test", globals=locals())
    clauses = formulate_sudoku(sudoku(), 3)

    t = time.time()

    assert DPLL(clauses) is not False
    print(f'Temps pour resoudre un sdk de // taille=3 // is {time.time() - t}')

    s = generate(4, 4)
    clauses = formulate_sudoku(s, 4)

    t = time.time()
    assert DPLL(clauses) is not False
    print(f'Temps pour resoudre un sdk de // taille=4 // is {time.time() - t}')

    s = generate(5, 4)
    clauses = formulate_sudoku(s, 5)

    t = time.time()
    assert DPLL(clauses) is not False
    print(f'Temps pour resoudre un sdk de // taille=5 // is {time.time() - t}')
Ejemplo n.º 6
0
 def solve_button(self):
     board = self.get_board()
     my_sudoku = sudoku(board)
     solvable = my_sudoku.solve(verbose=0)
     if solvable: self.fill_board(my_sudoku.board)
     else: self.label_uns.setText('This Sudoku is not solvable!')
Ejemplo n.º 7
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.º 8
0
from sudoku import *
asudoku = sudoku()
asudoku.generate()
asudoku.display()
asudoku = sudoku()
asudoku.makepuzzle(40)
asudoku.display()
asudoku.solved()
asudoku.solve()
asudoku.display()
Ejemplo n.º 9
0
from sudoku import *
from time import clock


print("Primerjava DPLL algoritmov z, brez, ter z le eno začetno preverbo čiste pojavitve. \n")
D = input("Primerjam DPLL s čisto pojavitvijo? (y/n)  ")
D1 = input("Primerjam DPLL z le eno izvedbo čiste pojavitve (takoj na začetku)?  (y/n)  ")
DB = input("Primerjam osnoven DPLL, brez implementacije čiste pojavitve? (y/n)  ")
L = 0
if not (D=="n" and D1=="n" and DB=="n"):
	L = int(input("Koliko naključnih polnitev polj (sudokujev) zgeneriram? Vnesi naravno št."))

if not (D=="n" and D1=="n" and DB=="n"):
	print("\n Prazen sudoku:")
	print("="*25)
	CNF = sudoku([]).cnf()

if D=="y":
	kopija = Cnf([Stavek([i for i in s.literali]) for s in CNF.stavki])
	before1 = clock()
	rez1 = dpll(kopija)
	after1 = clock()
	print("Dpll z večkratno čisto pojavitvijo potrebuje {0} sec.".format(after1-before1))

if D1=="y":
	kopija = Cnf([Stavek([i for i in s.literali]) for s in CNF.stavki])
	before2 = clock()
	rez2 = dpll_brez_ciste(kopija)
	after2 = clock()
	print("Dpll z enkratno čisto pojavitvijo potrebuje {0} sec.".format(after2-before2))
Ejemplo n.º 10
0
#author:Juned Munshi
#contact: [email protected]

from sudoku import *
import sys
#visualization .set True to visualize all steps taken to solve puzzle
playback=True


#initialize puzzle from file
s=sudoku("puzzle.txt")
initState=s.initState;
print initState

#create gameboard
board=gameBoard("Brainy Agent solves Sudoku Problem",600,600,50,120)
#display sudoku puzzle
for key,value in initState.items():
	board.drawText(key[0],key[1],str(value))
board.draw()


print "Puzzle read successfully.Press Enter to solve puzzle"
sys.stdin.read(1)
#while (pygame.event.wait().type != KEYDOWN  ): pass

#note initial time
stime=time.time()

#record all the actions 
actions=[]
Ejemplo n.º 11
0
Python 3.7.4 (v3.7.4:e09359112e, Jul  8 2019, 14:54:52) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.
>>> from sudoku import*
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    from sudoku import*
ModuleNotFoundError: No module named 'sudoku'
>>> from sudoku import *
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    from sudoku import *
ModuleNotFoundError: No module named 'sudoku'
>>> asudoku=sudoku()
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    asudoku=sudoku()
NameError: name 'sudoku' is not defined
>>> asudoku.generate()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    asudoku.generate()
NameError: name 'asudoku' is not defined
>>> asudoku.display()
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    asudoku.display()
NameError: name 'asudoku' is not defined
>>> asudoku=sudoku()
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
Ejemplo n.º 12
0
from sudoku import *

if __name__ == "__main__":
    S = sudoku()
    for i in range(1, 101):
        print("S[{:3}] :- {}".format(i, next(S)))
Ejemplo n.º 13
0
def main():
	# root = tk.Tk(); root.withdraw()
	# fileName = askopenfilename(parent=root,title="Sudoku solver",filetypes=[("wav files","*.txt")])
	# print os.getcwd()+"/entradas/taller3.txt"
	# if fileName != "":
	mat_read = filehandle(False,os.getcwd()+"/entradas/taller3.txt")
	mat_read.read_file()
	matriz = mat_read.get_matrix()
	
	pygame.init()
	size = width, height = 400, 500
	screen = pygame.display.set_mode(size)

	background = pygame.Surface(screen.get_size())
	background = background.convert()
	background.fill((250, 250, 250))

	board, boardRect = load_image("board.png")
	boardRect = boardRect.move(10, 80)
	logo, logoRect = load_image("about.png")
	logoRect = logoRect.move(10, 10)


	puzzleNumber = int(random.random() * 20000) + 1
	pygame.display.set_caption("Simulacion Computacional 2015-II")
	inital, current, solution = getSudoku(puzzleNumber)



	theSquares = []
	initXLoc = 10
	initYLoc = 80
	startX, startY, editable, number = 0, 0, "N", 0

	for x in range(len(matriz)):
	    for y in range(len(matriz[0])):
	        if x in (0, 1, 2):  startX = (x * 41) + (initXLoc + 2)
	        if x in (3, 4, 5):  startX = (x * 41) + (initXLoc + 6)
	        if x in (6, 7, 8):  startX = (x * 41) + (initXLoc + 10)
	        if y in (0, 1, 2):  startY = (y * 41) + (initYLoc + 2)
	        if y in (3, 4, 5):  startY = (y * 41) + (initYLoc + 6)
	        if y in (6, 7, 8):  startY = (y * 41) + (initYLoc + 10)
	        number = matriz[y][x]	
	        if number != None:
	            editable = "N"
	        # print "startX ", startX , "startY ", startY , "number ", number  
	        theSquares.append(SudokuSquare.SudokuSquare(number, startX, startY, editable, x, y))


	currentHighlight = theSquares[0]
	currentHighlight.highlight()

	screen.blit(background, (0, 0))
	screen.blit(board, boardRect)
	screen.blit(logo, logoRect)
	pygame.display.flip()

	while 1:
	    for event in pygame.event.get():
	        if event.type == pygame.QUIT:
	            return 0
	        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
	        	root = tk.Tk(); root.withdraw()
	        	fileName = askopenfilename(parent=root,title="Sudoku solver",filetypes=[("wav files","*.txt")])
	        	if fileName != "":
	        		mat_read = filehandle(False,fileName)
	        		mat_read.read_file()
	        		matriz = mat_read.get_matrix()
	        		theSquares = set_matrix(mat_read.get_matrix())

	        if event.type == pygame.KEYDOWN and event.key == pygame.K_F5:
	        	sdk = sudoku(True)
	        	matriz = sdk.start(matriz)
	        	theSquares = set_matrix(matriz)
	        	for num in theSquares:
	        		num.draw()

	        if event.type == pygame.KEYDOWN and event.key == pygame.K_F9:
	        	root = tk.Tk(); root.withdraw()
	        	fileName = asksaveasfilename(parent=root,defaultextension=".txt")
	        	if fileName: 
	        		mat_save = filehandle()
    				mat_save.save_sudoku(fileName,matriz)

			if event.type == pygame.MOUSEBUTTONDOWN:
				mousepos = pygame.mouse.get_pos()
				for x in theSquares:
					if x.checkCollide(mousepos):
						currentHighlight.unhighlight()
						currentHighlight = x
						currentHighlight.highlight()

	    for num in theSquares:
	        num.draw()
	    pygame.display.flip()