73 lines
883 B
Plaintext
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
|