Python 2 - nespravne odstraneni z vnoreneho seznamu
Zdravím,
delám program v Pythonu, který vyřeší sudoku pomocí lidských metod. Nyní se snažím přijít na to, jak udělat "metodu jednoho kandidáta" tzn. pokud v řádku, sloupci nebo menším čtverci je jen jedno chybějící políčko, doplní se dle pravidel sudoku.
Zdrojový kód:
#vytvori seznam hodnot, ktere se nachazeji ve stejnem sloupci
#jako cislo na souradnicich [x][y]
def col(x):
sloupec=[]
i=0
while i<9:
sloupec.append(sudoku[i][x])
i+=1
return sloupec
sudoku=[[0, 0, 0, 9, 2, 7, 5, 6, 8],
[6, 9, 2, 1, 8, 5, 7, 3, 4],
[8, 5, 7, 4, 6, 3, 1, 9, 2],
[1, 3, 4, 2, 9, 6, 8, 7, 5],
[2, 7, 8, 5, 3, 4, 6, 1, 9],
[5, 6, 9, 7, 1, 8, 4, 2, 3],
[4, 2, 5, 3, 7, 1, 9, 8, 6],
[9, 1, 6, 8, 4, 2, 3, 5, 7],
[7, 8, 3, 6, 5, 9, 2, 4, 1]]
index = -1
n = 0
ungiven = []
#skenovani pole, abychom nasli nepredvyplnene bunky
#do seznamu se ukladaji indexy (pozice) prazdnych bunek
while n < 9:
for i in sudoku[n]:
index+=1
if i == 0:
ungiven.append(index)
n+=1
#vnoreny seznam kandidatu pro kazde policko, na zacatku vzdy 1-9
#seznamu je tolik, kolik je nepredvyplnenych policek
moznosti = len(ungiven) * [[1,2,3,4,5,6,7,8,9]]
#p udava, na kolikate pozici se pohybujeme v seznamu ungiven
p=0
while p < len(ungiven):
#prepocet na souradnice v poli sudoku
x = ungiven[p]%9
y = ungiven[p]/9
#metoda jednoho kandidata (ve sloupci)
for m in col(x):
if m in moznosti[p]:
moznosti[p].remove(m)
if len(moznosti[p]) == 1:
sudoku[y][x] = moznosti[p][0]
p+=1
Funkce col() vytvoří seznam hodnot, které jsou v daném sloupci.
A můj problém je, že když dojde na moznosti[p].remove(m), odstraní se "m" z každého seznamu v "moznosti". Ja ale chci, aby se "m" odstranilo jen z jednoho (p-tého) seznamu v "moznosti". Tak, jak to je napsané teď se doplní vždy jen 1. číslo (v tomto případě 3) a zbytek zůstane jak je.
Snad jsem problém formuloval srozumitelně, předem děkuji za nápady.
Edit: přidána funkce col(x).