21 lines
897 B
Text
21 lines
897 B
Text
Rebol [
|
|
title: "Rosetta code: Balanced brackets"
|
|
file: %Balanced_brackets.r3
|
|
url: https://rosettacode.org/wiki/Balanced_brackets
|
|
]
|
|
|
|
;; Returns TRUE if all square brackets in `str` are properly nested and balanced
|
|
balanced?: function/with [str][parse str rule][
|
|
;; Recursive rule: a balanced group is [ followed by any nested balanced groups, then ]
|
|
balanced-brackets: [#"[" any balanced-brackets #"]"]
|
|
;; Full string must consist entirely of balanced groups with nothing left over
|
|
rule: [any balanced-brackets end]
|
|
]
|
|
|
|
;; Test: generate 10 random substrings of bracket pairs and check each
|
|
random/seed 2
|
|
repeat i 10 [
|
|
str: random copy/part "[][][][][][][][][][]" i * 2 ;; shuffle first i*2 chars
|
|
res: pick ["balanced" "unbalanced"] balanced? str ;; label the result
|
|
printf [-2 ". " 11] reduce [i res mold str] ;; print index, verdict, string
|
|
]
|