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个列表的列表。其中的0代表用户未填写的数字,它们可以在行、列或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个元素(如例子所示,这不是情况)。我尝试检查每行中的重复项,但是我遇到了一些困难。我认为可以循环遍历每行,并循环遍历该行中的每个元素,并将1添加到一个整数列表(rowoccurence)中。例如,如果第一个数字是2,那么rowoccurence [2] 应该等于1。0在rowoccurence [0] 中,并且未经检查(我有一个临时列表,应该不包含第一个元素-零-因为一行中可能有多个零,但网格仍然可以合法)。我尝试使用参考值列表检查临时列表(基本上是rowoccurence),但似乎不起作用。您能帮助我检查数独检查器中的行是否有重复项吗?非常感谢您的帮助!
Counter
都是有用的。 - 2rs2tseasy
应该返回True
还是False
? - abarnert