Balanced brackets: Difference between revisions

Content added Content deleted
m (→‎State machine with counter: not really a state machine)
(→‎{{header|REXX}}: added the REXX language. ~~~~)
Line 2,182: Line 2,182:
9 TRUE [[[[][[][]]]]]
9 TRUE [[[[][[][]]]]]
10 TRUE []</lang>
10 TRUE []</lang>

=={{header|REXX}}==
<lang rexx>
/*check for balanced brackets [] */
@.=0
yesno.0=left('',40) 'unbalanced'
yesno.1='balanced'

q='[][][][[]]' ; call checkBal q; say yesno.result q
q='[][][][[]]][' ; call checkBal q; say yesno.result q
q='[' ; call checkBal q; say yesno.result q
q=']' ; call checkBal q; say yesno.result q
q='[]' ; call checkBal q; say yesno.result q
q='][' ; call checkBal q; say yesno.result q
q='][][' ; call checkBal q; say yesno.result q
q='[[]]' ; call checkBal q; say yesno.result q
q='[[[[[[[]]]]]]]' ; call checkBal q; say yesno.result q
q='[[[[[]]]][]' ; call checkBal q; say yesno.result q
q='[][]' ; call checkBal q; say yesno.result q
q='[]][[]' ; call checkBal q; say yesno.result q
q=']]][[[[]' ; call checkBal q; say yesno.result q

do j=1 for 40
q=translate(rand(random(1,8)),'[]',01)
call checkBal q; if result=-1 then iterate
say yesno.result q
end

exit

pand:p=random(0,1);return p||\p
rand:pp=pand();pp=pand()pp;pp=copies(pp,arg(1));
i=random(2,length(pp))
pp=left(pp,i-1)substr(pp,i)
return pp


/*─────────────────────────────────────check for balanced brackets [] */
checkBal: procedure expose @.; arg y; nest=0
if @.y then return -1 /*already done this expression ? */
@.y=1 /*indicate expression processed. */
do j=1 for length(y)
_=substr(y,j,1)
if _=='[' then nest=nest+1
else do; nest=nest-1; if nest<0 then return 0; end
end
return nest==0
</lang>
<pre style="height:40ex;overflow:scroll">
Output (not repleatable due to the use of RANDOM:

balanced [][][][[]]
unbalanced [][][][[]]][
unbalanced [
unbalanced ]
balanced []
unbalanced ][
unbalanced ][][
balanced [[]]
balanced [[[[[[[]]]]]]]
unbalanced [[[[[]]]][]
balanced [][]
unbalanced []][[]
unbalanced ]]][[[[]
unbalanced ][[]][[]][[]][[]][[]
unbalanced []][[]][[]][[]][[]][
unbalanced []][
balanced [][][][][][][][][][][][][][][][]
unbalanced []][[]][[]][
balanced [][][][][][][][]
unbalanced ][][][][][][][][
unbalanced ][[]][[]][[]][[]][[]][[]
unbalanced []][[]][[]][[]][[]][[]][[]][[]][
unbalanced ][][][][][][][][][][
unbalanced ][][][][][][][][][][][][][][
unbalanced ][][][][][][][][][][][][][][][][
unbalanced ][[]][[]][[]][[]][[]][[]][[]
unbalanced []][[]][[]][[]][[]][[]][[]][
unbalanced ][][][][
unbalanced []][[]][
balanced [][][][][][][][][][][][]
unbalanced ][[]
unbalanced []][[]][[]][[]][[]][[]][
unbalanced ][][][][][][
balanced [][][][][][][][][][]
balanced [][][][][][][][][][][][][][]
balanced [][][][]
unbalanced ][[]][[]][[]][[]
unbalanced ][[]][[]][[]][[]][[]][[]][[]][[]
unbalanced ][][][][][][][][][][][][
</pre>


=={{header|Ruby}}==
=={{header|Ruby}}==
Line 2,224: Line 2,315:
bad: []]
bad: []]
bad: [letters]</pre>
bad: [letters]</pre>

=={{header|Scala}}==
=={{header|Scala}}==
{{works with|Scala|2.9.1}}
{{works with|Scala|2.9.1}}