in reply to Table shuffling challenge
I would advise to avoid actually removing elements.
Instead have multidimensional hash of column and row.
You can use this multidimensional hash to record
whether a given index has already been supplied before.
Note the use of a closure to make the function stateful.
That is the reason for the reset_hash function.
You must be able to reset the hash for another run.
## just a sketch my %columns; ## to associate columns with ## column numbers # ## $columns{1} should return ## a reference to the ## first column list { ## closure cleanliness my $seen; ## keeps track of what we have seen ## used to reset hash within closure between runs sub reset_hash{ undef $seen } ##function expects column number sub find_and_dont_actually_remove_but_say_we_did{ my $column_number = shift; my $column = $columns{$column_number}; ## keeping as a referen +ce to ## avoid obscene copy-p +asta my $rand; until (not $seen->{$column_number}->{$rand = int(rand(@$column +))}){ ## nothing to see here } $seen->{$column_number}->{$rand} = "looks familiar"; return $column->[$rand] } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Table shuffling challenge
by protist (Monk) on Aug 23, 2013 at 21:02 UTC |
In Section
Seekers of Perl Wisdom