You are Here: Home

# 2 by 2 sudoku algorithm (python) watch

1. hello,

I am doing a 2 by 2 Sudoku algorithm on python. This is what I have so far.

import random

gridOne = [1,0,4,0]
gridTwo = [0,3,0,0]
gridThree = [0,2,0,1]
gridFour = [4,1,0,0]

for i in gridOne:
while [i] == (0):
[i] == random.randint (1,4) # change 0 with a random (1,4) number
while [i] == [i]:
[i] == random.randint (1,4)

for i in gridTwo:
while [i] == (0):
[i] == random.randint (1,4)
while [i] == [i]:
[i] == random.randint (1,4)

for i in gridThree:
while [i] == (0):
[i] == random.randint (1,4)
while [i] == [i]:
[i] == random.randint (1,4)

for i in gridFour:
while [i] == (0):
[i] == random.randint (1,4)
while [i] == [i]:
[i] == random.randint (1,4)

for i in range (1,4):
while [0] or [1] in (gridOne) == [0] or [1] in (gridTwo): # if top row in grid 1 and 2 has a repeated number
[1] in (gridOne) == random.randint (1,4) # change the duplicated number
[0] in (gridTwo) == random.randint (1,4)
while [0,1] in (gridOne) and [0,1] in (gridTwo) != (1,4): # if row isn't 1-4 then change the numbers that aren't fixed
[1] in (gridOne) == random.randint (1,4)
[0] in (gridTwo) == random.randint (1,4)

while [2] or [3] in (gridOne) == [2] or [3] in (gridTwo): # if bottom row in grid 1 and 2 has a repeated number
[3] in (gridOne) == random.randint (1,4) # change the duplicated number
[2] in (gridTwo) == random.randint (1,4)
[3] in (gridTwo) == random.randint (1,4)
while [2,3] in (gridOne) and [2,3] in (gridTwo) != (1,4): # if row isn't 1-4 then change the numbers that aren't fixed
[3] in (gridOne) == random.randint (1,4)
[2] in (gridTwo) == random.randint (1,4)
[3] in (gridTwo) == random.randint (1,4)

while [0] or [1] in (gridThree) == [0] or [1] in (gridFour): # if top row in grid 3 and 4 has a repeated number
[0] in (gridThree) == random.randint (1,4) # change the duplicated number
while [0,1] in (gridOne) and [0,1] in (gridTwo) != (1,4): # if row isn't 1-4 then change the numbers that aren't fixed
[0] in (gridThree) == random.randint (1,4)

while [2] or [3] in (gridThree) == [2] or [3] in (gridFour): # if bottom row in grid 3 and 4 has a repeated number
[2] in (gridThree) == random.randint (1,4) # change the duplicated number
[2] in (gridFour) == random.randint (1,4)
[3] in (gridFour) == random.randint (1,4)
while [2,3] in (gridThree) and [2,3] in (gridFour) != (1,4): # if row isn't 1-4 then change the numbers that aren't fixed
[2] in (gridThree) == random.randint (1,4)
[2] in (gridFour) == random.randint (1,4)
[3] in (gridFour) == random.randint (1,4)

while [0] or [2] in (gridOne) == [0] or [2] in (gridThree): # if first column has a repeated number
[0] in (gridThree) == random.randint (1,4) # change the duplicated number
[2] in (gridThree) == random.randint (1,4)
while [0,2] in (gridOne) and [0,2] in (gridThree) != (1,4): # if column isn't 1-4 then change the numbers that aren't fixed
[0] in (gridThree) == random.randint (1,4)
[2] in (gridThree) == random.randint (1,4)

while [1] or [3] in (gridOne) == [1] or [3] in (gridThree): # if second column has a repeated number
[1] in (gridOne) == random.randint (1,4) # change the duplicated number
[3] in (gridOne) == random.randint (1,4)
while [1,3] in (gridOne) and [1,3] in (gridThree) != (1,4): # if column isn't 1-4 then change the numbers that aren't fixed
[1] in (gridOne) == random.randint (1,4)
[3] in (gridOne) == random.randint (1,4)

while [0] or [2] in (gridTwo) == [0] or [2] in (gridFour): # if third column has a repeated number
[0] in (gridtwo) == random.randint (1,4) # change the duplicated number
[2] in (gridTwo) == random.randint (1,4)
[2] in (gridFour) == random.randint (1,4)
while [0,2] in (gridTwo) and [0,2] in (gridFour) != (1,4): # if column isn't 1-4 then change the numbers that aren't fixed
[0] in (gridtwo) == random.randint (1,4)
[2] in (gridTwo) == random.randint (1,4)
[2] in (gridFour) == random.randint (1,4)

while [1] or [3] in (gridTwo) == [1] or [3] in (gridFour): # if fourth column has a repeated number
[3] in (gridTwo) = random.randint (1,4) # change the duplicated number
[3] in (gridFour) = random.randint (1,4)
while [1,3] in (gridTwo) and [1,3] in (gridFour) != (1,4): # if column isn't 1-4 then change the numbers that aren't fixed
[3] in (gridTwo) = random.randint (1,4)
[3] in (gridFour) = random.randint (1,4)

It's not fully completed and I know there is a much simpler way but I can't figure out what that is. Any help would be much appreciated.

Thanks!
2. Its not clear what you are trying to do ?
Solve Sudokus ?
Validate winning Sudokus ?
Generate them ?

I'm guessing by the code it is solving them and I think you might of underestimated the task sadly id scrap what you've got. Its important to have a clear idea in your head of how your going to solve it before writing code which I know is easier said than done when your learning the language as well as the problem

I don't know Python but I can tell by your code that you're a beginner and thats going to make life more difficult. Google "functions in python" you should understand them before attempting this as they will be very usefull.

The bruteforce approach is the most obvious but its going to perform badly.
1. Write a function that can determine if a Sudoku is correct. I'm sure you know the rules
2. Increment numbers of the cell's to generate all potential solutions whilst calling the function to check if one is valid.

I hear the go-to solution for Sudoku solving is a backtracking algorithm which would solve it much faster with far less steps than a dumb-bruteforce. I've never written one so can't advise you but its worth a google if you want to do it properly.
3. I implemented my code into functions and simplified it. This is what I have got and I don't know where to go from here.

invalidGrid = [[1,2,3,4], [1,2,3,4], [1,2,3,4], [1,2,3,4]] validGrid = [[1,4,3,2], [3,2,1,4], [2,3,4,1], [4,1,2,3]] def solveSudoku(sudokuGrid): if checkRows(sudouGrid) == True: print 'Rows are correct' if checkColums(sudokuGrid) == True: print 'Rows are correct' if checkSquares(sudokuGrid) == True: return True def checkRows (grid): for row in grid: if isValidRow(row) == False: return False return True def isValidRow(row): requiredNumbers = [1,2,3,4] for number in requiredNumbers: if number not in row: return False return True def checkColumns(grid): column = [] for index in range(4): newColumn = [] for row in grid: newColumn.append(row[index]) column.append(newColumn) return checkRows(column) def checkSquares (gridFourByFour): rowsOfSquares = makeSquares(gridFourByFour) for rowOfSquares in rowOfSquares: for square in rowOfSquares: if checkSquare(square) == False: return False return True print checkSudoku(validGrid)

### Related university courses

TSR Support Team

We have a brilliant team of more than 60 Support Team members looking after discussions on The Student Room, helping to make it a fun, safe and useful place to hang out.

This forum is supported by:
Updated: April 22, 2017
Today on TSR

### Edexcel C4 Maths Unofficial Markscheme

Find out how you've done here

### 3,202

students online now

Exam discussions

### Find your exam discussion here

Poll
Useful resources

Can you help? Study Help unanswered threadsStudy Help rules and posting guidelines

## Groups associated with this forum:

View associated groups

The Student Room, Get Revising and Marked by Teachers are trading names of The Student Room Group Ltd.

Register Number: 04666380 (England and Wales), VAT No. 806 8067 22 Registered Office: International House, Queens Road, Brighton, BN1 3XE