Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

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 cooling their heels in the Monastery: (4)
As of 2016-12-10 22:50 GMT
Find Nodes?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:

    Results (165 votes). Check out past polls.