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/.