Card shuffles: Difference between revisions

GP
m (A little more clarification on the riffle method)
(GP)
Line 309:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[18, 12, 13, 14, 2, 3, 15, 5, 9, 19, 7, 11, 1, 6, 4, 20, 16, 17, 10, 8]</pre>
 
=={{header|PARI/GP}}==
Riffle shuffle:
<lang parigp>riffle(v)=
{
my(n=#v,k,t,deck=vector(n),left,right);
t=random(2^n);
for(i=0,n,
t -= binomial(n,i);
if(t<0, k=i; break)
);
if(k==0||k==n, return(v));
left=k;
right=n-k;
deck=vector(n,i,
t=random(n+1-i);
v[if(t<left, k-left--, n-right--)]
);
vecextract(v, deck);
}
addhelp(riffle, "riffle(v): Riffle shuffles the vector v, following the Gilbert-Shannon-Reeds model.");</lang>
 
Overhand shuffle:
<lang parigp>overhand(v)=
{
my(u=[],t,n=2*#v\5);
while(#v,
t=min(random(n)+1,#v);
u=concat(v[1..t],u);
v=if(t<#v,v[t+1..#v],[]);
);
u;
}
addhelp(overhand, "overhand(v): Overhand shuffles the vector v.");</lang>
 
Usage:
<lang parigp>riffle([1..52])
overhand([1..52])</lang>
{{out}}
<pre>%1 = [1, 2, 3, 21, 4, 22, 23, 5, 24, 25, 26, 6, 27, 28, 29, 30, 7, 31, 32, 33, 34, 35, 36, 8, 37, 38, 39, 40, 9, 10, 11, 12, 41, 42, 43, 13, 44, 45, 14, 46, 47, 48, 15, 16, 17, 49, 50, 18, 51, 19, 20, 52]
%2 = [44, 45, 46, 47, 48, 49, 50, 51, 52, 43, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 23, 24, 25, 26, 27, 28, 29, 30, 31, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 1, 2, 3, 4]</pre>
 
=={{header|Racket}}==