Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Matrix type ?

0 views
Skip to first unread message

zimba-tm

unread,
Aug 10, 2005, 10:56:40 AM8/10/05
to
Hello ruby fellows,

Maybe you can help me.

I'm currently trying to make a Sudoku solver for my first ruby program.
Sudoku is a nice 9x9 board game with simple rules, but it can be tough
to solve. More infos at http://www.sudoku.com/ if you want to launch a
RubyQuizz :-P

What I would do, is use a kind of 2D Matrix that would represent the
board but couldn't find a satisfying method.

This is my current implementation using arrays :
----
board = Array.new

(1..9).each do |row_num|
board[row_num] = Array.new
(1..9).each do |col_num|
board[row_num][col_num] = "X"
end
end
----
If I "puts board", I'd like to have a 2D view instead.
How does puts work, does it call the to_str method ?

Also, I'd like to access the console as a 2D Array too,
so that I can write on screen directly like a text-framebuffer.

I have so many questions.. :-)
/me is refraining to flood ruby-talk

--
Cheers,
zimba

http://zimba.oree.ch


Robert Klemme

unread,
Aug 10, 2005, 11:26:00 AM8/10/05
to
zimba-tm wrote:
> Hello ruby fellows,
>
> Maybe you can help me.
>
> I'm currently trying to make a Sudoku solver for my first ruby
> program. Sudoku is a nice 9x9 board game with simple rules, but it
> can be tough to solve. More infos at http://www.sudoku.com/ if you
> want to launch a RubyQuizz :-P
>
> What I would do, is use a kind of 2D Matrix that would represent the
> board but couldn't find a satisfying method.
>
> This is my current implementation using arrays :
> ----
> board = Array.new
>
> (1..9).each do |row_num|
> board[row_num] = Array.new
> (1..9).each do |col_num|
> board[row_num][col_num] = "X"
> end
> end

That can be simplified to

board = Array.new(9) { Array.new(9) { "X" } }

In your case I'd create a customer class that does this internally and
provides access methods to cells. This class then also can check the
validity of moves etc.

class Board
def initialize(size=9)
@board = Array.new(size) { Array.new(size) { "X" } }
end

def move(from_x, from_y, to_x, to_y)
raise "Invalid move" if ...
# do the move
...
end

def to_s
# generate reasonable string representation
...
end
end

You might also need / want classes for figures if they behave differently
etc.

> ----
> If I "puts board", I'd like to have a 2D view instead.
> How does puts work, does it call the to_str method ?

No, it's #to_s:

>> o=Object.new
=> #<Object:0x10180648>
>> puts o
#<Object:0x10180648>
=> nil
>> def o.to_s() "foo" end
=> nil
>> puts o
foo
=> nil

> Also, I'd like to access the console as a 2D Array too,
> so that I can write on screen directly like a text-framebuffer.

Hm, I think there is (n)curses support somewhere. You can check with the
RAA
http://raa.ruby-lang.org/

> I have so many questions.. :-)
> /me is refraining to flood ruby-talk

Keep coming!

Kind regards

robert

Brian Schröder

unread,
Aug 10, 2005, 11:28:39 AM8/10/05
to

You should start with a board class. Something like this

class Board
def initialize
@fields = Array.new(9) { Array.new(9) { :empty } }
end

def [](x,y)
@fields[y][x]
end

def []=(x,y,v)
@fields[y][x] = v
end

def to_s
@fields.map{|row| row.map{|cell| cell.ljust(10) }.join(' ')}.join("\n")
end
end

and go on from here.

regards,

Brian

--
http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/


Daniel Berger

unread,
Aug 10, 2005, 11:34:08 AM8/10/05
to
zimba-tm wrote:
> Hello ruby fellows,
>
> Maybe you can help me.
>
> I'm currently trying to make a Sudoku solver for my first ruby program.
> Sudoku is a nice 9x9 board game with simple rules, but it can be tough
> to solve. More infos at http://www.sudoku.com/ if you want to launch a
> RubyQuizz :-P
>
> What I would do, is use a kind of 2D Matrix that would represent the
> board but couldn't find a satisfying method.

require "matrix"

Part of the stdlib.

Regards,

Dan


James Edward Gray II

unread,
Aug 10, 2005, 11:51:56 AM8/10/05
to
On Aug 10, 2005, at 9:56 AM, zimba-tm wrote:

> More infos at http://www.sudoku.com/ if you want to launch a
> RubyQuizz :-P

This is the second time I've seen this requested, so I just wrote it
up. I already have a quiz for next week, but it will pop-up after that.

Thanks for the idea.

James Edward Gray II


Tom Copeland

unread,
Aug 10, 2005, 11:08:53 PM8/10/05
to
On Wed, 2005-08-10 at 23:56 +0900, zimba-tm wrote:
> Hello ruby fellows,
>
> Maybe you can help me.
>
> I'm currently trying to make a Sudoku solver for my first ruby program.
> Sudoku is a nice 9x9 board game with simple rules, but it can be tough
> to solve. More infos at http://www.sudoku.com/ if you want to launch a
> RubyQuizz :-P

You might be interested in this Sudoku game:

http://rubyforge.org/projects/sudoku/

Yours,

Tom


Leslie Viljoen

unread,
Aug 12, 2005, 8:44:50 AM8/12/05
to
Tom Copeland wrote:

Interesting - I wrote a program to generate Sodoku boards
as one of my first Ruby programs. Very quick and easy -
which really testifies to the power of Ruby.


--
ruby -e "puts 'Just another fickle programmer'"

Leslie Viljoen [les...@camary.co.za]
Camary Consulting [http://www.camary.co.za]
Cellphone [083-6186100]
Personal web [http://mobeus.homelinux.org]


Josef 'Jupp' SCHUGT

unread,
Aug 12, 2005, 4:29:01 PM8/12/05
to
Hi!

At Wed, 10 Aug 2005 23:56:40 +0900, zimba-tm wrote:

> I'm currently trying to make a Sudoku solver for my first ruby
> program. Sudoku is a nice 9x9 board game with simple rules, but it
> can be tough to solve.

Sudoku seem to be pandemic. I started sudokuing today using a booklet
by German "Zeit" and "Handelsblatt". After spending about two hours I
have solved 25 sudokus with 48 given entries and started to find them
boring. I wonder if I should skip the remaining 25 and continue with
sudokus with 32 given entries :->

Up to now I didn't even bother taking a look at the hints on solving
this kind of puzzle which are provided in the booklet as well.

Josef 'Jupp' SCHUGT
--
Terrorism is the systematic use of violence and brutality as a means of
gaining some political end. So the "War on Terrorism" is a failure if
it increases violence and brutality and even may be terrorism by itself
if some well-known incidents turn out not to be singular ones. :-|


James Edward Gray II

unread,
Aug 12, 2005, 6:39:08 PM8/12/05
to
On Aug 12, 2005, at 7:44 AM, Leslie Viljoen wrote:

> Interesting - I wrote a program to generate Sodoku boards
> as one of my first Ruby programs. Very quick and easy -
> which really testifies to the power of Ruby.

Any chance I could talk you into posting that as a reply to the Ruby
Quiz message next week?

James


0 new messages