Balanced brackets: Difference between revisions

Content added Content deleted
Line 1,446: Line 1,446:
#define extensions.
#define extensions.


#symbol randomBrackets = (:aLength)
#symbol randomBrackets =
{
[
^ (0 == aLength)
new : aLength
? [ emptyLiteralValue ]
= (0 == aLength)
! [
? [ emptyLiteralValue ]
#var aBrackets :=
! [
Array new &length:(aLength int) set &every: (&index:i) [ #91 ]
#var aBrackets :=
+
Array new &length:(aLength int) set &every: (&index:i) [ #91 ]
Array new &length:(aLength int) set &every: (&index:i)[ #93 ].
+
Array new &length:(aLength int) set &every: (&index:i)[ #93 ].
aBrackets randomize:(aLength * 2).

^ aBrackets summarize:(String new) literal.
].
}.

#class(extension)op
{
#method isBalanced
[
#var aCounter := Integer new:0.
self seek &each:aChar [ (aCounter += (aChar => #91 ? [ 1 ] #93 ? [ -1 ])) < 0 ].
aBrackets::randomOp randomize:(aLength * 2).
^ (0 == aCounter).
^ control run:aBrackets &forEach:(Summing new:(String new)) literal.
].
]
}
].

#symbol isBalanced = (:aLiteral)
[
#var aCounter := Integer new:0.

control run:aLiteral &seeking: aChar [ aCounter append:(aChar => #91 ? [ 1 ] #93 ? [ -1 ]) < 0 ].

^ (0 == aCounter).
].


#symbol program =
#symbol program =
[
[
control run &int:0 &int:9 &forEvery: (&index:aLength)
0 to:9 &doEach: (:aLength)
[
[
#var anStr := randomBrackets:aLength.
#var anStr := randomBrackets new:aLength.
#var balanced := isBalanced:anStr.


consoleEx writeLine:"""":anStr:"""":(balanced => true ? [ " is balanced" ] false ? [ " is not balanced" ]).
console writeLine:"""":anStr:"""":((anStr isBalanced) => true ? [ " is balanced" ] false ? [ " is not balanced" ]).
].
].


console readChar.
console readChar.
].</lang>
].</lang>
{{out}}
<pre>
"" is balanced
"[]" is balanced
"][[]" is not balanced
"[[[]]]" is balanced
"][[[]]][" is not balanced
"[]]]][[[][" is not balanced
"[[]][][[]]][" is not balanced
"[][]]]]][[[[][" is not balanced
"][]]][[[[][[][]]" is not balanced
"][]][][[]]][[[]][[" is not balanced
</pre>


=={{header|Erlang}}==
=={{header|Erlang}}==