Er ist noch nicht ganz fertig. Es gibt ja zwei Regeln beim Sudoku:
1. In jeder Zeile und Spalte kommt jede Zahl zw. 1 und 9 genau einmal vor. (Schon implementiert!)
2. In jedem der 9 Teilquadrate kommt jede Zahl zw. 1 und 9 genau einmal vor. (Nächster Schritt)
Ich will es wirklich alleine lösen, daher bitte _KEINE_ Codesamples geben.
Alles was ich fragen wollte ist, angenommen ich habe 1. schon korrekt implementiert,
gibt es dann im Anschluss eine Art logischen Zusammenhang, wie man im Anschluss effizient 2. erfüllen kann?
Ist es mathematisch (oder wie auch immer) bewiesen, dass jedes Sudoku dass 1. genügt,
durch einfaches Tauschen der Zeilen (oder sonstwie "effizient") in ein Sudoku überführt werden kann,
dass auch 2. erfüllt? (Also ein _richtiges_ Sudoku)
Hier mein Code so far:
(Update vom 28.11.06 12:41 GMT+0)
Code: Alles auswählen
#!/usr/bin/python
import random
def newline():
line = range(1,10)
random.shuffle(line)
return line
def valid_sudoku():
return rowscols_check() #and squares_check():
def rowscols_check():
aset = set()
for col in xrange(len(sudoku[0])):
aset.clear()
for row in xrange(len(sudoku)):
aset.add(sudoku[row][col])
if len(aset) < len(sudoku):
return False
return True
def squares_check():
return True #not implemented yet, always True
sudoku = [newline()]
while len(sudoku) < 9:
sudoku.append(newline())
if valid_sudoku():
continue
else:
sudoku.remove(sudoku[-1])
return sudoku