あれ~ぇ! カードの並び順を反転しているのに、、、
!反転操作によるブロック移動
LET N=15 !枚数
DIM A(N) !カードの並び
PRINT "2分割の場合"
FOR i=1 TO N !整列
LET A(i)=i
NEXT i
MAT PRINT A;
LET p=5 !位置
CALL reverse(A,1,p-1) !前半部分のみ
MAT PRINT A;
CALL reverse(A,p,N) !後半部分のみ
MAT PRINT A;
CALL reverse(A,1,N) !全体で
MAT PRINT A;
PRINT
PRINT "3分割の場合"
FOR i=1 TO N !整列
LET A(i)=i
NEXT i
MAT PRINT A;
LET p=7 !位置
LET q=12
CALL reverse(A,1,p-1) !前半部分のみ
MAT PRINT A;
CALL reverse(A,p,q-1) !中央部分のみ
MAT PRINT A;
CALL reverse(A,q,N) !後半部分のみ
MAT PRINT A;
CALL reverse(A,1,N) !全体で
MAT PRINT A;
END
EXTERNAL SUB reverse(A(),L,R) !指定された範囲の並びを逆順にする
LET i=L !左端
LET j=R !右端
DO WHILE i<j !交換位置は半分まで ※全部すると元に戻る
LET t=A(i) !swap it
LET A(i)=A(j)
LET A(j)=t
LET i=i+1 !次へ
LET j=j-1
LOOP
END SUB