Valid Sudoku
https://leetcode.com/problems/valid-sudoku/
First define a validate function:
def validate(group: List[str]):
numbers = list(filter(lambda x: x != '.', group))
return Counter(numbers) == Counter(set(numbers))Then validate each row, col, and box.
if not (all(validate))
for row in board:
if not validate(row):
return False
for j in range(9):
col = [board[i][j] for i in range(9)]
if not validate(col):
return False
for x in range(0, 9, 3):
for y in range(0, 9, 3):
box = [board[x + i][y + j] for i in range(3) for j in range(3)]
if not validate(box):
return False
return TrueA more succinct functional solution:
return all(
[
all(validate(row) for row in board),
all(validate([board[i][j] for i in range(9)]) for j in range(9)),
all(
validate(
[board[x + i][y + j] for i in range(3) for j in range(3)]
)
for x in range(0, 9, 3)
for y in range(0, 9, 3)
)
]
)