36 lines
930 B
Factor
36 lines
930 B
Factor
! Copyright (c) 2012 Anonymous
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: combinators kernel locals math sequences ;
|
|
IN: rosetta-code.balanced-brackets
|
|
|
|
! http://rosettacode.org/wiki/Balanced_brackets
|
|
|
|
! Task:
|
|
|
|
! 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.
|
|
|
|
! Examples:
|
|
|
|
! (empty) OK
|
|
! [] OK ][ NOT OK
|
|
! [][] OK ][][ NOT OK
|
|
! [[][]] OK []][[] NOT OK
|
|
|
|
:: balanced? ( str -- ? )
|
|
0 :> counter!
|
|
t :> ok!
|
|
str [
|
|
{
|
|
{ CHAR: [ [ 1 ] }
|
|
{ CHAR: ] [ -1 ] }
|
|
[ drop 0 ]
|
|
} case counter + counter!
|
|
counter 0 < [ f ok! ] when
|
|
] each
|
|
ok [ counter 0 <= ] [ f ] if ;
|