RosettaCodeData/Task/Non-continuous-subsequences/R/non-continuous-subsequences.r

18 lines
641 B
R

ncsub <- function(x)
{
n <- length(x)
a <- seq_len(n)
seqlist <- list()
for(i in 2:(n-1))
{
seqs <- combn(a, i) # Get all subseqs
ok <- apply(seqs, 2, function(x) any(diff(x)!=1)) # Find noncts ones
newseqs <- unlist(apply(seqs[,ok], 2, function(x) list(x)), recursive=FALSE) # Convert matrix to list of its columns
seqlist <- c(seqlist, newseqs) # Append to existing list
}
lapply(seqlist, function(index) x[index])
}
# Example usage
ncsub(1:4)
ncsub(letters[1:5])