Knuth shuffle: Difference between revisions
Content added Content deleted
m (→{{header|QB64}}: syntax hi-lighting, sub-headered) |
m (→{{header|BASIC}}: alphabetized subheaders) |
||
Line 1,087: | Line 1,087: | ||
<pre>20 5 6 9 15 23 22 8 4 24 7 11 16 21 2 17 |
<pre>20 5 6 9 15 23 22 8 4 24 7 11 16 21 2 17 |
||
14 10 19 13 12 18 1 3 25</pre> |
14 10 19 13 12 18 1 3 25</pre> |
||
==={{header|BBC BASIC}}=== |
|||
<lang bbcbasic> cards% = 52 |
|||
DIM pack%(cards%) |
|||
FOR I% = 1 TO cards% |
|||
pack%(I%) = I% |
|||
NEXT I% |
|||
FOR N% = cards% TO 2 STEP -1 |
|||
SWAP pack%(N%),pack%(RND(N%)) |
|||
NEXT N% |
|||
FOR I% = 1 TO cards% |
|||
PRINT pack%(I%); |
|||
NEXT I% |
|||
PRINT</lang> |
|||
==={{header|IS-BASIC}}=== |
|||
<lang IS-BASIC>100 PROGRAM "Shuffle.bas" |
|||
110 RANDOMIZE |
|||
120 NUMERIC ARRAY(1 TO 20) |
|||
130 CALL INIT(ARRAY) |
|||
140 CALL WRITE(ARRAY) |
|||
150 CALL SHUFFLE(ARRAY) |
|||
160 CALL WRITE(ARRAY) |
|||
170 DEF INIT(REF A) |
|||
180 FOR I=LBOUND(A) TO UBOUND(A) |
|||
190 LET A(I)=I |
|||
200 NEXT |
|||
210 END DEF |
|||
220 DEF WRITE(REF A) |
|||
230 FOR I=LBOUND(A) TO UBOUND(A) |
|||
240 PRINT A(I); |
|||
250 NEXT |
|||
260 PRINT |
|||
270 END DEF |
|||
280 DEF SHUFFLE(REF A) |
|||
290 FOR I=UBOUND(A) TO LBOUND(A) STEP-1 |
|||
300 LET CARD=RND(UBOUND(A)-LBOUND(A))+LBOUND(A)+1 |
|||
310 IF CARD<>I THEN LET T=A(CARD):LET A(CARD)=A(I):LET A(I)=T |
|||
320 NEXT |
|||
330 END DEF</lang> |
|||
==={{header|OxygenBasic}}=== |
==={{header|OxygenBasic}}=== |
||
Line 1,101: | Line 1,141: | ||
next |
next |
||
</lang> |
</lang> |
||
==={{header|QB64}}=== |
|||
Shuffle and make sure that number does not take its place<br/> |
|||
and between cells at least 10% ... Shuffle from Russia |
|||
<lang qbasic> |
|||
a = 100: DIM d(a): x=0: k=0: t$=CHR$(9): RANDOMIZE TIMER 'Shuffle_RUS.bas |
|||
PRINT ,: FOR i = 1 TO a: d(i)=i: NEXT |
|||
FOR i = 1 TO 5: PRINT d(i);: NEXT: PRINT , |
|||
FOR i = a-3 TO a: PRINT d(i);: NEXT: z = TIMER |
|||
OPEN "b:/control.txt" FOR OUTPUT AS #1 ' ram disk |
|||
WHILE x < 1 |
|||
v = 0: FOR i = 1 TO a |
|||
1 m = INT(RND*a)+1: IF ABS(d(i)-d(m)) < .1*a THEN v = v+1: GOTO 1 |
|||
PRINT #1, ABS(d(i)-d(m)); t$; d(i); t$; d(m); t$; i; t$; m; t$; d(i)/d(m); t$; d(m)/d(i) ' ram disk |
|||
t = d(i): d(i) = d(m): d(m) = t |
|||
NEXT |
|||
s = 0: FOR i = 1 TO a |
|||
IF d(i) = i THEN s = s+1 ' : goto 5 |
|||
NEXT |
|||
5 k = k+1: PRINT: PRINT s; v,: IF s=0 THEN x = x+1 |
|||
FOR i = 1 TO 5 |
|||
IF d(i) = i THEN PRINT -d(i); ELSE PRINT d(i); |
|||
NEXT: PRINT , |
|||
FOR i = a-3 TO a |
|||
IF d(i) = i THEN PRINT -d(i); ELSE PRINT d(i); |
|||
NEXT |
|||
WEND: PRINT: PRINT " = "; k, TIMER-z: END</lang> |
|||
==={{header|Sinclair ZX81 BASIC}}=== |
==={{header|Sinclair ZX81 BASIC}}=== |
||
Line 1,156: | Line 1,225: | ||
{{out}} |
{{out}} |
||
<pre>Same as BASIC entry.</pre> |
<pre>Same as BASIC entry.</pre> |
||
==={{header|BBC BASIC}}=== |
|||
<lang bbcbasic> cards% = 52 |
|||
DIM pack%(cards%) |
|||
FOR I% = 1 TO cards% |
|||
pack%(I%) = I% |
|||
NEXT I% |
|||
FOR N% = cards% TO 2 STEP -1 |
|||
SWAP pack%(N%),pack%(RND(N%)) |
|||
NEXT N% |
|||
FOR I% = 1 TO cards% |
|||
PRINT pack%(I%); |
|||
NEXT I% |
|||
PRINT</lang> |
|||
==={{header|IS-BASIC}}=== |
|||
<lang IS-BASIC>100 PROGRAM "Shuffle.bas" |
|||
110 RANDOMIZE |
|||
120 NUMERIC ARRAY(1 TO 20) |
|||
130 CALL INIT(ARRAY) |
|||
140 CALL WRITE(ARRAY) |
|||
150 CALL SHUFFLE(ARRAY) |
|||
160 CALL WRITE(ARRAY) |
|||
170 DEF INIT(REF A) |
|||
180 FOR I=LBOUND(A) TO UBOUND(A) |
|||
190 LET A(I)=I |
|||
200 NEXT |
|||
210 END DEF |
|||
220 DEF WRITE(REF A) |
|||
230 FOR I=LBOUND(A) TO UBOUND(A) |
|||
240 PRINT A(I); |
|||
250 NEXT |
|||
260 PRINT |
|||
270 END DEF |
|||
280 DEF SHUFFLE(REF A) |
|||
290 FOR I=UBOUND(A) TO LBOUND(A) STEP-1 |
|||
300 LET CARD=RND(UBOUND(A)-LBOUND(A))+LBOUND(A)+1 |
|||
310 IF CARD<>I THEN LET T=A(CARD):LET A(CARD)=A(I):LET A(I)=T |
|||
320 NEXT |
|||
330 END DEF</lang> |
|||
==={{header|QB64}}=== |
|||
shuffle and make sure that number does not take its place<br/> |
|||
and between cells at least 10% ... Shuffle from Russia |
|||
<lang qbasic> |
|||
a = 100: DIM d(a): x=0: k=0: t$=CHR$(9): RANDOMIZE TIMER 'Shuffle_RUS.bas |
|||
PRINT ,: FOR i = 1 TO a: d(i)=i: NEXT |
|||
FOR i = 1 TO 5: PRINT d(i);: NEXT: PRINT , |
|||
FOR i = a-3 TO a: PRINT d(i);: NEXT: z = TIMER |
|||
OPEN "b:/control.txt" FOR OUTPUT AS #1 ' ram disk |
|||
WHILE x < 1 |
|||
v = 0: FOR i = 1 TO a |
|||
1 m = INT(RND*a)+1: IF ABS(d(i)-d(m)) < .1*a THEN v = v+1: GOTO 1 |
|||
PRINT #1, ABS(d(i)-d(m)); t$; d(i); t$; d(m); t$; i; t$; m; t$; d(i)/d(m); t$; d(m)/d(i) ' ram disk |
|||
t = d(i): d(i) = d(m): d(m) = t |
|||
NEXT |
|||
s = 0: FOR i = 1 TO a |
|||
IF d(i) = i THEN s = s+1 ' : goto 5 |
|||
NEXT |
|||
5 k = k+1: PRINT: PRINT s; v,: IF s=0 THEN x = x+1 |
|||
FOR i = 1 TO 5 |
|||
IF d(i) = i THEN PRINT -d(i); ELSE PRINT d(i); |
|||
NEXT: PRINT , |
|||
FOR i = a-3 TO a |
|||
IF d(i) = i THEN PRINT -d(i); ELSE PRINT d(i); |
|||
NEXT |
|||
WEND: PRINT: PRINT " = "; k, TIMER-z: END</lang> |
|||
=={{header|bc}}== |
=={{header|bc}}== |