RosettaCodeData/Task/Balanced-brackets/Action-/balanced-brackets.action

73 lines
883 B
Plaintext

PROC Generate(BYTE size CHAR ARRAY s)
BYTE i,half
s(0)=size
half=size RSH 1
FOR i=1 TO half
DO s(i)='[ OD
FOR i=half+1 TO size
DO s(i)='] OD
RETURN
PROC Shuffle(CHAR ARRAY s)
BYTE i,j,k,n,len,tmp
len=s(0)
n=Rand(len+1)
FOR k=1 TO n
DO
i=Rand(len)+1
j=Rand(len)+1
tmp=s(i)
s(i)=s(j)
s(j)=tmp
OD
RETURN
BYTE FUNC Balanced(CHAR ARRAY s)
INT i,lev
lev=0
FOR i=1 TO s(0)
DO
IF s(i)='[ THEN
lev==+1
ELSE
lev==-1
FI
IF lev<0 THEN
RETURN (0)
FI
OD
IF lev#0 THEN
RETURN (0)
FI
RETURN (1)
PROC Main()
CHAR ARRAY s(20)
BYTE i,b
FOR i=0 TO 20 STEP 2
DO
Generate(i,s)
Shuffle(s)
b=Balanced(s)
IF s(0)=0 THEN
Print("(empty)")
ELSE
Print(s)
FI
Print(" is ")
IF b=0 THEN
Print("not ")
FI
PrintE("balanced")
OD
RETURN