hab mich mal die letzten tage mit sudoku beschaeftigt (bin eigentlich kein fan davon, aber ich fands eine gute uebung).
bis jetzt kann das script nur etwas einfachere sudokus loesung, weil noch ein teil fehlt, aber so einige sachen gehen schon. wenns stiltechnisch etwas zu beanstanden gibt, bitte melden
zum script:
wenn ihr nicht im testlauf seid muesst ihr Sudoku nur instanzieren dann zeile fuer zeile eingeben und dabei leere felder als 0 eintragen.
Code: Alles auswählen
class Sudoku(object):
def __init__(self, feld = []):
self.__feld = feld
del feld
self.__istKomplett()
self.__gestrichen = 1
self.__main()
self._ausgabe()
def __istKomplett(self):
if len(self.__feld) == 9:
for i in range(9):
for j in range(9):
self.__feld[i][j]=[self.__feld[i][j],1,2,3,4,5,6,7,8,9]
else:
self.__eingabe()
def _getFeld(self):
return self.__feld
def __eingabe(self):
self.__feld = [[[0,1,2,3,4,5,6,7,8,9] for x in range(9)] for y in range(9)]
for y in range(9):
zeile = str(raw_input("%d. Zeile:" % (y+1)))
for x in range(9):
self.__feld[y][x][0] = int(zeile[x])
def _ausgabe(self):
for i in range(9):
for j in range(9):
print self.__feld[i][j][0],
print
def __main(self):
while self.__gestrichen:
self.__gestrichen = 0
for y in range(9):
for x in range(9):
self.__test_v(y,x)
self.__test_h(y,x)
self.__test_box(y,x)
if len([i for i in self.__feld[y][x] if i != 0]) == 1:
self.__feld[y][x][0] = [i for i in self.__feld[y][x] if i != 0][0]
def __test_box(self, x, y):
zahl = self.__feld[y][x][0]
box_y = int(y / 3) * 3
box_x = int(x / 3) * 3
for y in range(3):
for x in range(3):
if not self.__feld[box_y + y][box_x + x][0]:
self.__feld[box_y + y][box_x + x][zahl] = 0
self.__gestrichen += 1
def __test_v(self, y, x):
zahl = self.__feld[y][x][0]
y = [i for i in range(9) if i != y]
for y in y:
if not self.__feld[y][x][0]:
self.__feld[y][x][zahl] = 0
self.__gestrichen += 1
def __test_h(self, y, x):
zahl = self.__feld[y][x][0]
x = [i for i in range(9) if i != x]
for x in x:
if not self.__feld[y][x][0]:
self.__feld[y][x][zahl] = 0
self.__gestrichen += 1
if __name__ == '__main__':
testfeld = [[6,8,3,0,7,4,0,0,9], \
[0,0,4,8,0,1,0,0,0], \
[7,9,1,3,2,0,4,8,0], \
[0,3,6,0,1,0,0,0,2], \
[0,7,8,0,3,0,5,4,0], \
[1,0,0,0,4,0,3,6,0], \
[0,4,7,0,5,2,1,3,6], \
[0,0,0,4,0,7,9,0,0], \
[9,0,0,1,8,0,7,5,4]]
st = Sudoku(testfeld)