Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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).

Předmět Autor Datum
Nenašly se žádné odpovědi.

Zpět do poradny Odpovědět na původní otázku Nahoru