Balanced brackets: Difference between revisions
Content added Content deleted
(Go solution) |
m (→{{header|R}}: reordering) |
||
Line 1,359: | Line 1,359: | ||
=={{header|R}}== |
=={{header|R}}== |
||
<lang r> |
<lang r>balanced <- function(str){ |
||
⚫ | |||
str <- strsplit(str, "")[[1]] |
str <- strsplit(str, "")[[1]] |
||
str <- ifelse(str=='[', 1, -1) |
str <- ifelse(str=='[', 1, -1) |
||
all(cumsum(str) >= 0) && sum(str) == 0 |
all(cumsum(str) >= 0) && sum(str) == 0 |
||
⚫ | |||
} |
|||
Alternately, using perl 5.10-compatible regexps, |
|||
balanced <- function(str) { |
|||
⚫ | |||
regexpr('^(\\[(?1)*\\])*$', str, perl=TRUE) > -1 |
regexpr('^(\\[(?1)*\\])*$', str, perl=TRUE) > -1 |
||
}</lang> |
|||
} |
|||
⚫ | |||
<lang R>rand.parens <- function(n) paste(permute(c(rep('[',n),rep(']',n))),collapse="") |
|||
⚫ | |||
as.data.frame(within(list(), { |
as.data.frame(within(list(), { |
||
parens <- replicate(10, rand.parens(sample.int(10,size=1))) |
parens <- replicate(10, rand.parens(sample.int(10,size=1))) |
||
balanced <- sapply(parens, balanced) |
balanced <- sapply(parens, balanced) |
||
})) |
}))</lang> |
||
⚫ | |||
Output: |
|||
Sample output: |
|||
<lang r> balanced parens |
<lang r> balanced parens |
||
1 FALSE ][][ |
1 FALSE ][][ |