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>rand.parens <- function(n) paste(permute(c(rep('[',n),rep(']',n))),collapse="")
<lang r>balanced <- function(str){

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
}</lang>
}


#Alternately, using perl 5.10-compatible regexps
Alternately, using perl 5.10-compatible regexps,

balanced <- function(str) {
<lang r>balanced <- function(str) {
regexpr('^(\\[(?1)*\\])*$', str, perl=TRUE) > -1
regexpr('^(\\[(?1)*\\])*$', str, perl=TRUE) > -1
}</lang>
}

To generate some some examples:

<lang R>rand.parens <- function(n) paste(permute(c(rep('[',n),rep(']',n))),collapse="")


#generate some examples
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>
</lang>


Output:
Sample output:
<lang r> balanced parens
<lang r> balanced parens
1 FALSE ][][
1 FALSE ][][