Balanced brackets: Difference between revisions

Added uBasic/4tH version
m (syntax highlighting fixup automation)
imported>Thebeez
(Added uBasic/4tH version)
 
(35 intermediate revisions by 19 users not shown)
Line 19:
=={{header|11l}}==
{{trans|Python}}
<syntaxhighlight lang="11l">F gen(n)
V txt = [‘[’, ‘]’] * n
random:shuffle(&txt)
Line 53:
 
=={{header|360 Assembly}}==
<syntaxhighlight lang="360asm">* Balanced brackets 28/04/2016
BALANCE CSECT
USING BALANCE,R13 base register and savearea pointer
Line 176:
19 [[[[[[][[[[[][][ ?
20 [[][[][] ?
</pre>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits <br> or android 64 bits with application Termux }}
<syntaxhighlight lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program balencebrac64.s */
 
/************************************/
/* Constantes */
/************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessResult: .asciz "Expression : "
szMessBalenced: .asciz " balanced"
szMessNotBalenced: .asciz " not balanced"
szMessStart: .asciz "Program 64 bits start.\n"
szCarriageReturn: .asciz "\n"
 
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sZoneConv: .skip 24 // conversion buffer
sBuffer: .skip 80
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
ldr x0,qAdrszMessStart
bl affichageMess
mov x0,0b111000 // bit 1 = open bracket bit 0 = close bracket
bl testBalanced
 
mov x0,0b110100
bl testBalanced
mov x0,0b11001001
bl testBalanced
mov x19,10 // number random test
1:
mov x0,1 // mini number
mov x1,10000 // maxi random number
bl extRandom // generate random number
bl testBalanced
subs x19,x19,1
bge 1b
100: // standard end of the program
mov x0, #0 // return code
mov x8,EXIT
svc #0 // perform the system call
qAdrszCarriageReturn: .quad szCarriageReturn
qAdrszMessResult: .quad szMessResult
qAdrszMessNotBalenced: .quad szMessNotBalenced
qAdrszMessBalenced: .quad szMessBalenced
qAdrszMessStart: .quad szMessStart
qAdrsBuffer: .quad sBuffer
/***************************************************/
/* routine to test expression */
/***************************************************/
/* x0 expression */
testBalanced:
stp x1,lr,[sp,-16]! // save registres
stp x2,x3,[sp,-16]! // save registres
ldr x1,qAdrsBuffer
bl isBalanced
cmp x0,0
ldr x3,qAdrszMessNotBalenced
ldr x4,qAdrszMessBalenced
csel x3,x3,x4,eq
 
mov x0,#4 // string number to display
ldr x1,qAdrszMessResult
ldr x2,qAdrsBuffer
ldr x4,qAdrszCarriageReturn
bl displayStrings // display message
100:
ldp x2,x3,[sp],16 // restaur registres
ldp x1,lr,[sp],16 // restaur registres
ret
/***************************************************/
/* control if expression is balenced */
/***************************************************/
/* x0 expression */
/* x1 buffer address */
/* x0 return 1 if balanced else zero */
isBalanced:
stp x1,lr,[sp,-16]! // save registres
stp x2,x3,[sp,-16]! // save registres
mov x3,63
clz x2,x0 // number of zeros on the left
sub x2,x3,x2 // so many useful numbers right
mov x4,1 // mask to test bit
lsl x4,x4,x2 // shift left begin expression
mov x3,0 // top if right bracket > left bracket
mov x7,0 // indice display buffer expression
mov x5,0 // counter brackets
1: // begin loop to test bits
tst x0,x4
beq 2f // bit = 0
mov x6,'(' // else bit = 1 -> open bracket
strb w6,[x1,x7] // store in buffer
add x7,x7,1 // increment indice
add x5,x5,1 // increment open bracket
b 3f
2: // bit = 0
mov x6,')' // close bracket
strb w6,[x1,x7] // store in buffer
add x7,x7,1 // increment indice
subs x5,x5,1 // decrement open bracket
bge 3f // if negative
mov x3,1 // top error
3:
lsr x4,x4,1 // shift mask right
cbnz x4,1b // and loop if not zero
strb wzr,[x1,x7] // zero final on buffer
cmp x5,0 // right bracket <> left bracket -> error
bne 4f
cmp x3,0 // in expression left bracket > right bracket
bne 4f
mov x0,1 // balanced
b 100f
4:
mov x0,0 // not balanced
100:
ldp x2,x3,[sp],16 // restaur registres
ldp x1,lr,[sp],16 // restaur registres
ret
/***************************************************/
/* display multi strings */
/* new version 24/05/2023 */
/***************************************************/
/* x0 contains number strings address */
/* x1 address string1 */
/* x2 address string2 */
/* x3 address string3 */
/* x4 address string4 */
/* x5 address string5 */
/* x6 address string5 */
/* x7 address string6 */
displayStrings: // INFO: displayStrings
stp x8,lr,[sp,-16]! // save registers
stp x2,fp,[sp,-16]! // save registers
add fp,sp,#32 // save paraméters address (4 registers saved * 8 bytes)
mov x8,x0 // save strings number
cmp x8,#0 // 0 string -> end
ble 100f
mov x0,x1 // string 1
bl affichageMess
cmp x8,#1 // number > 1
ble 100f
mov x0,x2
bl affichageMess
cmp x8,#2
ble 100f
mov x0,x3
bl affichageMess
cmp x8,#3
ble 100f
mov x0,x4
bl affichageMess
cmp x8,#4
ble 100f
mov x0,x5
bl affichageMess
cmp x8,#5
ble 100f
mov x0,x6
bl affichageMess
cmp x8,#6
ble 100f
mov x0,x7
bl affichageMess
100:
ldp x2,fp,[sp],16 // restaur registers
ldp x8,lr,[sp],16 // restaur registers
ret
/******************************************************************/
/* random number */
/******************************************************************/
/* x0 contains inferior value */
/* x1 contains maxi value */
/* x0 return random number */
extRandom:
stp x1,lr,[sp,-16]! // save registers
stp x2,x8,[sp,-16]! // save registers
stp x19,x20,[sp,-16]! // save registers
sub sp,sp,16 // reserve 16 octets on stack
mov x19,x0
add x20,x1,1
mov x0,sp // store result on stack
mov x1,8 // length 8 bytes
mov x2,0
mov x8,278 // call system Linux 64 bits Urandom
svc 0
mov x0,sp // load résult on stack
ldr x0,[x0]
sub x2,x20,x19 // calculation of the range of values
udiv x1,x0,x2 // calculation range modulo
msub x0,x1,x2,x0
add x0,x0,x19 // and add inferior value
100:
add sp,sp,16 // alignement stack
ldp x19,x20,[sp],16 // restaur 2 registers
ldp x2,x8,[sp],16 // restaur 2 registers
ldp x1,lr,[sp],16 // restaur 2 registers
ret // retour adresse lr x30
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeARM64.inc"
 
 
</syntaxhighlight>
{{Out}}
<pre>
Program 64 bits start.
Expression : ((())) balanced
Expression : (()()) balanced
Expression : (())())( not balanced
Expression : ((()))))()))) not balanced
Expression : (()())())())) not balanced
Expression : ()(((()((()) not balanced
Expression : ())()(()())() not balanced
Expression : ())))((()))((( not balanced
Expression : (())()())(() not balanced
Expression : ())()))))(()( not balanced
Expression : ())()(())(()( not balanced
Expression : ())(()(()())) not balanced
Expression : ((()))()))))) not balanced
Expression : (()))((()))( not balanced
</pre>
 
=={{header|ABAP}}==
<syntaxhighlight lang=ABAP"abap">
CLASS lcl_balanced_brackets DEFINITION.
PUBLIC SECTION.
Line 303 ⟶ 545:
 
=={{header|Action!}}==
<syntaxhighlight lang=Action"action!">PROC Generate(BYTE size CHAR ARRAY s)
BYTE i,half
 
Line 395 ⟶ 637:
Using #HASH-OFF
</pre>
<syntaxhighlight lang=Acurity"acurity Architectarchitect">
FUNCTION bBRACKETS_MATCH(zStringWithBrackets: STRING): STRING
VAR sCount: SHORT
Line 426 ⟶ 668:
=={{header|Ada}}==
brackets.adb:
<syntaxhighlight lang=Ada"ada">with Ada.Numerics.Discrete_Random;
with Ada.Text_IO;
with Ada.Strings.Fixed;
Line 503 ⟶ 745:
 
=={{header|Aime}}==
<syntaxhighlight lang="aime">unbalanced(data s)
{
integer b, i;
Line 552 ⟶ 794:
=={{header|ALGOL 68}}==
{{works with|ALGOL 68G|Any - tested with release 2.8.win32}}
<syntaxhighlight lang="algol68"># generates a string of random opening and closing brackets. The number of #
# each type of brackets is speccified in length #
PROC get brackets = ( INT length ) STRING:
Line 642 ⟶ 884:
]][][]]][]][][]][[[[[[][: not ok
]]][][][]][][[]][[[][][[: not ok
</pre>
 
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="c">
#include <basico.h>
 
algoritmo
 
braizq="[", brader="]" // bug de Hopper :(
largo de datos=0
preparar datos (DATA_BRACKET)
obtener tamaño de datos, menos '1', guardar en 'largo de datos'
iterar
bra="", obtener dato, guardar en 'bra'
i=1, b=0, error_pos=""
iterar grupo( ++i, #( i<=len(bra) && is not neg (b) ),\
#( b += ((bra[i]==braizq) - (bra[i]==brader)) )\
#( error_pos = cat(replicate(" ",i-1),"^\n") ) )
solo si ( #(is pos(b)),\
#( error_pos=cat(cat(" ",error_pos),"(missing closed bracket)\n\n")))
solo si ( #(is neg(b)),\
#( error_pos=cat(error_pos,"(extra closed bracket)\n\n")))
 
imprimir ( #( rpad(" ",40,bra) ), ": ", \
solo si (b, "un"), "balanced\n",\
solo si (b, error_pos) )
mientras ' largo de datos-- '
terminar
 
subrutinas
 
DATA_BRACKET:
datos ("","[ [ ] [ [[] ][] ] [[]] ]","[[ ][[[ ][ ]]",\
"[][][[]]][","][[]][] [[[]]] [][]","[][] [][][[]]",\
"[ a-b * [c/d] + [[10 * sin 30 ]-1] ]",\
"[ a-b * [c/d] + [[10 * sin 30 ]]-1] ]")
back
</syntaxhighlight>
{{out}}
<pre>
: balanced
[ [ ] [ [[] ][] ] [[]] ] : balanced
[[ ][[[ ][ ]] : unbalanced
^
(missing closed bracket)
 
[][][[]]][ : unbalanced
^
(extra closed bracket)
 
][[]][] [[[]]] [][] : unbalanced
^
(extra closed bracket)
 
[][] [][][[]] : balanced
[ a-b * [c/d] + [[10 * sin 30 ]-1] ] : balanced
[ a-b * [c/d] + [[10 * sin 30 ]]-1] ] : unbalanced
^
(extra closed bracket)
</pre>
 
Line 649 ⟶ 958:
<br clear=both>
==={{header|Java}}===
<syntaxhighlight lang="text">
grammar balancedBrackets ;
 
Line 694 ⟶ 1,003:
and a function to check whether a given string of brackets is balanced.
 
<syntaxhighlight lang=APL"apl">gen ← (⊂+?+)⍨ ⌷ ('[]'/⍨⊢)
bal ← (((|≡⊢)+\) ∧ 0=+/)(+⌿1 ¯1×[1]'[]'∘.=⊢)</syntaxhighlight>
 
Sample run for 0..N..10:
 
<syntaxhighlight lang=APL"apl"> ↑{br←gen ⍵ ⋄ br,': ',(1+bal br)⊃'Bad' 'Good'}¨0,⍳10
: Good
[]: Good
Line 717 ⟶ 1,026:
(ES6 functionally composed version)
 
<syntaxhighlight lang=AppleScript"applescript">-- CHECK NESTING OF SQUARE BRACKET SEQUENCES ---------------------------------
 
-- Zero-based index of the first problem (-1 if none found):
Line 914 ⟶ 1,223:
 
=={{header|ARM Assembly}}==
<syntaxhighlight lang=ARM_Assembly"arm_assembly">
.data
 
Line 977 ⟶ 1,286:
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">isBalanced: function [s][
cnt: 0
Line 1,016 ⟶ 1,325:
 
=={{header|AutoHotkey}}==
<syntaxhighlight lang=AutoHotkey"autohotkey">; Generate 10 strings with equal left and right brackets
Loop, 5
{
Line 1,063 ⟶ 1,372:
 
A second example repeatedly replacing []:
<syntaxhighlight lang=AutoHotkey"autohotkey">Loop, 5
{
B = %A_Index%
Line 1,101 ⟶ 1,410:
 
=={{header|AutoIt}}==
<syntaxhighlight lang=AutoIt"autoit">
#include <Array.au3>
Local $Array[1]
Line 1,134 ⟶ 1,443:
=={{header|AWK}}==
<syntaxhighlight lang=AWK"awk">#!/usr/bin/awk -f
BEGIN {
print isbb("[]")
Line 1,165 ⟶ 1,474:
 
=={{header|BaCon}}==
<syntaxhighlight lang="bacon">FOR len = 0 TO 18 STEP 2
 
str$ = ""
Line 1,202 ⟶ 1,511:
=={{header|BASIC}}==
{{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)
 
Line 1,260 ⟶ 1,568:
generator$ = xx$
END FUNCTION</syntaxhighlight>
{{out}}
 
<pre> [][[][][]] OK
Sample output:
[][[][][]] OK
][[[]] NOT OK
[][] OK
Line 1,273 ⟶ 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}}===
Based on ZX Spectrum BASIC implementation
<syntaxhighlight lang="basic">10 PRINT CHR$(147): REM CLEAR SCREEN
20 FOR N=1 TO 7
30 READ S$
Line 1,299 ⟶ 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}}==
Uses the rewrite rule <code>"[]" -> null</code> to check if brackets are balanced.
<syntaxhighlight lang="dos">:: Balanced Brackets Task from Rosetta Code
:: Batch File Implementation
Line 1,404 ⟶ 1,821:
 
=={{header|BBC BASIC}}==
<syntaxhighlight lang="bbcbasic">FOR x%=1 TO 10
test$=FNgenerate(RND(10))
PRINT "Bracket string ";test$;" is ";FNvalid(test$)
Line 1,447 ⟶ 1,864:
{{works with|befungee}}
This code implements the second part of the task: it reads from standard input an arbitrary string of opening and closing brackets, and checks whether it's balanced or not.
<syntaxhighlight lang=Befunge"befunge">v > "KO TON" ,,,,,, v
> ~ : 25*- #v_ $ | > 25*, @
> "KO" ,, ^
Line 1,462 ⟶ 1,879:
This allows for a particular simple implementation:
 
<syntaxhighlight lang="bqn">Gen ← (•rand.Deal⊏⥊⟜"[]") 2⊸×
Bal ← {
Mul ← {a‿b𝕊x‿y: ⟨a+0⌈x-b, y+0⌈b-x⟩}
Line 1,480 ⟶ 1,897:
=={{header|Bracmat}}==
Bracmat has no 'random' function, so the shuffle is a bit improvised. A variable <code>someNumber</code> is initialised with a big number is repeatedly divided by the number of '['s in the test string until zero. The remainders are used as index to partition and swap the first half of the test string. Then the second half and first half are also swapped. The test whether the test string is balanced is simple, but not very efficient.
<syntaxhighlight lang="bracmat">( (bal=|"[" !bal "]" !bal)
& ( generate
= a j m n z N S someNumber
Line 1,521 ⟶ 1,938:
 
=={{header|Brat}}==
<syntaxhighlight lang="brat">string.prototype.balanced? = {
brackets = []
balanced = true
Line 1,566 ⟶ 1,983:
 
=={{header|C}}==
<syntaxhighlight lang="c">#include<stdio.h>
#include<stdlib.h>
#include<string.h>
Line 1,608 ⟶ 2,025:
while(n<9) doSeq(n++);
return 0;
}</syntaxhighlight>result:<syntaxhighlight lang="text">'': True
'[]': True
']][[': False
Line 1,619 ⟶ 2,036:
 
=={{header|C sharp|C#}}==
<syntaxhighlight lang="csharp">using System;
using System.Linq;
 
Line 1,671 ⟶ 2,088:
"[]]][][]][[][[" is not balanced.
"[]]][]]][[][[][[" is not balanced.</pre>
<syntaxhighlight lang="csharp">
// simple solution
string input = Console.ReadLine();
Line 1,699 ⟶ 2,116:
 
=={{header|C++}}==
<syntaxhighlight lang="cpp">#include <algorithm>
#include <iostream>
#include <string>
Line 1,745 ⟶ 2,162:
 
=={{header|Ceylon}}==
<syntaxhighlight lang=Ceylon"ceylon">import com.vasileff.ceylon.random.api {
platformRandom,
Random
Line 1,788 ⟶ 2,205:
 
=={{header|Clojure}}==
<syntaxhighlight lang=Clojure"clojure">(defn gen-brackets [n]
(->> (concat (repeat n \[) (repeat n \]))
shuffle
Line 1,806 ⟶ 2,223:
 
* We can use <code>reduce</code> to consume the sequence:
:<syntaxhighlight lang=Clojure"clojure">(defn balanced? [s]
(empty?
(reduce
Line 1,819 ⟶ 2,236:
 
* Only <code>[</code>s are put on the stack. We can just count the unmatched ones.
:<syntaxhighlight lang=Clojure"clojure">(defn balanced? [s]
(let [opens-closes (->> s
(map {\[ 1, \] -1})
Line 1,843 ⟶ 2,260:
 
=={{header|CLU}}==
<syntaxhighlight lang="clu">% This program needs the random number generator from
% "misc.lib" that comes with PCLU.
 
Line 1,909 ⟶ 2,326:
=={{header|COBOL}}==
{{works with|OpenCOBOL}}
<syntaxhighlight lang="cobol"> IDENTIFICATION DIVISION.
PROGRAM-ID. test-balanced-brackets.
 
Line 2,009 ⟶ 2,426:
 
=={{header|CoffeeScript}}==
<syntaxhighlight lang="coffeescript">
isBalanced = (brackets) ->
openCount = 0
Line 2,027 ⟶ 2,444:
</syntaxhighlight>
output
<syntaxhighlight lang="text">
> coffee balanced.coffee
[[[[ false
Line 2,048 ⟶ 2,465:
 
=={{header|Common Lisp}}==
<syntaxhighlight lang="lisp">
(defun string-of-brackets (n)
(let* ((len (* 2 n))
Line 2,096 ⟶ 2,513:
=={{header|Component Pascal}}==
BlackBox Component Builder
<syntaxhighlight lang="oberon2">
MODULE Brackets;
IMPORT StdLog, Args, Stacks (* See Task Stacks *);
Line 2,170 ⟶ 2,587:
 
=={{header|Crystal}}==
<syntaxhighlight lang="ruby">def generate(n : Int)
(['[',']'] * n).shuffle.join # Implicit return
end
Line 2,213 ⟶ 2,630:
===Standard Version===
D standard library has a [http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html#balancedParens function] for this.
<syntaxhighlight lang="d">import std.stdio, std.algorithm, std.random, std.range;
 
void main() {
Line 2,233 ⟶ 2,650:
===Imperative Version===
{{trans|Raku}}
<syntaxhighlight lang="d">import std.stdio, std.random, std.range, std.algorithm;
 
bool isBalanced(in string txt) pure nothrow {
Line 2,260 ⟶ 2,677:
===Functional Style===
{{trans|Haskell}}
<syntaxhighlight lang="d">import std.stdio, std.random, std.range, std.algorithm;
 
bool isBalanced(in string s, in char[2] pars="[]") pure nothrow @safe @nogc {
Line 2,282 ⟶ 2,699:
=={{header|Delphi}}==
 
<syntaxhighlight lang=Delphi"delphi">procedure Balanced_Brackets;
 
var BracketsStr : string;
Line 2,327 ⟶ 2,744:
 
=={{header|Déjà Vu}}==
<syntaxhighlight lang="dejavu">matching?:
swap 0
for c in chars:
Line 2,354 ⟶ 2,771:
false
false</pre>
 
=={{header|EasyLang}}==
<syntaxhighlight>
func balanced code$ .
for i to len code$
h$ = substr code$ i 1
if h$ = "["
br += 1
elif h$ = "]"
br -= 1
.
if br < 0
return 0
.
.
return if br = 0
.
repeat
inp$ = input
until inp$ = "eof"
print inp$ & "\t" & balanced inp$
.
#
input_data
 
[]
[][]
[[][]]
][
][][
[]][[]
eof
</syntaxhighlight>
 
=={{header|EchoLisp}}==
<syntaxhighlight lang="scheme">
(define (balance str)
(for/fold (closed 0) ((par str))
Line 2,386 ⟶ 2,836:
</syntaxhighlight>
 
=={{header|Ecstasy}}==
<syntaxhighlight lang="java">
module BalancedBrackets {
Boolean balanced(String text) {
Int depth = 0;
for (Char ch : text) {
switch (ch, depth) {
case ('[', _):
++depth;
break;
case (']', 0):
return False;
case (']', _):
--depth;
break;
}
}
return depth==0;
}
 
@Inject Console console;
void run() {
String[] tests =
[
"[]",
"[][]",
"[]][[]",
"[[[]][]]",
"][[[[]][]]",
"[[[]][[]][]]",
"]][[]][[[[][]]",
"[[]]]][]][[][[[]",
];
Int longest = tests.map(s -> s.size).reduce(0, (max, len) -> max.maxOf(len));
for (String test : tests) {
console.print($"{test}{' ' * (longest-test.size)} {balanced(test) ? "OK" : "NOT OK"}");
}
}
}
</syntaxhighlight>
 
{{out}}
<pre>
[] OK
[][] OK
[]][[] NOT OK
[[[]][]] OK
][[[[]][]] NOT OK
[[[]][[]][]] OK
]][[]][[[[][]] NOT OK
[[]]]][]][[][[[] NOT OK
</pre>
 
=={{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,395 ⟶ 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 2,452 ⟶ 2,959:
{{trans|Erlang}}
{{works with|Elixir|1.1}}
<syntaxhighlight lang="elixir">defmodule Balanced_brackets do
def task do
Enum.each(0..5, fn n ->
Line 2,491 ⟶ 2,998:
 
=={{header|Erlang}}==
<syntaxhighlight lang=Erlang"erlang">
-module( balanced_brackets ).
-export( [generate/1, is_balanced/1, task/0] ).
Line 2,534 ⟶ 3,041:
 
=={{header|Euphoria}}==
<syntaxhighlight lang="euphoria">function check_brackets(sequence s)
integer level
level = 0
Line 2,600 ⟶ 3,107:
 
{{Works with|Office 365 betas 2021}}
<syntaxhighlight lang="lisp">bracketReport
=LAMBDA(bracketPair,
LAMBDA(s,
Line 2,689 ⟶ 3,196:
and also assuming the following generic bindings in the Name Manager for the WorkBook:
 
<syntaxhighlight lang="lisp">APPENDCOLS
=LAMBDA(xs,
LAMBDA(ys,
Line 2,913 ⟶ 3,420:
 
=={{header|F_Sharp|F#}}==
<syntaxhighlight lang="fsharp">let isBalanced str =
let rec loop count = function
| ']'::_ when count = 0 -> false
Line 2,949 ⟶ 3,456:
 
=={{header|Factor}}==
<syntaxhighlight lang="factor">USING: combinators formatting kernel math random sequences strings ;
This code implements the second part of the task: it reads from standard input an arbitrary string of opening and closing brackets, and checks whether it's balanced or not.
IN: rosetta-code.balanced-brackets
<syntaxhighlight lang=Factor>USING: io formatting locals kernel math sequences unicode.case ;
 
: balanced? ( str -- ? )
0 swap [
{
{ CHAR: [ [ 1 + t ] }
{ CHAR: ] [ 1 - dup 0 >= ] }
[ drop t ]
} case
] all? swap zero? and ;
 
: bracket-pairs ( n -- str )
[ "[]" ] replicate "" concat-as ;
 
: balanced-brackets-main ( -- )
5 bracket-pairs randomize dup balanced? "" "not " ?
"String \"%s\" is %sbalanced.\n" printf ;
 
MAIN: balanced-brackets-main</syntaxhighlight>
 
The code below implements only the second part of the task: it reads from standard input an arbitrary string of opening and closing brackets, and checks whether it's balanced or not. Unlike the solution above, this one uses local variables.
<syntaxhighlight lang="factor">USING: io formatting locals kernel math sequences unicode.case ;
IN: balanced-brackets
 
Line 2,972 ⟶ 3,500:
readln
balanced</syntaxhighlight>
 
Some more idiomatic solution might be as follows:
 
<syntaxhighlight lang=Factor>USING: io formatting locals kernel math sequences unicode.case ;
IN: balanced-brackets
 
: map-braces ( -- qout )
[
{
{ "[" [ drop 1 ] }
{ "]" [ drop -1 ] }
[ drop 0 ]
} case
]
;
 
: balanced? ( str -- ? )
map-braces map sum 0 =
;
 
"[1+2*[3+4*[5+6]-3]*4-[3*[3+3]]]" balanced?
-- Data stack:
t
</syntaxhighlight>
 
=={{header|Fantom}}==
 
<syntaxhighlight lang="fantom">
class Main
{
Line 3,067 ⟶ 3,571:
=={{header|Forth}}==
{{works with|4tH|3.61.1}}
<syntaxhighlight lang="forth">include lib/choose.4th ( n1 -- n2)
include lib/ctos.4th ( n -- a 1)
 
Line 3,105 ⟶ 3,609:
=={{header|Fortran}}==
Please see the compilation and program execution result as comments at the top of this source:
<syntaxhighlight lang="fortran">
! $ gfortran -g -O0 -std=f2008 -Wall f.f08 -o f.exe
! $ ./f
Line 3,206 ⟶ 3,710:
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Function isBalanced(s As String) As Boolean
Line 3,268 ⟶ 3,772:
][[[]][] NOT OK
[][[[[][ NOT OK
</pre>
 
 
=={{header|FutureBasic}}==
Filters out non-bracket characters prior to evaluation.
<syntaxhighlight lang="futurebasic">
include "NSLog.incl"
 
local fn BracketBalance( strWithBracket as CFStringRef ) as CFStringRef
NSInteger i, bracketTracker = 0
CFStringRef result
CFCharacterSetRef bracketSet = fn CharacterSetWithCharactersInString( @"[]" )
CFCharacterSetRef bracketsOnlySet = fn CharacterSetInvertedSet( bracketSet )
CFArrayRef trimmedSArray = fn StringComponentsSeparatedByCharactersInSet( strWithBracket, bracketsOnlySet )
CFStringRef trimmedStr = fn ArrayComponentsJoinedByString( trimmedSArray, @"" )
NSUInteger strLen = len( trimmedStr )
// Empty string, no brackets
if ( strLen == 0 ) then result = @"No brackets" : exit fn
// String with odd number of brackets is unbalanced
if ( strLen mod 2 ) then result = @"Unbalanced" : exit fn
for i = 0 to strLen - 1
CFStringRef bracket = fn StringWithFormat( @"%C", fn StringCharacterAtIndex( trimmedStr, i ) )
if fn StringisEqual( bracket, @"[" ) then bracketTracker++
if fn StringisEqual( bracket, @"]" ) then bracketTracker--
if bracketTracker < 0 then result = @"Unbalanced" : break
next
if bracketTracker == 0 then result = @"Balanced"
end fn = result
 
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"" ) ), @"" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[" ) ), @"[" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"]" ) ), @"]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]" ) ), @"[]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]" ) ), @"[[]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]]" ) ), @"[]]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][]" ) ), @"[][]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][" ) ), @"][" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][][" ) ), @"][][" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]][][][[][]]" ) ), @"[[]][][][[][]]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][[]][][][]]][[" ) ), @"][[]][][][]]][[" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]][[d]]]]]" ) ), @"[[[abc]][[def]]]]]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]]][[[[[d]]]]]" ) ), @"[[[abc]]][[[[[def]]]]]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][abc]]][[[[[d]]]]]" ) ), @"[][abc]]][[[[[def]]]]]" )
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"The quick brown fox" ) ), @"The quick brown fox" )
 
HandleEvents
</syntaxhighlight>
{{output}}
<pre>
No brackets:
Unbalanced: [
Unbalanced: ]
Balanced: []
Unbalanced: [[]
Unbalanced: []]
Balanced: [][]
Unbalanced: ][
Unbalanced: ][][
Balanced: [[]][][][[][]]
Unbalanced: ][[]][][][]]][[
Unbalanced: [[[abc]][[def]]]]]
Balanced: [[[abc]]][[[[[def]]]]]
Unbalanced: [][abc]]][[[[[def]]]]]
No brackets: The quick brown fox
</pre>
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=8960fb267af43f0549d2cfe04288a2d4 Click this link to run this code]'''
<syntaxhighlight lang="gambas">'Altered to prevent lines starting with ']' or ending with '[' being generated as they can't work
 
siNumberOfBrackets As Short = 20 'Maximum amount of brackets in a line
Line 3,366 ⟶ 3,938:
 
=={{header|GAP}}==
<syntaxhighlight lang="gap">Balanced := function(L)
local c, r;
r := 0;
Line 3,402 ⟶ 3,974:
Balanced("[[[]][]]]");
# false</syntaxhighlight>
 
=={{header|GDScript}}==
{{works with|Godot|4.0}}
 
<syntaxhighlight lang="gdscript">
extends MainLoop
 
func generate_brackets(n: int) -> String:
var brackets: Array[String] = []
 
# Add opening and closing brackets
brackets.resize(2*n)
for i in range(0, 2*n, 2):
brackets[i] = "["
brackets[i+1] = "]"
 
brackets.shuffle()
return "".join(brackets)
 
func is_balanced(str: String) -> bool:
var unclosed_brackets := 0
for c in str:
match c:
"[":
unclosed_brackets += 1
"]":
if unclosed_brackets == 0:
return false
unclosed_brackets -= 1
_:
return false
return unclosed_brackets == 0
 
func _process(_delta: float) -> bool:
randomize()
 
for i in range(6):
var bracket_string := generate_brackets(i)
 
if is_balanced(bracket_string):
print("%sOK" % bracket_string.rpad(13))
else:
print("%sNOT OK" % bracket_string.rpad(11))
 
return true # Exit
</syntaxhighlight>
 
=={{header|Go}}==
<syntaxhighlight lang="go">package main
 
import (
Line 3,475 ⟶ 4,093:
=={{header|Groovy}}==
Generate Arbitrary String of Bracket Pairs:
<syntaxhighlight lang="groovy">def random = new Random()
 
def factorial = { (it > 1) ? (2..it).inject(1) { i, j -> i*j } : 1 }
Line 3,498 ⟶ 4,116:
 
Check Balance of Bracket String:
<syntaxhighlight lang="groovy">boolean balancedBrackets(String brackets, int depth=0) {
if (brackets == null || brackets.empty) return depth == 0
switch (brackets[0]) {
Line 3,511 ⟶ 4,129:
 
Test:
<syntaxhighlight lang="groovy">Set brackets = []
(0..100).each {
(0..8).each { r ->
Line 3,722 ⟶ 4,340:
=={{header|Haskell}}==
The simplest solution exploits the idea of stack-based automaton, which could be implemented by a fold.
<syntaxhighlight lang="haskell">
isMatching :: String -> Bool
isMatching = null . foldl aut []
Line 3,733 ⟶ 4,351:
This generates an infinite stream of correct balanced brackets expressions:
 
<syntaxhighlight lang="haskell">brackets = filter isMatching
$ [1.. ] >>= (`replicateM` "[]{}") </syntaxhighlight>
<pre>λ> take 10 brackets
Line 3,740 ⟶ 4,358:
In case the index of unmatched opening bracket is need to be found, following solution is suitable.
 
<syntaxhighlight lang="haskell">
import Control.Monad
import System.Random
Line 3,773 ⟶ 4,391:
zipWithM_ (\n r -> check $ shuffle (take n bs) r) [0,2 ..] rs</syntaxhighlight>
We put our list shuffling function in a separate module. For efficiency we use ''mutable'' vectors, although for the short lists in our example it doesn't really matter.
<syntaxhighlight lang="haskell">module VShuffle
( shuffle
) where
Line 3,827 ⟶ 4,445:
and '''scanl''' also yields a simple fit when we want the index of the tipping point:
 
<syntaxhighlight lang="haskell">import Control.Applicative ((<|>))
import Data.List (findIndex, replicate, scanl)
import Data.List.Split (chunksOf)
Line 3,833 ⟶ 4,451:
 
-------------------- BALANCED BRACKETS -------------------
 
nesting :: String -> [Int]
nesting = tail . scanl (flip level) 0
where
level '[' = succ
level ']' = pred
level _ = id
 
bracketProblemIndex :: String -> Maybe Int
Line 3,843 ⟶ 4,469:
| otherwise = Nothing
 
nesting :: String -> [Int]
nesting = tail . scanl level 0
where
level n '[' = succ n
level n ']' = pred n
level n _ = n
 
--------------------------- TEST -------------------------
Line 3,891 ⟶ 4,511:
 
=={{header|Icon}} and {{header|Unicon}}==
<syntaxhighlight lang=Icon"icon">procedure main(arglist)
every s := genbs(!arglist) do
write(image(s), if isbalanced(s) then " is balanced." else " is unbalanced")
Line 3,923 ⟶ 4,543:
 
=={{header|J}}==
'''Solution''': <syntaxhighlight lang="j">bracketDepth =: '[]' -&(+/\)/@:(=/) ]
checkBalanced =: _1 -.@e. bracketDepth
genBracketPairs =: (?~@# { ])@#"0 1&'[]' NB. bracket pairs in arbitrary order</syntaxhighlight>
'''Examples''':<syntaxhighlight lang="j"> (, ' ' , ('bad';'OK') {::~ checkBalanced)"1 genBracketPairs i. 10
OK
][ bad
Line 3,943 ⟶ 4,563:
=={{header|Java}}==
{{works with|Java|1.5+}}
<syntaxhighlight lang="java5">public class BalancedBrackets {
 
public static boolean hasBalancedBrackets(String str) {
Line 4,011 ⟶ 4,631:
 
=== Extended ===
<syntaxhighlight lang="java">import java.util.ArrayDeque;
import java.util.Deque;
 
Line 4,101 ⟶ 4,721:
====Iterative====
 
<syntaxhighlight lang=JavaScript"javascript">function shuffle(str) {
var a = str.split(''), b, c = a.length, d
while (c) b = Math.random() * c-- | 0, d = a[c], a[c] = a[b], a[b] = d
Line 4,144 ⟶ 4,764:
==== Another solution ====
{{works with|Node.js}}
<syntaxhighlight lang=JavaScript"javascript">
console.log("Supplied examples");
var tests = ["", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]"];
Line 4,229 ⟶ 4,849:
====Functional====
With visual indication of where the balance fails:
<syntaxhighlight lang=JavaScript"javascript">(() => {
'use strict';
 
Line 4,346 ⟶ 4,966:
']]][[][][][]' problem
^</pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq.'''
 
In this entry, two solutions are given: the first uses
an external source of entropy and jq's `until` control structure;
the second uses a low-entropy PRNG based on jq's `now`,
and `gsub/2.`
===High entropy solution using `until`===
<syntaxhighlight lang=bash>
< /dev/random tr -cd '0-9' | fold -w 1 | jq -Mcnr '
 
# Output: a PRN in range(0;$n) where $n is .
def prn:
if . == 1 then 0
else . as $n
| (($n-1)|tostring|length) as $w
| [limit($w; inputs)] | join("") | tonumber
| if . < $n then . else ($n | prn) end
end;
 
def prb: 2 | prn == 0;
 
def balanced:
{array: explode, parity: 0}
| until( .result | type == "boolean";
if .array == [] then .result = (.parity == 0)
else .parity += (.array[0] | if . == 91 then 1 else -1 end)
| if .parity < 0 then .result = false
else .array |= .[1:]
end
end ).result ;
 
def task($n):
if $n%2 == 1 then null
else [ (range(0; $n) | if prb then "[" else "]" end) // ""]
| add
| "\(.): \(balanced)"
end;
 
task(0),
task(2),
(range(0;10) | task(4))
</syntaxhighlight>
{{output}}
<pre>
: true
[[: false
[][[: false
][[[: false
]][[: false
[[]]: true
]][[: false
][[[: false
[[[[: false
[][[: false
][[[: false
[]][: false
</pre>
===Low entropy solution with `gsub`===
<syntaxhighlight lang=jq>
def prb: (now|tostring[-1:] | tonumber) % 2 == 0;
 
def balanced:
if length==0 then true
elif .[:1] == "]" then false
else test("[[][]]") and (gsub("[[][]]"; "") | balanced)
end;
 
def task($n):
if $n%2 == 1 then null
else
(reduce range(0; $n) as $i ("";
. + (if prb then "[" else "]" end) ))
| "\(.): \(balanced)"
end;
 
task(0),
task(2),
(range(0;10) | task(4))
</syntaxhighlight>
{{output}}
Similar to above.
 
=={{header|Julia}}==
<syntaxhighlight lang="julia">using Printf
 
function balancedbrackets(str::AbstractString)
Line 4,377 ⟶ 5,081:
 
'''One-line version''':
<syntaxhighlight lang="julia">balancedbrackets(str::AbstractString) = foldl((x, y) -> x < 0 ? -1 : x + y, collect((x == '[') - (x == ']') for x in str), init = 0) == 0</syntaxhighlight>
 
=={{header|K}}==
<syntaxhighlight lang=K"k">
gen_brackets:{"[]"@x _draw 2}
check:{r:(-1;1)@"["=x; *(0=+/cs<'0)&(0=-1#cs:+\r)}
Line 4,398 ⟶ 5,102:
 
=={{header|Klingphix}}==
<syntaxhighlight lang="text">"[[]][]]"
 
%acc 0 !acc
Line 4,419 ⟶ 5,123:
=={{header|Kotlin}}==
{{trans|FreeBASIC}}
<syntaxhighlight lang="scala">import java.util.Random
 
fun isBalanced(s: String): Boolean {
Line 4,474 ⟶ 5,178:
 
=={{header|L++}}==
<syntaxhighlight lang="lisp">(include "string")
(defn bool balanced (std::string s)
Line 4,491 ⟶ 5,195:
 
=={{header|Lasso}}==
<syntaxhighlight lang=Lasso"lasso">define randomparens(num::integer,open::string='[',close::string=']') => {
local(out) = array
 
Line 4,526 ⟶ 5,230:
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
print "Supplied examples"
for i =1 to 7
Line 4,612 ⟶ 5,316:
 
=={{header|Lua}}==
<syntaxhighlight lang=Lua"lua">
function isBalanced(s)
--Lua pattern matching has a 'balanced' pattern that matches sets of balanced characters.
Line 4,634 ⟶ 5,338:
print(isBalanced(RS))
</syntaxhighlight>
 
=={{header|M2000 Interpreter}}==
 
<syntaxhighlight lang="m2000 interpreter">
module Balanced_brackets{
// Generate a string with N opening brackets [ and with N closing brackets ], in some arbitrary order.
function randomBrackets(max as long) {
if max<1 then max=1
def putbracket()=mid$("[[[[]]",random(1,6),1)
dim a(random(1, max)) as string<<putbracket()
=a()#str$("")
}
// 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.
function check(s as string) {
long i, level
for i=1 to len(s)
if mid$(s,i,1)="[" then level++ else level--
if level<0 then exit for
next
=level=0
}
string k
boolean m
do
k=randomBrackets(10)
m=check(k)
print k;@(12);": ";if$(m->"OK", "NOT OK")
until m
}
Balanced_brackets
</syntaxhighlight>
{{out}}
<pre>
[[[] : NOT OK
[[][]] : OK
</pre>
 
=={{header|Maple}}==
This functionality is provided by Maple.
<syntaxhighlight lang=Maple"maple">
> use StringTools in
> IsBalanced( "", "[", "]" );
Line 4,671 ⟶ 5,411:
</syntaxhighlight>
Furthermore, Maple can check whether multiple fences are balanced in the same string.
<syntaxhighlight lang=Maple"maple">
> StringTools:-IsBalanced( "[()()]", "[(", "])" );
true
Line 4,677 ⟶ 5,417:
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">(* Generate open/close events. *)
gen[n_] := RandomSample[Table[{1, -1}, {n}] // Flatten]
 
Line 4,693 ⟶ 5,433:
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang="matlab">function x = isbb(s)
t = cumsum((s=='[') - (s==']'));
x = all(t>=0) && (t(end)==0);
Line 4,715 ⟶ 5,455:
 
=={{header|Maxima}}==
<syntaxhighlight lang="maxima">brack(s) := block(
[n: slength(s), r: 0, c],
catch(
Line 4,748 ⟶ 5,488:
 
=={{header|Mercury}}==
<syntaxhighlight lang=Mercury"mercury">
:- module balancedbrackets.
:- interface.
Line 4,795 ⟶ 5,535:
We start by defining a function:
 
<syntaxhighlight lang=MiniScript"miniscript">isBalanced = function(str)
level = 0
for c in str
Line 4,807 ⟶ 5,547:
We can evaluate the example strings with this code:
 
<syntaxhighlight lang=MiniScript"miniscript">examples = [
"",
"[]",
Line 4,836 ⟶ 5,576:
{{works with|TopSpeed (JPI) Modula-2 under DOSBox-X}}
An interesting point is how to ensure that all strings of N left plus N right brackets are equally likely. The program below shows one way of doing this.
<syntaxhighlight lang="modula2">
MODULE Brackets;
IMPORT IO, Lib;
Line 4,901 ⟶ 5,641:
=={{header|Nanoquery}}==
{{trans|Python}}
<syntaxhighlight lang=Nanoquery"nanoquery">import Nanoquery.Util
 
def gen(N)
Line 4,948 ⟶ 5,688:
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">
from random import random, randomize, shuffle
from strutils import repeat
Line 4,984 ⟶ 5,724:
'][[][]]]][[[[][]' is not balanced
'][][][][][[][[]]][' is not balanced</pre>
 
=={{header|Nu}}==
<syntaxhighlight lang="nu">
def gen_brackets [n: int] { 1..$in | each {["[" "]"]} | flatten | shuffle | str join }
 
def check_brackets [] {
split chars | reduce --fold 0 {|x, d|
if ($d < 0) {-1} else {
$d + (if ($x == "[") {1} else {-1})
}
} | $in > -1
}
 
 
1..10 | each {gen_brackets $in | {brackets: $in, valid: ($in | check_brackets)}} | print
</syntaxhighlight>
{{out}}
<pre>
╭───┬──────────────────────┬───────╮
│ # │ brackets │ valid │
├───┼──────────────────────┼───────┤
│ 0 │ ][ │ false │
│ 1 │ []][ │ false │
│ 2 │ [[][]] │ true │
│ 3 │ [[[][]]] │ true │
│ 4 │ ]]][[[[][] │ false │
│ 5 │ [][][][[[]]] │ true │
│ 6 │ ]]]]][]][[[[[[ │ false │
│ 7 │ ][[][]]]][[][[[] │ false │
│ 8 │ []]]][][][[][]][[[ │ false │
│ 9 │ ][][][[[[[]]]][[]][] │ false │
╰───┴──────────────────────┴───────╯
</pre>
 
=={{header|Oberon-2}}==
{{works with|oo2c version 2}}
<syntaxhighlight lang="oberon2">
MODULE BalancedBrackets;
IMPORT
Line 5,102 ⟶ 5,875:
 
=={{header|Objeck}}==
<syntaxhighlight lang="objeck">
bundle Default {
class Balanced {
Line 5,148 ⟶ 5,921:
=={{header|OCaml}}==
 
<syntaxhighlight lang="ocaml">let generate_brackets n =
let rec aux i acc =
if i <= 0 then acc else
Line 5,183 ⟶ 5,956:
=={{header|Oforth}}==
 
<syntaxhighlight lang=Oforth"oforth">String method: isBalanced
| c |
0 self forEach: c [
Line 5,211 ⟶ 5,984:
 
=={{header|ooRexx}}==
<syntaxhighlight lang=ooRexx"oorexx">
tests = .array~of("", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]")
 
Line 5,280 ⟶ 6,053:
 
=={{header|OxygenBasic}}==
<syntaxhighlight lang="oxygenbasic">function CheckBrackets(string s) as bool
'=======================================
sys co, le=len s
Line 5,310 ⟶ 6,083:
 
=={{header|PARI/GP}}==
<syntaxhighlight lang="parigp">balanced(s)={
my(n=0,v=Vecsmall(s));
for(i=1,#v,
Line 5,331 ⟶ 6,104:
Idiomatic solution, using a regex that performs subpattern recursion ''(works with Perl 5.10 and newer)'':
 
<syntaxhighlight lang=Perl"perl">sub generate {
my $n = shift;
my $str = '[' x $n;
Line 5,362 ⟶ 6,135:
If input strings are allowed to contain unrelated characters, this can be extended to:
 
<syntaxhighlight lang=Perl"perl">sub balanced {
shift =~ /^ ( [^\[\]]++ | \[ (?1)* \] )* $/x;
}</syntaxhighlight>
 
<code>Regexp::Common::balanced</code> can give such a regexp too (non-brackethere charsvia allowed).a subroutine Its recent versions use the subpattern recursion and are hence also only for Perl 5.10 and up.call)
 
<syntaxhighlight lang=Perl"perl">use Regexp::Common 'balancedRE_balanced';
my $re = qr/^$RE{balanced}{-parens=>'[]'}$/;
sub balanced {
return shift =~ $re;RE_balanced(-parens=>'[]')
}
}</syntaxhighlight>
</syntaxhighlight>
 
Alternative implementation, using straightforward depth counting:
 
<syntaxhighlight lang=Perl"perl">sub balanced {
my $depth = 0;
for (split //, shift) {
Line 5,386 ⟶ 6,159:
 
=={{header|Phix}}==
<!--<syntaxhighlight lang=Phix"phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">function</span> <span style="color: #000000;">check_brackets</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 5,435 ⟶ 6,208:
 
=={{header|Phixmonti}}==
<syntaxhighlight lang=Phixmonti"phixmonti">"[[]][]"
0 var acc
 
Line 5,456 ⟶ 6,229:
The sample is given as unix shell script, you need to have ''php-cli'' (or what your package manager calls it) installed.
 
<syntaxhighlight lang=PHP"php">#!/usr/bin/php
<?php
 
Line 5,507 ⟶ 6,280:
=={{header|Picat}}==
===Foreach loop===
<syntaxhighlight lang="picat">go1 ?=>
tests(Tests),
member(Test,Tests),
Line 5,550 ⟶ 6,323:
===DCG===
Here is an implementation using DCG (Definite Clause Grammars).
<syntaxhighlight lang=Picat"picat">go_dcg ?=>
tests(Tests),
foreach(Test in Tests)
Line 5,567 ⟶ 6,340:
 
=={{header|PicoLisp}}==
<syntaxhighlight lang=PicoLisp"picolisp">(load "@lib/simul.l") # For 'shuffle'
 
(de generateBrackets (N)
Line 5,597 ⟶ 6,370:
 
=={{header|PL/I}}==
<syntaxhighlight lang="pli">*process m or(!) s attributes source;
cb: Proc Options(main);
/* PL/I program to check for balanced brackets [] ********************
Line 5,689 ⟶ 6,462:
=={{header|PowerShell}}==
{{works with|PowerShell|2}}
<syntaxhighlight lang=PowerShell"powershell">
function Get-BalanceStatus ( $String )
{
Line 5,709 ⟶ 6,482:
}
</syntaxhighlight>
<syntaxhighlight lang=PowerShell"powershell">
# Test
$Strings = @( "" )
Line 5,731 ⟶ 6,504:
 
===PowerShell (Regex Version)===
<syntaxhighlight lang=PowerShell"powershell">
function Test-BalancedBracket
{
Line 5,803 ⟶ 6,576:
=={{header|Prolog}}==
DCG are very usefull for this kind of exercice !
<syntaxhighlight lang=Prolog"prolog">rosetta_brackets :-
test_brackets([]),
test_brackets(['[',']']),
Line 5,882 ⟶ 6,655:
 
=={{header|PureBasic}}==
<syntaxhighlight lang=PureBasic"purebasic">Procedure.s Generate(N)
For i=1 To N
sample$+"[]"
Line 5,937 ⟶ 6,710:
=={{header|Python}}==
===Procedural===
<syntaxhighlight lang="python">>>> def gen(N):
... txt = ['[', ']'] * N
... random.shuffle( txt )
Line 5,969 ⟶ 6,742:
Rather than explicitly track the count, we can just write the per-element test and use stdlib functions to turn it into a whole-sequence test. It's straightforwardly declarative, and hard to get wrong, but whether it's actually easier to understand depends on how familiar the reader is with thinking in `itertools` style.
 
<syntaxhighlight lang="python">>>> from itertools import accumulate
>>> from random import shuffle
>>> def gen(n):
Line 5,998 ⟶ 6,771:
The numpy library gives us a way to write just the elementwise tests and automatically turn them into whole-sequence tests, although it can be a bit clumsy to use for character rather than numeric operations. The simplicity of the final expression probably doesn't make up for all that extra clumsiness in this case.
 
<syntaxhighlight lang="python">>>> import numpy as np
>>> from random import shuffle
>>> def gen(n):
Line 6,026 ⟶ 6,799:
=={{header|Qi}}==
 
<syntaxhighlight lang="qi">(define balanced-brackets-0
[] 0 -> true
[] _ -> false
Line 6,052 ⟶ 6,825:
=={{header|Quackery}}==
 
<syntaxhighlight lang=Quackery"quackery"> [ char [ over of
swap
char ] swap of
Line 6,091 ⟶ 6,864:
=={{header|R}}==
 
<syntaxhighlight lang="r">balanced <- function(str){
str <- strsplit(str, "")[[1]]
str <- ifelse(str=='[', 1, -1)
Line 6,099 ⟶ 6,872:
Alternately, using perl 5.10-compatible regexps,
 
<syntaxhighlight lang="r">balanced <- function(str) {
regexpr('^(\\[(?1)*\\])*$', str, perl=TRUE) > -1
}</syntaxhighlight>
Line 6,105 ⟶ 6,878:
To generate some some examples:
 
<syntaxhighlight lang=R"r">rand.parens <- function(n) paste(sample(c("[","]"),2*n,replace=T),collapse="")
 
as.data.frame(within(list(), {
Line 6,113 ⟶ 6,886:
 
Output:
<syntaxhighlight lang="r"> balanced parens
1 FALSE ][][
2 FALSE [][[]]][[]][]]][[[
Line 6,127 ⟶ 6,900:
=={{header|Racket}}==
 
<syntaxhighlight lang=Racket"racket">
#lang racket
 
Line 6,154 ⟶ 6,927:
{{works with|Rakudo|2015.12}}
 
<syntaxhighlight lang="raku" linesline>sub balanced($s) {
my $l = 0;
for $s.comb {
Line 6,174 ⟶ 6,947:
===FP oriented===
Here's a more idiomatic solution using a hyperoperator to compare all the characters to a backslash (which is between the brackets in ASCII), a triangle reduction to return the running sum, a <tt>given</tt> to make that list the topic, and then a topicalized junction and a topicalized subscript to test the criteria for balance.
<syntaxhighlight lang="raku" linesline>sub balanced($s) {
.none < 0 and .[*-1] == 0
given ([\+] '\\' «leg« $s.comb).cache;
Line 6,186 ⟶ 6,959:
Of course, a Perl 5 programmer might just remove as many inner balanced pairs as possible and then see what's left.
{{works with|Rakudo|2015.12}}
<syntaxhighlight lang="raku" linesline>sub balanced($_ is copy) {
Nil while s:g/'[]'//;
$_ eq '';
Line 6,197 ⟶ 6,970:
===Parsing with a grammar===
{{works with|Rakudo|2015.12}}
<syntaxhighlight lang="raku" linesline>grammar BalBrack { token TOP { '[' <TOP>* ']' } }
 
my $n = prompt "Number of bracket pairs: ";
Line 6,204 ⟶ 6,977:
 
=={{header|Red}}==
<syntaxhighlight lang=Red"red">; Functional code
balanced-brackets: [#"[" any balanced-brackets #"]"]
rule: [any balanced-brackets end]
Line 6,229 ⟶ 7,002:
=={{header|REXX}}==
===with 40 examples===
<syntaxhighlight lang="rexx">/*REXX program checks for balanced brackets [ ] ─── some fixed, others random.*/
parse arg seed . /*obtain optional argument from the CL.*/
if datatype(seed,'W') then call random ,,seed /*if specified, then use as RANDOM seed*/
Line 6,313 ⟶ 7,086:
 
===with examples + 30 permutations===
<syntaxhighlight lang="rexx">
/*REXX program to check for balanced brackets [] **********************
* test strings and random string generation copied from Version 1
Line 6,430 ⟶ 7,203:
Naturally, each of the one hundred thousand character strings aren't displayed (for balanced/not-balanced),
<br>but a count is displayed, as anyone can generate the same strings in other languages and compare results.
<syntaxhighlight lang="rexx">/*REXX program checks for around 125,000 generated balanced brackets expressions [ ] */
bals=0
#=0; do j=1 until L>20 /*generate lots of bracket permutations*/
Line 6,457 ⟶ 7,230:
 
=={{header|Ring}}==
<syntaxhighlight lang="ring">
nr = 0
while nr < 10
Line 6,497 ⟶ 7,270:
bracket string [[]] is ok.
bracket string ]]]][]]]]]]]]] is not ok.
</pre>
 
=={{header|RPL}}==
{{works with|Halcyon Calc|4.2.7}}
1 OVER SIZE
'''WHILE''' DUP2 * 0 > '''REPEAT'''
3 PICK OVER DUP SUB
'''IF''' "[]" SWAP POS '''THEN'''
LAST 2 * 3 - ROT + SWAP '''END'''
1 -
'''END''' DROP
1 SAME "" "Not " '''IFTE''' "OK" +
≫ ''''BALBKT'''' STO
≪ { "" "[]" "[][]" "[[][]]" "][" "][][" "[]][[]" } → ts
1 ts SIZE '''FOR''' j
ts j GET '''BALBKT''' " → " SWAP + + '''NEXT'''
≫ ≫ ''''TASK'''' STO
{{out}}
<pre>
" → OK"
"[] → OK"
"[][] → OK"
"[[][]] → OK"
"][ → Not OK"
"][][ → Not OK"
"[]][[] → Not OK"
</pre>
 
Line 6,502 ⟶ 7,304:
{{trans|D}}
{{works with|Ruby|1.9}}
<syntaxhighlight lang="ruby">re = /\A # beginning of string
(?<bb> # begin capture group <bb>
\[ # literal [
Line 6,537 ⟶ 7,339:
 
=={{header|Run BASIC}}==
<syntaxhighlight lang="runbasic">dim brk$(10)
brk$(1) = "[[[][]]]"
brk$(2) = "[[[]][[[][[][]]]]]"
Line 6,575 ⟶ 7,377:
 
{{libheader|rand}}
<syntaxhighlight lang="rust">extern crate rand;
 
trait Balanced {
Line 6,634 ⟶ 7,436:
=== Scala Version 1 ===
{{works with|Scala|2.9.1}}
<syntaxhighlight lang="scala">import scala.collection.mutable.ListBuffer
import scala.util.Random
 
Line 7,045 ⟶ 7,847:
=== Scala Version 2 ===
{{works with|Scala|2.10.1}}
<syntaxhighlight lang="scala">import scala.util.Random.shuffle
 
object BalancedBracketsApp extends App {
Line 7,076 ⟶ 7,878:
Alternate implementation of "isBalanced" using tail-recursion instead of var and return:
 
<syntaxhighlight lang="scala">import scala.util.Random.shuffle
import scala.annotation.tailrec
 
Line 7,099 ⟶ 7,901:
Slightly modified implementation of "isBalanced" using tail-recursion
{{works with|Scala|2.11.7}}
<syntaxhighlight lang="scala">
@scala.annotation.tailrec
final def isBalanced(
Line 7,135 ⟶ 7,937:
 
=={{header|Scheme}}==
<syntaxhighlight lang="scheme">(define (balanced-brackets string)
(define (b chars sum)
(cond ((< sum 0)
Line 7,164 ⟶ 7,966:
=={{header|Scilab}}==
{{trans|MATLAB}}
<syntaxhighlight lang="text">function varargout=isbb(s)
st=strsplit(s);
t=cumsum((st=='[')-(st==']'));
Line 7,172 ⟶ 7,974:
{{out}}
The following code was used to generate random strings of length 5, 16, and 22 chars. It also displays the generated string, and the output (true of false) of <code>isbb()</code>.
<syntaxhighlight lang="text">for j=[5 16 22]
s=[];
for i=1:j
Line 7,200 ⟶ 8,002:
 
=={{header|Seed7}}==
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const func string: generateBrackets (in integer: count) is func
Line 7,273 ⟶ 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) {
 
var depth = 0
Line 7,301 ⟶ 8,146:
 
=={{header|Simula}}==
<syntaxhighlight lang="simula">BEGIN
INTEGER U;
U := ININT;
Line 7,396 ⟶ 8,241:
{{works with|PolyML}}
 
<syntaxhighlight lang="sml">fun isBalanced s = checkBrackets 0 (String.explode s)
and checkBrackets 0 [] = true
| checkBrackets _ [] = false
Line 7,406 ⟶ 8,251:
An example of usage
 
<syntaxhighlight lang="sml">val () =
List.app print
(List.map
Line 7,431 ⟶ 8,276:
=={{header|Stata}}==
 
<syntaxhighlight lang="stata">mata
function random_brackets(n) {
return(invtokens(("[","]")[runiformint(1,2*n,1,2)],""))
Line 7,469 ⟶ 8,314:
Checks balance function:
 
<syntaxhighlight lang="swift">import Foundation
 
func isBal(str: String) -> Bool {
Line 7,478 ⟶ 8,323:
}
</syntaxhighlight>output:<syntaxhighlight lang="swift">
isBal("[[[]]]") // true
 
isBal("[]][[]") // false
 
</syntaxhighlight>Random Bracket function:<syntaxhighlight lang="swift">
 
func randBrack(n: Int) -> String {
Line 7,499 ⟶ 8,344:
}
 
</syntaxhighlight>output:<syntaxhighlight lang="swift">
 
randBrack(2) // "]][["
 
</syntaxhighlight>Random check balance function:<syntaxhighlight lang="swift">
 
func randIsBal(n: Int) {
Line 7,518 ⟶ 8,363:
randIsBal(4)
 
</syntaxhighlight>output:<syntaxhighlight lang="swift">
 
// ][ is unbalanced
Line 7,529 ⟶ 8,374:
 
=={{header|Tcl}}==
<syntaxhighlight lang="tcl">proc generate {n} {
if {!$n} return
set l [lrepeat $n "\[" "\]"]
Line 7,577 ⟶ 8,422:
===Constructing correctly balanced strings===
It is, of course, possible to directly construct such a balanced string, this being much more useful as the length of the string to generate grows longer. This is done by conceptually building a random tree (or forest) and then walking the tree, with open brackets being appended when a node is entered from its root and close brackets being appended when a node is left for its root. This is equivalent to inserting a balanced pair of brackets at a random place in an initially-empty string <math>n</math> times, which might be done like this:
<syntaxhighlight lang="tcl">proc constructBalancedString {n} {
set s ""
for {set i 0} {$i < $n} {incr i} {
Line 7,591 ⟶ 8,436:
 
Generation program in Unix TMG:
<syntaxhighlight lang=UnixTMG"unixtmg">program: readint(n) [n>0] readint(seed)
loop: parse(render) [--n>0?]/done loop;
render: random(i, 15) [i = (i+1)*2] loop2 = { 1 * };
Line 7,619 ⟶ 8,464:
 
Analysis can be done easily using grammar specification, rather than counting brackets:
<syntaxhighlight lang=UnixTMG"unixtmg">loop: parse(corr)\loop parse(incorr)\loop;
corr: brkts * = { < OK: > 1 * };
brkts: brkt/null brkts = { 2 1 };
Line 7,642 ⟶ 8,487:
 
=={{header|TUSCRIPT}}==
<syntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
 
Line 7,692 ⟶ 8,537:
=={{header|TXR}}==
 
<syntaxhighlight lang="txr">@(define paren)@(maybe)[@(coll)@(paren)@(until)]@(end)]@(end)@(end)
@(do (defvar r (make-random-state nil))
 
Line 7,751 ⟶ 8,596:
== {{header|TypeScript}} ==
{{trans|JavaScript}}
<syntaxhighlight lang="javascript">// Balanced brackets
 
function isStringBalanced(str: string): bool {
Line 7,822 ⟶ 8,667:
=={{header|UNIX Shell}}==
{{works with|bash}}
<syntaxhighlight lang="bash">generate() {
local b=()
local i j tmp
Line 7,876 ⟶ 8,721:
=={{header|Ursala}}==
 
<syntaxhighlight lang=Ursala"ursala">#import std
#import nat
 
Line 7,903 ⟶ 8,748:
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">
Public Function checkBrackets(s As String) As Boolean
'function checks strings for balanced brackets
Line 7,987 ⟶ 8,832:
"]][][[[][]]][][[][][": Not OK
</pre>
{{omit from|GUISS}}
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">For n = 1 To 10
sequence = Generate_Sequence(n)
WScript.Echo sequence & " is " & Check_Balance(sequence) & "."
Line 8,042 ⟶ 8,886:
 
Antother version not using libraries. The generator works as intended (more difficult to do than the checking)
<syntaxhighlight lang="vb">
option explicit
 
Line 8,099 ⟶ 8,943:
 
=={{header|Visual Basic .NET}}==
<syntaxhighlight lang="vbnet">Module Module1
 
Private rand As New Random
Line 8,158 ⟶ 9,002:
</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">import datatypes as dt
 
fn is_valid(bracket string) bool {
Line 8,198 ⟶ 9,042:
=={{header|Wren}}==
{{trans|Kotlin}}
<syntaxhighlight lang=ecmascript"wren">import "random" for Random
 
var isBalanced = Fn.new { |s|
Line 8,251 ⟶ 9,095:
 
=={{header|X86 Assembly}}==
<syntaxhighlight lang=X86Assembly"x86assembly">
section .data
 
Line 8,323 ⟶ 9,167:
{{trans|JavaScript}}
{{works with|Windows XBasic}}
<syntaxhighlight lang="xbasic">' Balanced brackets
PROGRAM "balancedbrackets"
VERSION "0.001"
Line 8,448 ⟶ 9,292:
 
=={{header|XBS}}==
<syntaxhighlight lang="xbs">const Chars:[string] = ["[","]"];
func GenerateString(Amount:number=4):string{
set Result:string = "";
Line 8,480 ⟶ 9,324:
 
=={{header|XPL0}}==
<syntaxhighlight lang=XPL0"xpl0">include c:\cxpl\codes; \intrinsic code declarations
 
int N, I, C, Nest;
Line 8,517 ⟶ 9,361:
 
=={{header|Ya}}==
<syntaxhighlight lang=Ya"ya">@Balanced[]s // each source must be started by specifying its file name; std extension .Ya could be ommitted and auto added by compiler
 
// all types are prefixed by `
Line 8,556 ⟶ 9,400:
 
=={{header|Yabasic}}==
<syntaxhighlight lang=Yabasic"yabasic">sub check_brackets(s$)
local level, i
Line 8,576 ⟶ 9,420:
 
=={{header|zkl}}==
<syntaxhighlight lang="zkl">fcn bb(bs){ while(a:=bs.span("[","]")) {bs=bs[a[1],*]} (Void!=a) }</syntaxhighlight>
The span method finds the start and length of a balanced span. This algorithm assumes the string only contains brackets; a matched span is chopped off the front of the string and a new balanced span is searched for. Stops when the string is empty or unbalanced (span returns Void).
<pre>
Line 8,597 ⟶ 9,441:
=={{header|ZX Spectrum Basic}}==
{{trans|AWK}}
<syntaxhighlight lang="zxbasic">10 FOR n=1 TO 7
20 READ s$
25 PRINT "The sequence ";s$;" is ";
Line 8,615 ⟶ 9,459:
2000 DATA "[]","][","][][","[][]","[][][]","[]][[]","[[[[[]]]]][][][]][]["
</syntaxhighlight>
{{omit from|GUISS}}
Anonymous user