Perfect shuffle: Difference between revisions
Content added Content deleted
(add FreeBASIC) |
|||
Line 1,031: | Line 1,031: | ||
1024 | 10 |
1024 | 10 |
||
10000 | 300 |
10000 | 300 |
||
</pre> |
|||
=={{header|FreeBASIC}}== |
|||
<lang freebasic>function is_in_order( d() as uinteger ) as boolean |
|||
'tests if a deck is in order |
|||
for i as uinteger = lbound(d) to ubound(d)-1 |
|||
if d(i) > d(i+1) then return false |
|||
next i |
|||
return true |
|||
end function |
|||
sub init_deck( d() as uinteger ) |
|||
for i as uinteger = 1 to ubound(d) |
|||
d(i) = i |
|||
next i |
|||
return |
|||
end sub |
|||
sub shuffle( d() as uinteger ) |
|||
'does a faro shuffle of the deck |
|||
dim as integer n = ubound(d), i |
|||
dim as integer b( 1 to n ) |
|||
for i = 1 to n/2 |
|||
b(2*i-1) = d(i) |
|||
b(2*i) = d(n/2+i) |
|||
next i |
|||
for i = 1 to n |
|||
d(i) = b(i) |
|||
next i |
|||
return |
|||
end sub |
|||
function shufs_needed( size as integer ) as uinteger |
|||
dim as uinteger d(1 to size), s = 0 |
|||
init_deck(d()) |
|||
do |
|||
shuffle(d()) |
|||
s+=1 |
|||
if is_in_order(d()) then exit do |
|||
loop |
|||
return s |
|||
end function |
|||
dim as uinteger tests(1 to 7) = {8, 24, 52, 100, 1020, 1024, 10000}, i |
|||
for i = 1 to 7 |
|||
print tests(i);" cards require "; shufs_needed(tests(i)); " shuffles." |
|||
next i</lang> |
|||
{{out}}<pre> |
|||
8 cards require 3 shuffles. |
|||
24 cards require 11 shuffles. |
|||
52 cards require 8 shuffles. |
|||
100 cards require 30 shuffles. |
|||
1020 cards require 1018 shuffles. |
|||
1024 cards require 10 shuffles. |
|||
10000 cards require 300 shuffles. |
|||
</pre> |
</pre> |
||