Balanced brackets: Difference between revisions
Content added Content deleted
(Added solution for Modula-2) |
(Added solution for Action!) |
||
Line 300: | Line 300: | ||
[][]]][]]] => NOT OK |
[][]]][]]] => NOT OK |
||
</pre> |
|||
=={{header|Action!}}== |
|||
<lang Action!>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</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Balanced_brackets.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
(empty) is balanced |
|||
[] is balanced |
|||
[[]] is balanced |
|||
][][[] is not balanced |
|||
[]][[][] is not balanced |
|||
[[[]]]][[] is not balanced |
|||
[[[[[[]]]]]] is balanced |
|||
[[]][[[][]]][] is balanced |
|||
[[[[]][[]]]][]][ is not balanced |
|||
][][][[[[[]]][]]][ is not balanced |
|||
[[[[][][][][]][]]][] is balanced |
|||
</pre> |
</pre> |
||