Greetings, While it may be true that the Sudoku program below looks nicer in Ruby than JavaScript, I don't find it very readable. Sure, it's concise, but that doesn't help me understand it. The variable names are horrible. As I learn Ruby, I'm seeing more and more of this poor naming, favoring conciseness so much over clarity that some code samples are outright frustrating to read for this "nuby." I hope that I'm just stumbling on some bad examples and not the norm. I hope that the more Ruby code I read, the more I'll find a pragmatic compromise between conciseness and clarity. Regards, Craig On Dec 30, 2005, at 9:17 AM, James Edward Gray II wrote: > Begin forwarded message: > >> From: NILSSON Christer <christer.nilsson / nordicsolution.com> >> Date: December 30, 2005 4:09:59 AM CST >> To: James Edward Gray II <james / grayproductions.net> >> Subject: Re: Ruby Quiz Suggestion >> Reply-To: NILSSON Christer <christer.nilsson / nordicsolution.com> >> >> Hello James! > > [snip] > >> I found a short solution for Sudoku. It was originally written by >> Kevin Greer in JavaScript, but Ruby makes it look even nicer. I >> haven't seen the use of this data structure in Sudoku before. > > [snip] > >> regards >> Christer >> >> class Sudoku >> def initialize s >> @s=s >> 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.solve(0,0,0,0) >> >> > >