Hi,
The better way to shuffling an array is to reduce its length if the value is selected...
Only 5 loops to get a string.
Have a look to :
https://www.sinclairzxworld.com/viewtop ... 938#p47938
The int(RND*5)+1, and put a space on the value, was a very bad purpose and loop many time on the same value !
RND=1,2,2,5,1,1,5,3,2,1,3,1,3,3,4 ( 15 times )
This purpose only chose unselected values: 4,2,3,1,5 ( 5 times )
Code: Select all
100 LET P=6
110 LET CN=0
112 LET T=13*P
115 DIM C(T)
120 FOR N=1 TO T
150 LET C(N)=N
170 NEXT N
7000 LET V=INT ((RND*T)+1)
7010 LET CN=CN+1
7050 LET R=C(V)
7100 IF V<>T THEN LET C(V)=C(T)
7110 LET T=T-1
7120 PRINT R;";";
7130 IF T<>0 THEN GOTO 7000
7200 PRINT "END OF ";CN;" VALUES"
Strings: (about 3 seconds for 5 values)
Code: Select all
10 LET S$=""
20 LET A$="12345"
23 LET L=LEN A$
26 LET B$=A$
30 LET T=L+1
40 LET T=T-1
50 LET X=INT (RND*T)+1
60 LET S$=S$+B$(X)
65 IF X=1 THEN LET B$=B$(X+1 TO)
70 IF X=L THEN LET B$=B$(1 TO X-1)
80 IF X>1 AND X<L THEN LET B$=B$(1 TO X-1)+B$(X+1 TO)
90 IF T>1 THEN GOTO 40
100 PRINT "VALUE : ";S$
(about 6 seconds for 20 values)
20 LET A$="12345678901234567890"
(about 12 seconds for 40 values)
(about 24 seconds for 80 values...)
... in slow mode ...
But no more wasted loop !
With a ramdom value, it will take between 40 and 60 seconds per shuffling process.