Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re: Table shuffling challenge

by protist (Monk)
on Aug 23, 2013 at 20:48 UTC ( #1050733=note: print w/replies, xml ) Need Help??

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

    Ah just noticed you need to do this UNTIL EMPTY.

    My method could be inefficient then as it may take

    forever to guess the last few indices. There are

    many other approaches, but I am going to lunch soon. :D

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1050733]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2018-06-18 23:31 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (111 votes). Check out past polls.