1 ! Copyright (c) 2023 Alexander Ilin
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: combinators formatting kernel math random sequences
5 IN: rosetta-code.balanced-brackets
7 ! https://rosettacode.org/wiki/Balanced_brackets
11 ! Generate a string with N opening brackets (“[”) and N closing
12 ! brackets (“]”), in some arbitrary order.
14 ! Determine whether the generated string is balanced; that is,
15 ! whether it consists entirely of pairs of opening/closing
16 ! brackets (in that order), none of which mis-nest.
23 ! [[][]] OK []][[] NOT OK
25 : balanced? ( str -- ? )
29 { CHAR: ] [ 1 - dup 0 >= ] }
32 ] all? swap zero? and ;
34 : bracket-pairs ( n -- str )
35 [ "[]" ] replicate "" concat-as ;
37 : balanced-brackets-main ( -- )
38 5 bracket-pairs randomize dup balanced? "" "not " ?
39 "String \"%s\" is %sbalanced.\n" printf ;
41 MAIN: balanced-brackets-main