Balanced brackets: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (add SETL) |
(Added various BASIC dialects (Applesoft BASIC, Chipmunk Basic, GW-BASIC, MSX Basic, and True BASIC)) |
||
Line 1,511: | Line 1,511: | ||
=={{header|BASIC}}== |
=={{header|BASIC}}== |
||
{{works with|QBasic}} |
{{works with|QBasic}} |
||
<syntaxhighlight lang="qbasic">DECLARE FUNCTION checkBrackets% (brackets AS STRING) |
<syntaxhighlight lang="qbasic">DECLARE FUNCTION checkBrackets% (brackets AS STRING) |
||
DECLARE FUNCTION generator$ (length AS INTEGER) |
DECLARE FUNCTION generator$ (length AS INTEGER) |
||
Line 1,569: | Line 1,568: | ||
generator$ = xx$ |
generator$ = xx$ |
||
END FUNCTION</syntaxhighlight> |
END FUNCTION</syntaxhighlight> |
||
{{out}} |
|||
<pre> [][[][][]] OK |
|||
Sample output: |
|||
[][[][][]] OK |
|||
][[[]] NOT OK |
][[[]] NOT OK |
||
[][] OK |
[][] OK |
||
Line 1,582: | Line 1,580: | ||
][][[[]] NOT OK |
][][[[]] NOT OK |
||
][[]][ NOT OK |
][[]][ NOT OK |
||
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}}=== |
==={{header|Commodore BASIC}}=== |
||
Line 1,608: | Line 1,636: | ||
2000 DATA , [], ][, [][], ][][, [[][]], []][[]</syntaxhighlight> |
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| |
==={{header|MSX 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) = "[[[]][[[][[][]]]]]" |
|||
function check_brackets(s$) |
|||
LET brk$(3) = "][][]][[" |
|||
level = 0 |
|||
LET brk$(4) = "[][][]" |
|||
for i = 1 to length(s$) |
|||
LET brk$(5) = "[][]][]][[]]][[[" |
|||
c$ = mid(s$, i, 1) |
|||
LET brk$(6) = "]][[[[]]]][]]][[[[" |
|||
begin case |
|||
LET brk$(7) = "[[][[[]]][]]" |
|||
LET brk$(8) = "[]][][][[[]]" |
|||
level = level + 1 |
|||
LET brk$(9) = "][]][[" |
|||
LET brk$(10) = "[]][][][[]" |
|||
level = level - 1 |
|||
if level < 0 then exit for |
|||
end case |
|||
next i |
|||
return level = 0 |
|||
end function</syntaxhighlight> |
|||
FOR i = 1 TO 7 |
|||
LET b$ = brk$(i) |
|||
DO WHILE POS(b$,"[]") <> 0 |
|||
LET x = POS(b$,"[]") |
|||
IF x > 0 THEN LET b$ = (b$)[1:x-1] & (b$)[x+2:maxnum] |
|||
LOOP |
|||
IF TRIM$(b$) = "" THEN |
|||
PRINT " OK "; |
|||
ELSE |
|||
PRINT "Not OK "; |
|||
END IF |
|||
PRINT brk$(i) |
|||
NEXT i |
|||
END</syntaxhighlight> |
|||
=={{header|Batch File}}== |
=={{header|Batch File}}== |