Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

functional programming: sort to shuffle

by stefp (Vicar)
on Sep 03, 2001 at 13:24 UTC ( [id://109836]=obfuscated: print w/replies, xml ) Need Help??

It shuffles the parameters list:
sub shuffle { map { @_=sort { int (3*rand)-1 } @_ } 0..5 }
Note that I go thru 6 iterations to get "sufficient" disorder.

see Why I like functional programming by tilly.

-- stefp

Replies are listed 'Best First'.
Re: sort to shuffle
by demerphq (Chancellor) on Sep 03, 2001 at 15:06 UTC
    Cool idea. stefp++.
    Curious if sort could get into a 'never finish' scenario if the right values came up from rand though?
    Thought you might like this version of the fisher yates shuffle.
    sub fy_shuf{my($l,$c,$r)=@_;map{$r=int(rand($_+1)); @$l[$_,$r]=@$l[$r,$_]}reverse 0..$#$l for 0..$c||0}; my @a=(1..52); fy_shuf(\@a,5);
    UPDATE
    Having had a look at japhy home node I borrowed an idea from him and reduced it more. (Oh and I decided that shuffling mutiple times was unecessary.)
    sub fy_shuf{my($l,$r)=@_;map{$r=int(rand(@$l-$_+1));@$l[-$_,$r]=@$l[$r +,-$_]}0..$#$l};

    Yves
    --
    You are not ready to use symrefs unless you already know why they are bad. -- tadmc (CLPM)

      It really depends on the internal sort algorithm. The "never finish" scenario is not the worse possible one: on some old versions of perl, my shuffle function crashes the perl interpretor :)

      That is why this really belongs to the obfuscation category... to answer a remark on the CB.

      Anyway, on 5.6, it works fine and dandy.

      -- stefp

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: obfuscated [id://109836]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2025-06-25 08:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.