Pythonで数独チェッカーを作成しようとしています:
ill_formed = [[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], # <---
[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]]
easy = [[2,9,0,0,0,0,0,7,0],
[3,0,6,0,0,8,4,0,0],
[8,0,0,0,4,0,0,0,2],
[0,2,0,0,3,1,0,0,7],
[0,0,0,0,8,0,0,0,0],
[1,0,0,9,5,0,0,6,0],
[7,0,0,0,9,0,0,0,1],
[0,0,1,2,0,0,3,0,6],
[0,3,0,0,0,0,0,5,9]]
そのような入力を期待しています-9つのリストのリスト。ゼロは、ユーザーが入力していない数字を表します。行、列、または 3x3 に複数回表示できます。
def check_sudoku(grid):
if len(grid) == 9:
numsinrow = 0
for i in range(9):
if len(grid[i]) == 9:
numsinrow += 1
if numsinrow == 9:
for i in range(9):
rowoccurence = [0,0,0,0,0,0,0,0,0,0]
for j in range(9):
rowoccurence[grid[i][j]] += 1
temprow = rowoccurence[1:10]
if temprow == [1,1,1,1,1,1,1,1,1]:
return True
else:
return False
else:
return False
else:
return False
リスト (グリッド) の 9x9 リストがあること、および各行、列、および 3x3 の小さな正方形に重複がないことを確認する必要があることは明らかです。コードでは、最初に適切な数の行があるかどうかを確認します (9 である必要があります)。次に、各行に 9 つの要素があることを確認します (ill_formed の例では、そうではないことがわかります)。次に、各行で重複をチェックしようとしますが、そうするのに問題があります。各行をループし、その行の各要素をループして、int のリスト (rowoccurence) に 1 を追加できると考えました。たとえば、最初の数値が 2 の場合、rowoccurence[2] は 1 に等しくなければなりません。ゼロはrowoccurence [0]にあり、チェックされません(行に複数のゼロがあり、グリッドがまだ正当である可能性があるため、最初の要素であるゼロを除くすべてを取る必要がある一時的なリストがあります)。正しい値の参照リストに対して一時リスト (基本的に行発生) をチェックしようとしましたが、機能していないようです。この数独チェッカーで行の重複をチェックするのを手伝ってくれませんか? よろしくお願いします!