40 lines
970 B
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 ;
|