This is an old revision of the document!
Ziel ist es, ein Sudoku-Solver zu programmieren, der die allermeisten Sudokus in nützlicher Frist lösen kann.
Wir werden eine Klasse Sudoku programmieren. Darin werden die Zahlen in einem 2-dimensionalen Array 9×9-Array gespeichert.
Dazu werden wir Funktionen einbauen, die wir als Aufgaben bei den Funktionen schon programmiert haben.
- sudoku.py
class Sudoku:
def __init__(self):
self.feld = [[0 for i in range(9)] for j in range(9)]
# Liest ein Sudoku als String ein, z.B.
# "003020600900305001001806400008102900700000008006708200002609500800203009005010300"
# "200080300\n060070084\n030500209\n000105408\n\n000000000\n402706000\n301007040\n720040060\n004010003"
def parse(self,s):
x=0
y=0
for c in s:
if (c>="0" and c<="9") or (c=="."):
if c==".":
c="0"
self.feld[x][y] = int(c)
x+=1
if (x==9):
x=0;
y+=1
# Liest ein Sudoku von einer Text-Datei ein.
def fromFile(self,f):
file1 = open(f,"r")
sudoku = file1.read()
file1.close()
self.parse(sudoku)
# Umwandlung in ASCII-Art
def __str__(self):
hbar1 = ("#==="+"===="*2)*3+"#\n"
hbar2 = ("#---"+"+---"*2)*3+"#\n"
symbols = [str(i) for i in range(10)]
symbols[0] = " "
separators = ["|", "|", "#"]
res = hbar1
for y in range(9):
res += "#"
for x in range(9):
res += " "+symbols[self.feld[x][y]]+" "+separators[x%3]
res+="\n"
if y%3==2:
res += hbar1
else:
res += hbar2
return res
# ENDE der Klasse Sudoku
# Beginn vom Hauptprogramm
s = Sudoku()
s.parse("003020600900305001001806400008102900700000008006708200002609500800203009005010300")
print(s)