Dirk Meijer wrote: > i wouldn't call it concise, it simply doesn't work.. probably an error > in porting to Ruby.. It works. This is the complete code. Christer # Author: Kevin Greer (JavaScript), Date: Dec 25, 2005 -- Copyright 2005, All Rights Reserved # Rewritten in Ruby by Christer Nilsson 2005-12-29 class Sudoku def initialize s @s=s end def display for a in 0..2 for b in 0..2 for c in 0..2 for d in 0..2 print " " + @s[a][b][c][d].to_s end print " |" if c<2 end print "\n" end print "-------+-------+-------\n" if a<2 end end def solve a, b, c, d return true if a==3 return solve(a+1, 0, c, d) if b==3 return solve(a, b+1, 0, d) if c==3 return solve(a, b, c+1, 0) if d==3 return solve(a, b, c, d+1) if @s[a][b][c][d]!=0 for digit in 1..9 if not occupied?(a, b, c, d, digit) then @s[a][b][c][d] = digit return true if solve(a, b, c, d+1) @s[a][b][c][d] = 0 end end false end def occupied? a, b, c, d, digit for x in 0..2 for y in 0..2 return true if @s[a][b][x][y]==digit # block return true if @s[a][x][c][y]==digit # row return true if @s[x][b][y][d]==digit # column end end false end end s = [[[[0,0,0],[0,7,1],[0,0,5]], [[5,0,0],[0,6,9],[0,7,1]], [[0,7,1],[8,5,3],[4,2,0]]], [[[0,1,0],[0,0,2],[0,0,0]], [[7,8,0],[1,5,4],[0,9,2]], [[0,4,0],[3,6,0],[1,8,0]]], [[[0,6,4],[0,2,3],[0,5,0]], [[9,0,5],[0,1,0],[0,0,0]], [[7,0,0],[5,9,0],[0,0,0]]]] sudoku = Sudoku.new(s) sudoku.display print "\nsolving...\n\n" if sudoku.solve(0,0,0,0) then sudoku.display end 0 0 0 | 0 7 1 | 0 0 5 5 0 0 | 0 6 9 | 0 7 1 0 7 1 | 8 5 3 | 4 2 0 -------+-------+------- 0 1 0 | 0 0 2 | 0 0 0 7 8 0 | 1 5 4 | 0 9 2 0 4 0 | 3 6 0 | 1 8 0 -------+-------+------- 0 6 4 | 0 2 3 | 0 5 0 9 0 5 | 0 1 0 | 0 0 0 7 0 0 | 5 9 0 | 0 0 0 solving... 2 3 9 | 4 7 1 | 6 8 5 5 4 8 | 2 6 9 | 3 7 1 6 7 1 | 8 5 3 | 4 2 9 -------+-------+------- 5 1 6 | 8 9 2 | 3 4 7 7 8 3 | 1 5 4 | 6 9 2 9 4 2 | 3 6 7 | 1 8 5 -------+-------+------- 1 6 4 | 7 2 3 | 9 5 8 9 2 5 | 8 1 6 | 4 3 7 7 3 8 | 5 9 4 | 2 1 6 Program exited with code 0 -- Posted via http://www.ruby-forum.com/.