Christer Nilsson wrote: > 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 First Column has two 9's ! cheers Simon