45 lines
1.0 KiB
Plaintext
45 lines
1.0 KiB
Plaintext
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
|