Balanced brackets: Difference between revisions

Added uBasic/4tH version
m (→‎{{header|Wren}}: Changed to Wren S/H)
imported>Thebeez
(Added uBasic/4tH version)
 
(4 intermediate revisions by 3 users not shown)
Line 1,511:
=={{header|BASIC}}==
{{works with|QBasic}}
 
<syntaxhighlight lang="qbasic">DECLARE FUNCTION checkBrackets% (brackets AS STRING)
DECLARE FUNCTION generator$ (length AS INTEGER)
Line 1,569 ⟶ 1,568:
generator$ = xx$
END FUNCTION</syntaxhighlight>
{{out}}
 
<pre> [][[][][]] OK
Sample output:
[][[][][]] OK
][[[]] NOT OK
[][] OK
Line 1,582 ⟶ 1,580:
][][[[]] NOT OK
][[]][ NOT OK
OK</pre>
 
==={{header|Applesoft BASIC}}===
The [[#MSX_BASIC|MSX BASIC]] solution works without any changes.
 
==={{header|BASIC256}}===
{{trans|Yabasic}}
<syntaxhighlight lang="basic256">s$ = "[[]][]"
print s$; " = ";
 
if not check_brackets(s$) then print "not ";
print "ok"
end
 
function check_brackets(s$)
level = 0
for i = 1 to length(s$)
c$ = mid(s$, i, 1)
begin case
case c$ = "["
level = level + 1
case c$ = "]"
level = level - 1
if level < 0 then exit for
end case
next i
return level = 0
end function</syntaxhighlight>
 
==={{header|Chipmunk Basic}}===
The [[#MSX_BASIC|MSX BASIC]] solution works without any changes.
 
==={{header|Commodore BASIC}}===
Line 1,608 ⟶ 1,636:
2000 DATA , [], ][, [][], ][][, [[][]], []][[]</syntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|PC-BASIC|any}}
{{works with|BASICA}}
The [[#MSX_BASIC|MSX BASIC]] solution works without any changes.
 
==={{header|BASIC256MSX Basic}}===
Based on Commodore BASIC implementation
{{trans|Yabasic}}
{{works with|MSX BASIC|any}}
<syntaxhighlight lang="basic256">s$ = "[[]][]"
{{works with|Applesoft BASIC}}
print s$; " = ";
{{works with|BASICA}}
{{works with|Chipmunk Basic}}
{{works with|GW-BASIC}}
{{works with|PC-BASIC|any}}
{{works with|QBasic}}
<syntaxhighlight lang="qbasic">100 CLS : rem 10 HOME for Applesoft BASIC
110 FOR N = 1 TO 7
120 READ S$
130 IF S$ = "" THEN PRINT"(EMPTY)";: GOTO 150
140 PRINT S$;
150 PRINT TAB(9);
160 GOSUB 190
170 NEXT N
180 END
190 S = 0
200 FOR K = 1 TO LEN(S$)
210 C$ = MID$(S$,K,1)
220 IF C$ = "[" THEN S = S+1
230 IF C$ = "]" THEN S = S-1
240 IF S < 0 THEN PRINT "NOT OK": RETURN
250 NEXT K
260 IF S = 0 THEN PRINT " OK": RETURN
270 PRINT "NOT OK"
280 RETURN
290 DATA "", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]"</syntaxhighlight>
{{out}}
<pre>(EMPTY) OK
[] OK
][ NOT OK
[][] OK
][][ NOT OK
[[][]] OK
[]][[] NOT OK</pre>
 
==={{header|True BASIC}}===
if not check_brackets(s$) then print "not ";
{{trans|Run BASIC}}
print "ok"
<syntaxhighlight lang="qbasic">DIM brk$(10)
end
LET brk$(1) = "[[[][]]]"
LET brk$(2) = "[[[]][[[][[][]]]]]"
LET brk$(3) = "][][]][["
LET brk$(4) = "[][][]"
LET brk$(5) = "[][]][]][[]]][[["
LET brk$(6) = "]][[[[]]]][]]][[[["
LET brk$(7) = "[[][[[]]][]]"
LET brk$(8) = "[]][][][[[]]"
LET brk$(9) = "][]][["
LET brk$(10) = "[]][][][[]"
 
FOR i = 1 TO 7
function check_brackets(s$)
level LET b$ = 0brk$(i)
for i =DO 1WHILE to lengthPOS(sb$,"[]") <> 0
c$ LET x = midPOS(sb$, i, 1"[]")
IF x > 0 THEN LET b$ = (b$)[1:x-1] & (b$)[x+2:maxnum]
begin case
case c$ = "["LOOP
IF levelTRIM$(b$) = level +"" 1THEN
case c$ =PRINT "] OK ";
ELSE
level = level - 1
PRINT if"Not levelOK < 0 then exit for";
endEND caseIF
PRINT brk$(i)
next i
NEXT i
return level = 0
end functionEND</syntaxhighlight>
==={{header|uBasic/4tH}}===
<syntaxhighlight lang="qbasic">@(0) := "[]][][][[]"
@(1) := "[[[][]]]"
@(2) := "[[[]][[[][[][]]]]]"
@(3) := "][][]][["
@(4) := "[][][]"
@(5) := "[][]][]][[]]][[["
@(6) := "]][[[[]]]][]]][[[["
@(7) := "[[][[[]]][]]"
@(8) := "[]][][][[[]]"
@(9) := "][]][["
 
For x = 0 To 9
Print Using "(_#)";x,Show (@(x));Tab (30);
Do While (Set (a, Find(@(x), "[]")) < 0) = 0
@(x) = Join (Clip (@(x), Len (@(x)) - a), Chop (@(x), a + 2))
Loop
Print "is";Show (Iif (Len (@(x))," not "," "));"balanced"
Next</syntaxhighlight>
{{Out}}
<pre>( 0) []][][][[] is not balanced
( 1) [[[][]]] is balanced
( 2) [[[]][[[][[][]]]]] is balanced
( 3) ][][]][[ is not balanced
( 4) [][][] is balanced
( 5) [][]][]][[]]][[[ is not balanced
( 6) ]][[[[]]]][]]][[[[ is not balanced
( 7) [[][[[]]][]] is balanced
( 8) []][][][[[]] is not balanced
( 9) ][]][[ is not balanced
 
0 OK, 0:472 </pre>
 
=={{header|Batch File}}==
Line 2,783 ⟶ 2,891:
 
=={{header|Elena}}==
ELENA 46.x :
<syntaxhighlight lang="elena">import// system'routines;Generate a string with N opening brackets ("[") and N closing brackets ("]"), in some arbitrary order.
// Determine whether the generated string is balanced; that is, whether it consists entirely of pairs of opening/closing brackets (in that order),
// none of which mis-nest.
 
import system'routines;
import extensions;
import extensions'text;
Line 2,790 ⟶ 2,902:
randomBrackets(len)
{
if (0 == len)
{
^emptyString
}
else
{
var brackets :=
Array.allocate(len).populate::(i => $91)
+
Array.allocate(len).populate::(i => $93);
 
brackets := brackets.randomize(len * 2);
 
^ brackets.summarize(new StringWriter()).toString()
}
}
 
extension op
{
get isBalanced()
{
var counter := new Integer(0);
self.seekEach::(ch => counter.append((ch==$91).iif(1,-1)) < 0);
^ (0 == counter)
}
}
 
public program()
{
for(int len := 0,; len < 9,; len += 1)
{
var str := randomBrackets(len);
 
console.printLine("""",str,"""",str.isBalanced ? " is balanced" : " is not balanced")
};
 
console.readChar()
}</syntaxhighlight>
{{out}}
Line 7,963 ⟶ 8,075:
</pre>
 
=={{header|SETL}}==
<syntaxhighlight lang="setl">program balanced_brackets;
setrandom(0);
 
loop for length in [1..10] do
s := generate length;
print(balanced s, s);
end loop;
 
op generate(n);
s := "["*n + "]"*n;
loop for i in [n*2, n*2-1..2] do
j := 1 + random(i - 1);
[s(i), s(j)] := [s(j), s(i)];
end loop;
return s;
end op;
 
op balanced(s);
depth := 0;
loop for c in s do
case c of
("["):
depth +:= 1;
("]"):
depth -:= 1;
if depth<0 then return false; end if;
end case;
end loop;
return depth = 0;
end op;
end program;</syntaxhighlight>
{{out}}
<pre>#F ][
#F ]][[
#T [[]][]
#F [[]]][][
#F ][[][][]][
#F ]][]]]][[[[[
#F ]]][[]]][[[[[]
#T [[][][[][[]][]]]
#F []][[]]]][][][[][[
#F []][]]][]][][[[][[][</pre>
=={{header|Sidef}}==
<syntaxhighlight lang="ruby">func balanced (str) {
Anonymous user