vickybat
I am the night...I am...
Guys, please see if the logic of sudoku checker is right or not in my code
Here's a bit of info about a sudoku checker
Here's my code in python:
Be careful about the indentations as python is strict about whitespaces.
Here's a bit of info about a sudoku checker
Sudoku [*en.wikipedia.org/wiki/Sudoku]
is a logic puzzle where a game
is defined by a partially filled
9 x 9 square of digits where each square
contains one of the digits 1,2,3,4,5,6,7,8,9.
For this question we will generalize
and simplify the game.
Define a procedure, check_sudoku,
that takes as input a square list
of lists representing an n x n
sudoku puzzle solution and returns the boolean
True if the input is a valid
sudoku square and returns the boolean False
otherwise.
A valid sudoku square satisfies these
two properties:
1. Each column of the square contains
each of the whole numbers from 1 to n exactly once.
2. Each row of the square contains each
of the whole numbers from 1 to n exactly once.
You may assume the the input is square and contains at
least one row and column.
Here's my code in python:
PHP:
correct = [[1,2,3],
[2,3,1],
[3,1,2]]
incorrect = [[1,2,3,4],
[2,3,1,3],
[3,1,2,3],
[4,4,4,4]]
incorrect2 = [[1,2,3,4],
[2,3,1,4],
[4,1,2,3],
[3,4,1,2]]
incorrect3 = [[1,2,3,4,5],
[2,3,1,5,6],
[4,5,2,1,3],
[3,4,5,2,1],
[5,6,4,3,2]]
incorrect4 = [['a','b','c'],
['b','c','a'],
['c','a','b']]
incorrect5 = [ [1, 1.5],
[1.5, 1]]
def check_sudoku(p):
s =p[0] # top most list object using list index
n =len(p) # length of list
for e in s: # checking each element in list
i=0
while i < n: # outer loop for rows and columns
j=0
row = 0
col = 0
while j < n: #inner loop for rows and columns
if p[i][j]== e: # traversing list by rows and comparing with the digit
row = row + 1
if p[j][i] == e: # traversing list by columns and comparing with digit
col = col + 1
j = j + 1
if isinstance (e,str) or not isinstance(e,int)or e == 0 : # condition to check that each element should not be a character,non-integer or zero
return False
if row!=1 or col != 1: # if each element count exceeds 1, then it returns false i.e not sudoku
return False
i = i + 1
return True # Its a sudoku
print check_sudoku(incorrect)
#>>> False
print check_sudoku(correct)
#>>> True
print check_sudoku(incorrect2)
#>>> False
print check_sudoku(incorrect3)
#>>> False
print check_sudoku(incorrect4)
#>>> False
print check_sudoku(incorrect5)
#>>> False
Be careful about the indentations as python is strict about whitespaces.
Last edited: