Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Help with array

Reply
Thread Tools

Help with array

 
 
Victor Reyes
Guest
Posts: n/a
 
      05-05-2008
[Note: parts of this message were removed to make it a legal post.]

Team,

On my never ending saga to learn Ruby, I am trying to write a program to
solve Sudoku puzzles.
Given a multidimensional array (9x9) I am trying to inspect each row and
each column as follows:

Assume the following represents a typical row in my 9x9 array:

*Row***

23

689

7

12345689

1359

9

2468

359

235
Row
23
689
7
12345689
1359
9
2468
359
235
Row

23

689

7

12345689

1359

9

2468

359

235

Row
23
689
7
12345689
1359
9
2468
359
235
Furthermore, assume the following is a typical column:

*Column***

23

689

7

12345689

1359

9

2468

359

235
I would like to be able to count the frequency of each digit on either row
or column, separate of course!

*Number***

1

2

3

4

5

6

7

8

9

*Frequency***

2

4

5

2

4

3

1

3

5

I can do this with some ugly looking and probably inefficient loop. However,
Ruby has so many tools and "tricks" that perhaps there might be some way of
doing this quicker and easy to understand.

Any help will be greatly appreciated!

Thank you

Victor

 
Reply With Quote
 
 
 
 
Axel Etzold
Guest
Posts: n/a
 
      05-05-2008

-------- Original-Nachricht --------
> Datum: Tue, 6 May 2008 04:06:01 +0900
> Von: "Victor Reyes" <(E-Mail Removed)>
> An: http://www.velocityreviews.com/forums/(E-Mail Removed)
> Betreff: Help with array


> Team,
>
> On my never ending saga to learn Ruby, I am trying to write a program to
> solve Sudoku puzzles.
> Given a multidimensional array (9x9) I am trying to inspect each row and
> each column as follows:
>
> Assume the following represents a typical row in my 9x9 array:
>
> *Row***
>
> 23
>
> 689
>
> 7
>
> 12345689
>
> 1359
>
> 9
>
> 2468
>
> 359
>
> 235
> Row
> 23
> 689
> 7
> 12345689
> 1359
> 9
> 2468
> 359
> 235
> Row
>
> 23
>
> 689
>
> 7
>
> 12345689
>
> 1359
>
> 9
>
> 2468
>
> 359
>
> 235
>
> Row
> 23
> 689
> 7
> 12345689
> 1359
> 9
> 2468
> 359
> 235
> Furthermore, assume the following is a typical column:
>
> *Column***
>
> 23
>
> 689
>
> 7
>
> 12345689
>
> 1359
>
> 9
>
> 2468
>
> 359
>
> 235
> I would like to be able to count the frequency of each digit on either
> row
> or column, separate of course!
>
> *Number***
>
> 1
>
> 2
>
> 3
>
> 4
>
> 5
>
> 6
>
> 7
>
> 8
>
> 9
>
> *Frequency***
>
> 2
>
> 4
>
> 5
>
> 2
>
> 4
>
> 3
>
> 1
>
> 3
>
> 5
>
> I can do this with some ugly looking and probably inefficient loop.
> However,
> Ruby has so many tools and "tricks" that perhaps there might be some way
> of
> doing this quicker and easy to understand.
>
> Any help will be greatly appreciated!
>
> Thank you
>
> Victor


Dear Victor,

one nice feature of the Ruby list is its quiz contest.
You can have a look at different solution proposals for solving
Sudokus here:


http://www.rubyquiz.com/quiz43.html

Best regards,

Axel
--
Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
Ideal für Modem und ISDN: http://www.gmx.net/de/go/smartsurfer

 
Reply With Quote
 
 
 
 
Victor Reyes
Guest
Posts: n/a
 
      05-05-2008
Axel,

I will do so.

Thank you

Victor


On 5/5/08, Axel Etzold <(E-Mail Removed)> wrote:
>
>
> -------- Original-Nachricht --------
> > Datum: Tue, 6 May 2008 04:06:01 +0900
> > Von: "Victor Reyes" <(E-Mail Removed)>
> > An: (E-Mail Removed)
> > Betreff: Help with array

>
> > Team,
> >
> > On my never ending saga to learn Ruby, I am trying to write a program t=

o
> > solve Sudoku puzzles.
> > Given a multidimensional array (9x9) I am trying to inspect each row an=

d
> > each column as follows:
> >
> > Assume the following represents a typical row in my 9x9 array:
> >
> > *Row***
> >
> > 23
> >
> > 689
> >
> > 7
> >
> > 12345689
> >
> > 1359
> >
> > 9
> >
> > 2468
> >
> > 359
> >
> > 235
> > Row
> > 23
> > 689
> > 7
> > 12345689
> > 1359
> > 9
> > 2468
> > 359
> > 235
> > Row
> >
> > 23
> >
> > 689
> >
> > 7
> >
> > 12345689
> >
> > 1359
> >
> > 9
> >
> > 2468
> >
> > 359
> >
> > 235
> >
> > Row
> > 23
> > 689
> > 7
> > 12345689
> > 1359
> > 9
> > 2468
> > 359
> > 235
> > Furthermore, assume the following is a typical column:
> >
> > *Column***
> >
> > 23
> >
> > 689
> >
> > 7
> >
> > 12345689
> >
> > 1359
> >
> > 9
> >
> > 2468
> >
> > 359
> >
> > 235
> > I would like to be able to count the frequency of each digit on eithe=

r
> > row
> > or column, separate of course!
> >
> > *Number***
> >
> > 1
> >
> > 2
> >
> > 3
> >
> > 4
> >
> > 5
> >
> > 6
> >
> > 7
> >
> > 8
> >
> > 9
> >
> > *Frequency***
> >
> > 2
> >
> > 4
> >
> > 5
> >
> > 2
> >
> > 4
> >
> > 3
> >
> > 1
> >
> > 3
> >
> > 5
> >
> > I can do this with some ugly looking and probably inefficient loop.
> > However,
> > Ruby has so many tools and "tricks" that perhaps there might be some wa=

y
> > of
> > doing this quicker and easy to understand.
> >
> > Any help will be greatly appreciated!
> >
> > Thank you
> >
> > Victor

>
> Dear Victor,
>
> one nice feature of the Ruby list is its quiz contest.
> You can have a look at different solution proposals for solving
> Sudokus here:
>
>
> http://www.rubyquiz.com/quiz43.html
>
> Best regards,
>
> Axel
> --
> Der GMX SmartSurfer hilft bis zu 70% Ihrer Onlinekosten zu sparen!
> Ideal f=FCr Modem und ISDN: http://www.gmx.net/de/go/smartsurfer
>
>


 
Reply With Quote
 
Phrogz
Guest
Posts: n/a
 
      05-06-2008
On May 5, 1:06*pm, Victor Reyes <(E-Mail Removed)> wrote:
> Given a multidimensional array (9x9) I am trying to inspect each row and
> each column as follows:
> I can do this with some ugly looking and probably inefficient loop. However,
> Ruby has so many tools and "tricks" that perhaps there might be some way of
> doing this quicker and easy to understand.


I don't think there's any way to do this without looking at every
cell. I was a little confused by your massive amount of text, so I
assume you're saying that each cell has more than one number in it.
(As occurs when writing down possibilities.)

Following is a simple iteration that will go through every cell and,
in a single pass, update the count of instances of a particular digit
in each row and column. I've implemented the multiple-numbers-per-cell
as an array per cell. If you have a string...well, don't do that,
because it'd be silly.

Hope this helps you with some insight into Ruby. As I'm offering this
code up to a newbie to learn from, others please feel free to post
followups ripping it apart and suggesting better ways to accomplish
the same goals.

# Create a 9x9 array, where each cell is an empty array
cells = Array.new(9){
Array.new(9){ [] }
}

# Fill each cell with dummy data (not sudoku-ready)
# of zero or more integers
cells.each{ |row|
row.each{ |cell|
1.upto(9){ |i|
# 20% chance of each number in some cell leaves
# us with a 13% chance of no numbers per cell.
# There's thus a 99.999% chance that at least one
# cell will be left empty (if my math is correct)
cell << i if rand < 0.2
}
}
}

# Now run through all the cells and count numbers
nums_by_row = Array.new(9){ Hash.new(0) }
nums_by_col = Array.new(9){ Hash.new(0) }
cells.each_with_index{ |row, row_num|
row.each_with_index{ |cell, col_num|
cell.each{ |num|
nums_by_row[ row_num ][ num ] += 1
nums_by_col[ col_num ][ num ] += 1
}
}
}

# Following output hand-formatted for clarity
# Beware unfortunate line-wrapping

p cells
# [
# [[1,3,6,7,9], [2,9], [1,8], [1,4], [1,6], [1], [7], [2,3,5,9],
[8]],
# [[2,3], [], [6,7], [5], [4,5,6,7,8,9], [2,5], [2,3,4], [7,9], []],
# [[4], [3,4], [], [], [5,7], [1,2,5,6], [3,4], [2], [2,4,8]],
# [[2,5], [7], [3,5,6,8,9], [], [3,7], [1,5,8], [1,2,4], [2], [3]],
# [[4,5], [4,8], [6], [], [4], [], [9], [4,6], [7,8]],
# [[3,4,6,9], [6], [9], [4,7], [2,9], [2,3,5,9], [4], [2,5,9], [9]],
# [[8], [5], [2,7], [], [5], [6,7], [3,4,7,9], [4,5], [4,5,6]],
# [[7,9], [], [], [2], [7,8,9], [3,7,9], [], [], [6,7]],
# [[3], [5], [4,7], [1,2,5], [2,3,6,7,8], [1,3,5,8,9], [4,6], [],
[5]]
# ]

p nums_by_row
# [{1=>5, 2=>2, 3=>2, 4=>1, 5=>1, 6=>2, 7=>2, 8=>2, 9=>3},
# { 2=>3, 3=>2, 4=>2, 5=>3, 6=>2, 7=>3, 8=>1, 9=>2},
# {1=>1, 2=>3, 3=>2, 4=>4, 5=>2, 6=>1, 7=>1, 8=>1 },
# {1=>2, 2=>3, 3=>3, 4=>1, 5=>3, 6=>1, 7=>2, 8=>2, 9=>1},
# { 4=>4, 5=>1, 6=>2, 7=>1, 8=>2, 9=>1},
# { 2=>3, 3=>2, 4=>3, 5=>2, 6=>2, 7=>1, 9=>6},
# { 2=>1, 3=>1, 4=>3, 5=>4, 6=>2, 7=>3, 8=>1, 9=>1},
# { 2=>1, 3=>1, 6=>1, 7=>4, 8=>1, 9=>3},
# {1=>2, 2=>2, 3=>3, 4=>2, 5=>4, 6=>2, 7=>2, 8=>2, 9=>1}]

p nums_by_col
# [{1=>1, 2=>2, 3=>4, 4=>3, 5=>2, 6=>2, 7=>2, 8=>1, 9=>3},
# *{ 2=>1, 3=>1, 4=>2, 5=>2, 6=>1, 7=>1, 8=>1, 9=>1},
# *{1=>1, 2=>1, 3=>1, 4=>1, 5=>1, 6=>3, 7=>3, 8=>2, 9=>2},
# *{1=>2, 2=>2, 4=>2, 5=>2, 7=>1 },
# *{1=>1, 2=>2, 3=>2, 4=>2, 5=>3, 6=>3, 7=>5, 8=>3, 9=>3},
# *{1=>4, 2=>3, 3=>3, 5=>5, 6=>2, 7=>2, 8=>2, 9=>3},
# *{1=>1, 2=>2, 3=>3, 4=>6, 6=>1, 7=>2, 9=>2},
# *{2=>4, 3=>1, 4=>2, 5=>3, 6=>1, 7=>1, 9=>3},
# *{2=>1, 3=>1, 4=>2, 5=>2, 6=>2, 7=>2, 8=>3, 9=>1}]
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
const and array of array (of array ...) Mara Guida C Programming 3 09-03-2009 07:54 AM
length of an array in a struct in an array of structs in a struct in an array of structs Tuan Bui Perl Misc 14 07-29-2005 02:39 PM
Length of Array of Array of Array Tom Perl Misc 3 12-20-2004 05:23 PM
[help] How to copy fast an array to another array? stelladiary2004@hotmail.com C++ 4 08-13-2004 01:48 AM
help generating an array of array with malloc or calloc Eric Boutin C Programming 7 12-01-2003 02:29 PM



Advertisments