52 lines
1.3 KiB
Plaintext
52 lines
1.3 KiB
Plaintext
% This program needs the random number generator from
|
|
% "misc.lib" that comes with PCLU.
|
|
|
|
shuffle = proc [T: type] (a: array[t])
|
|
aT = array[t]
|
|
for i: int in int$from_to_by(aT$size(a)-1,0,-1) do
|
|
x: int := aT$low(a) + i
|
|
y: int := aT$low(a) + random$next(i+1)
|
|
temp: T := a[x]
|
|
a[x] := a[y]
|
|
a[y] := temp
|
|
end
|
|
end shuffle
|
|
|
|
brackets = proc (n: int) returns (string)
|
|
br: array[char] := array[char]$[]
|
|
for i: int in int$from_to(1,2*n) do
|
|
if i<=n then array[char]$addh(br, '[')
|
|
else array[char]$addh(br, ']')
|
|
end
|
|
end
|
|
shuffle[char](br)
|
|
return(string$ac2s(br))
|
|
end brackets
|
|
|
|
balanced = proc (br: string) returns (bool)
|
|
depth: int := 0
|
|
for c: char in string$chars(br) do
|
|
if c='[' then depth := depth + 1
|
|
elseif c=']' then depth := depth - 1
|
|
end
|
|
if depth<0 then return(false) end
|
|
end
|
|
return(depth = 0)
|
|
end balanced
|
|
|
|
start_up = proc ()
|
|
po: stream := stream$primary_output()
|
|
d: date := now()
|
|
random$seed(d.second + 60*(d.minute + 60*d.hour))
|
|
|
|
for size: int in int$from_to(0, 10) do
|
|
b: string := brackets(size)
|
|
stream$puts(po, "\"" || b || "\": ")
|
|
if balanced(b) then
|
|
stream$putl(po, "balanced")
|
|
else
|
|
stream$putl(po, "not balanced")
|
|
end
|
|
end
|
|
end start_up
|