37 lines
1.2 KiB
Text
37 lines
1.2 KiB
Text
code ChOut=8, CrLf=9, IntOut=11;
|
|
int N, Max, Card1(16), Card2(16);
|
|
|
|
proc Topswop(D); \Conway's card swopping game
|
|
int D; \depth of recursion
|
|
int I, J, C, T;
|
|
[if D # N then \generate N! permutations of 1..N in Card1
|
|
[for I:= 0 to N-1 do
|
|
[for J:= 0 to D-1 do \check if object (letter) already used
|
|
if Card1(J) = I+1 then J:=100;
|
|
if J < 100 then
|
|
[Card1(D):= I+1; \card number not used so append it
|
|
Topswop(D+1); \recurse next level deeper
|
|
];
|
|
];
|
|
]
|
|
else [\determine number of topswops to get card 1 at beginning
|
|
for I:= 0 to N-1 do Card2(I):= Card1(I); \make working copy of deck
|
|
C:= 0; \initialize swop counter
|
|
while Card2(0) # 1 do
|
|
[I:= 0; J:= Card2(0)-1;
|
|
while I < J do
|
|
[T:= Card2(I); Card2(I):= Card2(J); Card2(J):= T;
|
|
I:= I+1; J:= J-1;
|
|
];
|
|
C:= C+1;
|
|
];
|
|
if C>Max then Max:= C;
|
|
];
|
|
];
|
|
|
|
[for N:= 1 to 10 do
|
|
[Max:= 0;
|
|
Topswop(0);
|
|
IntOut(0, N); ChOut(0, ^ ); IntOut(0, Max); CrLf(0);
|
|
];
|
|
]
|