Teil eines Sudoku checkers: Ich habe einen Knoten im Hirn

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hi folks,

ich habe gerade einen Denkfehler und ich befuerchte, ich werde heute nicht schlafen koennen, wenn ich nicht weiss, warum das nicht so geht wie ich mir das vorstelle :P. Es geht um einen Teil eines Sudoku Checkers. Ich weiss, es gibt da viel im Netz, aber mich interessiert gerade, warum mein Ansatz spezifisch nicht geht. Wenn ihr mir die Loesung verraten koenntet, waere das nett.

Da in Sudoku die 3x3 "sub"-Quadrate auch alle Zahlen von 1-9 beinhalten sollen, versuche ich gerade die 9x9 Listen so zu rearrangieren, dass ich pro nested list den Inhalt eines Quadrates habe. Falls das unverstaendlich war, hier ein Ausschnitt eines Beispiels:

Code: Alles auswählen

5 3 4 | 6 7 8 | 9 1 2
6 7 2 | 1 9 5 | 3 4 8
1 9 8 | 3 4 2 | 5 6 7
wuerde somit zu

Code: Alles auswählen

[[5,3,4,6,7,2,1,9,8], [6,7,8,1,9,5,3,4,2], [9,1,2,3,4,8,5,6,7]]
Mein Code (bei dem ich den Fehler partout nicht sehen kann) sieht so aus

Code: Alles auswählen

def make_sudoku_boxes(grid):
    boxes = [[]]*9
    indices = [(0,3),(3,6),(6,None)]
    
    index = 0
    while index < len(grid):
    while index < len(grid):
        for i,j in indices:
            if index/3 == 0:
                cur_in = indices.index((i,j))
            elif index/3 == 1:
               cur_in = indices.index((i,j)) + 3
            else:
               cur_in = indices.index((i,j)) + 6 
            boxes[cur_in]+= grid[index][i:j
        index += 1
    return boxes

valid = [[5,3,4,6,7,8,9,1,2],
         [6,7,2,1,9,5,3,4,8],
         [1,9,8,3,4,2,5,6,7],
         [8,5,9,7,6,1,4,2,3],
         [4,2,6,8,5,3,7,9,1],
         [7,1,3,9,2,4,8,5,6],
         [9,6,1,5,3,7,2,8,4],
         [2,8,7,4,1,9,6,3,5],
         [3,4,5,2,8,6,1,7,9]]
Als Antwort bekomme ich jedoch eine Liste mit 9 nested lists, die alle Zahlen des Sudoku enthalten, also jeweils 81 elemente :K

Was mache ich falsch? :K

Ich hoffe ich konnte es einigermassen erlaeutern. Danke allen schonmal fuer input.
Benutzeravatar
pillmuncher
User
Beiträge: 1482
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Wo liegt der Unterschied:

Code: Alles auswählen

>>> boxes = [[]]*9
>>> print boxes[0]
[]
>>> print boxes[1]
[]
>>> boxes[0].append('test')
>>> print boxes[0]
['test']
>>> print boxes[1]
['test']
vs.

Code: Alles auswählen

>>> boxes = [[] for _ in range(9)]
>>> print boxes[0]
[]
>>> print boxes[1]
[]
>>> boxes[0].append('test')
>>> print boxes[0]
['test']
>>> print boxes[1]
[]
?
In specifications, Murphy's Law supersedes Ohm's.
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

@pillmuncher: I see... faszinierend. Das war das letzte, woran ich gedacht habe.

Danke fuer die Erlaeuterung. Jetzt kann ich endlich in Ruhe schlafen :shock:
Antworten