RosettaCodeData/Task/Dutch-national-flag-problem/Action-/dutch-national-flag-problem.action
2023-07-01 13:44:08 -04:00

58 lines
885 B
Text

INCLUDE "D2:SORT.ACT" ;from the Action! Tool Kit
PROC PrintArray(BYTE ARRAY a BYTE len)
CHAR ARRAY colors(3)=['R 'W 'B]
BYTE i,index
FOR i=0 TO len-1
DO
index=a(i)
Put(colors(index))
OD
RETURN
BYTE FUNC IsSorted(BYTE ARRAY a BYTE len)
BYTE i
IF len<=1 THEN
RETURN (1)
FI
FOR i=0 TO len-2
DO
IF a(i)>a(i+1) THEN
RETURN (0)
FI
OD
RETURN (1)
PROC Randomize(BYTE ARRAY a BYTE len)
BYTE i
FOR i=0 TO len-1
DO
a(i)=Rand(3)
OD
RETURN
PROC Main()
DEFINE SIZE="30"
BYTE ARRAY a(SIZE)
Put(125) PutE() ;clear the screen
DO
Randomize(a,SIZE)
UNTIL IsSorted(a,SIZE)=0
OD
PrintE("Unsorted:") PrintArray(a,SIZE)
PutE() PutE()
SortB(a,SIZE,0)
PrintE("Sorted:") PrintArray(a,SIZE)
PutE() PutE()
IF IsSorted(a,SIZE) THEN
PrintE("Sorting is valid")
ELSE
PrintE("Sorting is invalid!")
FI
RETURN