36 lines
920 B
Text
36 lines
920 B
Text
proc Shuffle(Array, Items, BytesPerItem);
|
|
int Array, Items, BytesPerItem;
|
|
int I, J;
|
|
char Temp(8);
|
|
[for I:= Items-1 downto 1 do
|
|
[J:= Ran(I+1); \range [0..I]
|
|
CopyMem(Temp, Array+I*BytesPerItem, BytesPerItem);
|
|
CopyMem(Array+I*BytesPerItem, Array+J*BytesPerItem, BytesPerItem);
|
|
CopyMem(Array+J*BytesPerItem, Temp, BytesPerItem);
|
|
];
|
|
];
|
|
|
|
string 0; \use zero-terminated strings
|
|
int A; char B; real C;
|
|
int I;
|
|
[A:= [1, 2, 3, 4, 5];
|
|
Shuffle(A, 5, 4 \bytes per int\);
|
|
for I:= 0 to 5-1 do
|
|
[IntOut(0, A(I)); ChOut(0, ^ )];
|
|
CrLf(0);
|
|
B:= "12345";
|
|
Shuffle(B, 5, 1 \byte per char\);
|
|
for I:= 0 to 5-1 do
|
|
[ChOut(0, B(I)); ChOut(0, ^ )];
|
|
CrLf(0);
|
|
C:= [1., 2., 3., 4., 5.];
|
|
Shuffle(addr C(0), 5, 8 \bytes per real\);
|
|
for I:= 0 to 5-1 do
|
|
[RlOut(0, C(I)); ChOut(0, ^ )];
|
|
CrLf(0);
|
|
A:= [10];
|
|
Shuffle(A, 1, 4 \bytes per int\);
|
|
for I:= 0 to 1-1 do
|
|
[IntOut(0, A(I)); ChOut(0, ^ )];
|
|
CrLf(0);
|
|
]
|