factor/extra/rosetta-code/balanced-brackets/balanced-brackets.factor

40 lines
970 B
Factor

! Copyright (c) 2012 Anonymous
! See http://factorcode.org/license.txt for BSD license.
USING: io formatting locals kernel math sequences unicode.case ;
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!
1 :> ok!
str
[ dup length 0 > ]
[ 1 cut swap
"[" = [ counter 1 + counter! ] [ counter 1 - counter! ] if
counter 0 < [ 0 ok! ] when
]
while
drop
ok 0 =
[ "NO" ]
[ counter 0 > [ "NO" ] [ "YES" ] if ]
if
print ;