Mind boggling card trick: Difference between revisions

Line 769:
</pre>
 
 
=={{header|Phix}}==
<lang Phix>constant n = 52,
pack = shuffle(repeat('r',n/2)&repeat('b',n/2))
string {black, red, discard} @= ""
for i=1 to length(pack) by 2 do
integer {top,next} = pack[i..i+1]
if top=='b' then
black &= next
else
red &= next
end if
discard &= top
end for
black = shuffle(black); red = shuffle(red) -- (optional)
--printf(1,"Discards : %s\n",{discard})
 
printf(1,"Reds : %s\nBlacks : %s\n\n",{red,black})
 
integer lb = length(black), lr = length(red),
ns = rand(min(lb,lr))
printf(1,"Swap %d cards:\n\n", ns)
{black[1..ns],red[1..ns]} = {red[1..ns],black[1..ns]}
 
printf(1,"Reds : %s\nBlacks : %s\n\n",{red,black})
integer nb = sum(sq_eq(black,'b')),
nr = sum(sq_eq(red,'r'))
string correct = iff(nr==nb?"correct":"**INCORRECT**")
printf(1,"%d r in red, %d b in black - assertion %s\n",{nr,nb,correct})</lang>
{{out}}
<pre>
Reds : brrbrrrrbrbr
Blacks : brrrbbbrbbbbrr
 
Swap 5 cards:
 
Reds : brrrbrrrbrbr
Blacks : brrbrbbrbbbbrr
 
8 r in red, 8 b in black - assertion correct
</pre>
 
=={{header|Perl}}==
7,818

edits