Jump to content

## Recommended Posts

I'm trying to write a 6x6 mini sudoku solver, and I wouldn't mind some help with my algorithm.I'll show you my code along with my thinking, to see if you can clear up my messy ideas.

`   function solve() {	 //gather all the numbers already input	 var rows = new Array();	 //for each row	 \$('#sudoku_frame tr').not('.ignore').each(function(r) {	   rows[r+1] = new Array();	   //for each column in each row	   \$(this).find('td input').each(function(c) {		 rows[r+1][c+1] = \$(this).val();	   });	 });`

At this point, rows is a multidimensional array representing the whole grid:

`1 (row) =>	 1 (col) => 6	 2 (col) => 2	 3 (col) => ''	 4 (col) => ''	 5 (col) => ''	 6 (col) => ''`

etc. etc.

`	 //define possibles 	 function Sudoku(n) {	   this.possible = new Array();	   for(i=1;i<=n;i++) {		this.possible[i] = i;	   }	 }   //for each row   for(var i in rows) {   toTry = new Sudoku(6);   //for each field	for(var k in rows[i]) {	  //if the field isn't empty	 if(rows[i][k] != '') {	   //remove the value from the possible array	   for(x in toTry.possible) {		if(toTry.possible[x] == rows[i][k]) {		 toTry.possible[x] = '';		} //end if {}	   } //end removing value	 }  //end if the field isn't empty	} //end for each field   } //end for each row`

For each row, I need to check what values are already input and scratch them off a list of possibles, which I can do by creating a new Sudoku object which has, as it's 'possible' property, an array of the possible numbers (where n is the size of the grid). So, if the first number on the first row is known to be 2, the possibles array of the first toTry object looks like: 1 => 1 2 => '' 3 => 3 4 => 4 5 => 5 6 => 6I intend then to check each full column against the possibles list, and scratch off any more. If I end up with one left in the possibles list, I can go ahead and add it to the rows array.I don't know if it's going to be possible to code this using only human solving heuristics - it might require some sort of mathematical approach.What do you guys think - any tips?You can see it, for what it's worth, here.

Edited by chibineku

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

## Sign in

Already have an account? Sign in here.

Sign In Now
×
×
• Create New...