59 lines
1.2 KiB
Text
59 lines
1.2 KiB
Text
100 REM Dutch national flag problem
|
|
110 DECLARE EXTERNAL SUB PrintColorSeq
|
|
120 DECLARE EXTERNAL SUB SortByColor
|
|
130 REM 0: blue, 1: while, 2: red
|
|
140 DIM T(0 TO 19)
|
|
150 LET UP = UBOUND(T)
|
|
160 REM Set colors
|
|
170 RANDOMIZE
|
|
180 FOR I = 0 TO UP
|
|
190 LET T(I) = INT(RND * 3)
|
|
200 NEXT I
|
|
210 PRINT "Unsorted:"
|
|
220 CALL PrintColorSeq(T)
|
|
230 CALL SortByColor(T)
|
|
240 PRINT
|
|
250 PRINT "Sorted:"
|
|
260 CALL PrintColorSeq(T)
|
|
270 END
|
|
280 !
|
|
290 EXTERNAL SUB PrintColorSeq (T())
|
|
300 FOR I = 0 TO UBOUND(T)
|
|
310 SELECT CASE T(I)
|
|
320 CASE 0
|
|
330 PRINT "B";
|
|
340 CASE 1
|
|
350 PRINT "W";
|
|
360 CASE 2
|
|
370 PRINT "R";
|
|
380 END SELECT
|
|
390 NEXT I
|
|
400 PRINT
|
|
410 END SUB
|
|
420 !
|
|
430 EXTERNAL SUB SortByColor (T())
|
|
440 DECLARE EXTERNAL SUB Swap
|
|
450 LET B = 0
|
|
460 LET W = 0
|
|
470 LET R = UBOUND(T)
|
|
480 DO WHILE W <= R
|
|
490 SELECT CASE T(W)
|
|
500 CASE 1
|
|
510 LET W = W + 1
|
|
520 CASE 0
|
|
530 CALL Swap(T(B), T(W))
|
|
540 LET B = B + 1
|
|
550 LET W = W + 1
|
|
560 CASE 2
|
|
570 call Swap(T(W), T(R))
|
|
580 LET R = R - 1
|
|
590 END SELECT
|
|
600 LOOP
|
|
610 END SUB
|
|
620 !
|
|
630 EXTERNAL SUB Swap(A, B)
|
|
640 REM Some implementations have the SWAP statement, but it is not standard
|
|
650 LET Tmp = A
|
|
660 LET A = B
|
|
670 LET B = Tmp
|
|
680 END SUB
|