Skip to content

Instantly share code, notes, and snippets.

@mlouielu
Created June 27, 2018 10:23
Show Gist options
  • Save mlouielu/faa6577a063847275c44e0d34f872fff to your computer and use it in GitHub Desktop.
Save mlouielu/faa6577a063847275c44e0d34f872fff to your computer and use it in GitHub Desktop.
13115.py
import sys
def read_sudoku(n):
sudoku = []
for _ in range(n):
sudoku.append(list(map(int, sys.stdin.readline().strip().split(' '))))
return sudoku
def only_appear_once(n, row):
return len(set(row)) == n and set(row) == set(range(1, n + 1))
def is_row_correct(n, sudoku):
for row in sudoku:
if not only_appear_once(n, row):
return False
return True
def is_col_correct(n, sudoku):
for col in range(n):
if not only_appear_once(n, [sudoku[row][col] for row in range(n)]):
return False
return True
def is_sqr_correct(n, sudoku):
sqr = int(n ** .5)
for r in range(0, n, sqr):
for c in range(0, n, sqr):
square = []
for _ in range(sqr):
square.extend(sudoku[r+_][c:c+sqr])
if not only_appear_once(n, square):
return False
return True
def is_correct_sudoku(n, sudoku):
if not is_row_correct(n, sudoku):
return False
if not is_col_correct(n, sudoku):
return False
if not is_sqr_correct(n, sudoku):
return False
return True
sys.stdin.readline()
while True:
try:
n = int(sys.stdin.readline())
except ValueError:
break
sudoku = read_sudoku(n)
print('yes' if is_correct_sudoku(n, sudoku) else 'no')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment