RosettaCodeData/Task/Dutch-national-flag-problem/ANSI-BASIC/dutch-national-flag-problem.basic
2026-04-30 12:34:36 -04:00

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