function X = sudoku_puzzle(p) % SUDOKU_PUZZLE A few Sudoku puzzles. % X = sudoku_puzzle(p), for scalar p, returns the p-th puzzle. % See the comments in the code for descriptions of the puzzles. switch p case 1 % Easy, no backtracking required. X = [2 0 7 0 9 1 0 0 4; 0 0 0 0 0 0 0 1 2; 6 0 0 0 0 2 5 9 0 8 0 5 0 2 3 4 0 0; 9 7 0 0 0 0 0 2 6; 0 0 1 7 6 0 9 0 8 0 8 6 2 0 0 0 0 3; 7 3 0 0 0 0 0 0 0; 5 0 0 6 3 0 1 0 9]; case 2 % Easy, no backtracking required. X = [0 0 4 0 9 0 0 2 1; 0 8 0 0 0 1 5 0 0; 6 9 0 0 0 5 0 0 3 0 0 0 5 6 3 0 9 4; 0 0 0 0 0 0 0 0 0; 5 2 0 9 4 7 0 0 0 8 0 0 3 0 0 0 7 2; 0 0 3 2 0 0 0 8 0; 1 6 0 0 7 0 4 0 0]; case 3 % Slightly difficult, a few backtracking steps. % Not unique. X = [0 0 0 9 0 0 3 0 5; 0 2 0 0 4 0 0 0 1; 3 0 0 0 8 0 9 0 0 0 0 0 0 0 3 0 5 0; 0 6 0 4 5 0 8 0 0; 0 0 7 8 0 9 0 0 0 0 9 2 6 0 4 0 7 0; 6 0 0 0 0 0 0 0 2; 5 7 0 0 0 2 0 3 0]; case 4 % Moderately difficult, a few hundred backtracing steps. X = [7 0 1 0 0 0 4 0 0; 5 0 0 0 0 0 0 0 0; 3 0 0 9 6 0 0 0 0 0 0 0 3 8 0 0 0 5; 4 7 0 0 0 0 0 0 6; 0 0 0 0 0 9 8 0 2 0 5 0 0 1 8 0 0 0; 0 2 4 0 0 0 5 0 0; 0 0 0 0 0 3 0 9 0]; case 5 % From an airline magazine. Is this a legal puzzle? X = [4 0 2 0 0 0 7 0 9; 8 0 5 2 0 4 0 0 0; 0 0 0 0 9 0 0 0 0 7 0 0 8 0 0 9 0 2; 3 0 0 1 0 5 0 0 8; 1 0 8 0 0 7 0 0 3 0 0 0 0 3 0 0 0 0; 0 0 0 6 0 1 3 0 7; 9 0 3 0 0 0 6 0 1]; case 6 % The same airline magazine says this is difficult. Is it? X = [0 0 0 1 0 0 0 3 0; 0 9 4 3 0 0 7 0 0; 1 0 6 0 0 0 8 2 0 0 0 0 5 0 0 0 0 0; 6 2 8 0 0 0 5 1 9; 0 0 0 0 0 6 0 0 0 0 4 1 0 0 0 2 0 5; 0 0 9 0 0 2 4 8 0; 0 8 0 0 0 5 0 0 0]; case 7 % Solution is not unique. % Herzberg & Murty, Notices AMS, v.54, n.6, June 2007. X = [9 0 6 0 7 0 4 0 3; 0 0 0 4 0 0 2 0 0; 0 7 0 0 2 3 0 1 0 5 0 0 0 0 0 1 0 0; 0 4 0 2 0 8 0 6 0; 0 0 3 0 0 0 0 0 5 0 3 0 7 0 0 0 5 0; 0 0 7 0 0 5 0 0 0; 4 0 5 0 1 0 7 0 8]; case 8 % Difficult. % Only 17 nonzero initial entries. % Herzberg & Murty, Notices AMS, v.54, n.6, June 2007. X = [0 0 0 0 0 0 0 1 0; 4 0 0 0 0 0 0 0 0; 0 2 0 0 0 0 0 0 0 0 0 0 0 5 0 4 0 7; 0 0 8 0 0 0 3 0 0; 0 0 1 0 9 0 0 0 0 3 0 0 4 0 0 2 0 0; 0 5 0 1 0 0 0 0 0; 0 0 0 8 0 6 0 0 0]; case 9 % Good example of backtracking. % Michael Mephapm, "Diabolical" % http://www.sudoku.org.uk/PDF/Solving_Sudoku.pdf X = [0 9 0 7 0 0 8 6 0; 0 3 1 0 0 5 0 2 0; 8 0 6 0 0 0 0 0 0 0 0 7 0 5 0 0 0 6; 0 0 0 3 0 7 0 0 0; 5 0 0 0 1 0 7 0 0 0 0 0 0 0 0 1 0 9; 0 2 0 6 0 0 3 5 0; 0 5 4 0 0 8 0 7 0]; case 10 % "Beware. Very Challenging." % Will Shortz, puzzle 301. % The Little Black Book of Sudoku. X = [0 3 9 5 0 0 0 0 0; 0 0 0 8 0 0 0 7 0; 0 0 0 0 1 0 9 0 4 1 0 0 4 0 0 0 0 3; 0 0 0 0 0 0 0 0 0; 0 0 7 0 0 0 8 6 0 0 0 6 7 0 8 2 0 0; 0 1 0 0 9 0 0 0 5; 0 0 0 0 0 1 0 0 8]; case 11 % "Beware. Very Challenging." % Will Shortz, puzzle 400. % The Little Black Book of Sudoku. X = [0 0 0 0 0 0 8 7 0; 7 8 0 9 4 0 0 0 0; 0 0 0 0 5 0 0 2 0 0 0 0 3 0 0 0 0 0; 0 5 6 0 0 0 0 0 0; 8 0 9 0 0 2 0 1 0; 0 0 0 0 9 0 0 8 0; 0 0 0 0 0 0 4 0 7; 0 0 1 7 0 6 0 0 0]; case 12 % Structural symmetry and not too difficult. % American Math Monthly. % http://www.maa.org/editorial/mathgames/mathgames_09_05_05.html X = [0 5 0 0 0 0 0 7 0; 9 0 0 6 0 1 0 0 8; 0 0 6 0 2 0 1 0 0; 0 6 0 0 0 2 0 1 0; 0 0 3 0 0 0 2 0 0; 0 4 0 3 0 0 0 5 0; 0 0 4 0 3 0 5 0 0; 2 0 0 4 0 5 0 0 9; 0 3 0 0 0 0 0 6 0]; case 13 % Structural symmetry. % Gordon Royle, University of Western Australia. % http://people.csse.uwa.edu.au/gordon/sudoku/sudoku-symmetry.pdf X = [0 2 0 0 3 0 0 4 0; 6 0 0 0 0 0 0 0 3; 0 0 4 0 0 0 5 0 0 0 0 0 8 0 6 0 0 0; 8 0 0 0 1 0 0 0 6; 0 0 0 7 0 5 0 0 0 0 0 7 0 0 0 6 0 0; 4 0 0 0 0 0 0 0 8; 0 3 0 0 4 0 0 2 0]; case 14 % Very close to matrix symmetry, and very difficult. % Gordon Royle, University of Western Australia. % http://people.csse.uwa.edu.au/gordon/sudoku/sudoku-symmetry.pdf X = [6 0 0 0 0 0 0 0 3; 0 7 0 0 8 0 0 9 0; 0 0 2 0 0 0 5 0 0 0 0 0 3 0 0 0 0 0; 0 8 0 0 1 0 0 7 0; 0 0 0 0 0 2 0 0 0 0 0 5 0 0 0 1 0 0; 0 9 0 0 4 0 0 8 0; 3 0 0 0 0 0 0 0 2]; case 15 % Structural symmetry and only 17 nonzero initial entries. % Gordon Royle, University of Western Australia. % http://people.csse.uwa.edu.au/gordon/sudoku/sudoku-symmetry.pdf X = [0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 2; 0 0 3 0 4 5 0 0 0 0 0 0 6 0 1 0 7 0; 0 0 4 0 0 0 6 0 0; 0 0 5 8 0 0 0 0 0 0 0 0 0 3 0 4 0 0; 0 1 0 2 0 0 0 0 0; 0 7 0 0 0 0 0 0 0]; otherwise error('sudoku_puzzle(p) expects p in range 1 <= p <= 15') end end % sudoku_puzzles