Hi Team,
First, thank you for all your replies. I truly appreciate each and everyone
of them!
Generally speaking I have problems explaining in writing an idea or what I
intent to do.
But, let me try to explain what I would like to do.
I am trying to implement a sudoku algorithm.
Given an initial set of values which I represent as the following example:
@ga = [
[0,0,0,0,1,9,0,4,0],
[0,0,4,8,0,0,6,0,0],
[7,5,0,0,0,0,0,0,2],
[0,9,0,1,0,2,0,0,4],
[0,0,0,0,0,3,0,0,0],
[5,0,0,4,0,6,0,3,0],
[8,0,0,0,0,0,0,7,3],
[0,0,6,0,0,8,4,0,0],
[0,1,0,2,9,0,0,0,0]
]
I use the above array to propagate the given values to a "master" array
which contains ALL the ORIGINAL valid and possible entries for a location.
At the start all numbers from 1..9:
@aa = [
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789],
[123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789,123456789]
]
But I don't want to propagate the zeroes (0) from the given array. I use
zeroes (0) for convenience only.
So, for instance, from the given array please notice that there is a one (1)
at location @ga = [0][4].
Knowing the index of that non-zero value (1 in this case) I would then use
the same index on the so called master array to place the 1.
I will then proceed to eliminate all the ones (1) from the same row and
column, since, as I am sure you know, the rule of sudoku only allows a
particular number once in a given row and column.
Well, that's why I need the index, so I can a bit easier manipulate the
arrays and their contents.
Again, thank you for all your help.
Victor
···
On Tue, Apr 29, 2008 at 4:37 PM, David A. Black <dblack@rubypal.com> wrote:
Hi --
On Wed, 30 Apr 2008, Siep Korteling wrote:
Rob Biedenharn wrote:
>
> > On Apr 29, 2008, at 3:46 PM, Victor Reyes wrote:
> >
> > [5,0,0,4,0,6,0,3,0],
> > > # Output: 0 0 0 0 1 9 0 4 0
> > > puts
> > > nonzeroIndex
> > > #
> > > Output: *nil*
> > >
> > > Any help will be greatly appreciated, as usual!
> > >
> > > Thank you
> > >
> > > Victor
> > >
> >
> >
> >
> > > require 'code/ruby/ext/enumerable.rb'
> > => true
> > > @ga[0]
> > => [0, 0, 0, 0, 1, 9, 0, 4, 0]
> > > @ga[0].map_with_index {|e,i| e.zero? ? nil : i}
> > => [nil, nil, nil, nil, 4, 5, nil, 7, nil]
> > > @ga[0].map_with_index {|e,i| e.zero? ? nil : i}.compact
> > => [4, 5, 7]
> >
> > Then you just need Enumerable#map_with_index
> >
> > module Enumerable
> > # Like each_with_index, but the value is the array of block results.
> > def map_with_index
> > a =
> > each_with_index { |e,i| a << yield(e, i) }
> > a
> > end
> > end
> >
> > -Rob
> >
> > Rob Biedenharn http://agileconsultingllc.com
> > Rob@AgileConsultingLLC.com
> >
>
> It works without the 'require' here.(VERSION=1.8.6). I like the
> map_with_index method (new for me), but isn't it overkill here?
>
> @ga.each do |sub_arr|
> sub_arr.each_with_index do |value,index|
> print index.to_s + " " unless value == 0
> end
> puts
> end
>
If all you need is side-effects, like printing, then you can used
#each (with_ or without index). #map_with_index, like #map itself,
returns a second collection.
David
--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!