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