57 lines
1,019 B
Text
57 lines
1,019 B
Text
' Dutch national flag problem
|
|
DECLARE SUB PrintColorSeq (T() AS INTEGER)
|
|
DECLARE SUB SortByColor (T() AS INTEGER)
|
|
|
|
CONST CBLUE% = 0, CWHITE% = 1, CRED% = 2
|
|
CONST N% = 20
|
|
DIM T(0 TO N% - 1) AS INTEGER
|
|
DIM I AS INTEGER
|
|
|
|
' Set colors
|
|
RANDOMIZE TIMER
|
|
FOR I = 0 TO N% - 1
|
|
T(I) = INT(RND * 3)
|
|
NEXT I
|
|
|
|
PRINT "Unsorted:"
|
|
CALL PrintColorSeq(T())
|
|
CALL SortByColor(T())
|
|
PRINT
|
|
PRINT "Sorted:"
|
|
CALL PrintColorSeq(T())
|
|
END
|
|
|
|
SUB PrintColorSeq (T() AS INTEGER)
|
|
DIM I AS INTEGER
|
|
FOR I = 0 TO UBOUND(T)
|
|
SELECT CASE T(I)
|
|
CASE CBLUE%
|
|
PRINT "B";
|
|
CASE CWHITE%
|
|
PRINT "W";
|
|
CASE CRED%
|
|
PRINT "R";
|
|
END SELECT
|
|
NEXT I
|
|
PRINT
|
|
END SUB
|
|
|
|
SUB SortByColor (T() AS INTEGER)
|
|
DIM B AS INTEGER, W AS INTEGER, R AS INTEGER
|
|
B = 0
|
|
W = 0
|
|
R = UBOUND(T)
|
|
DO WHILE W <= R
|
|
SELECT CASE T(W)
|
|
CASE CWHITE%
|
|
W = W + 1
|
|
CASE CBLUE%
|
|
SWAP T(B), T(W)
|
|
B = B + 1
|
|
W = W + 1
|
|
CASE CRED%
|
|
SWAP T(W), T(R)
|
|
R = R - 1
|
|
END SELECT
|
|
LOOP
|
|
END SUB
|