如何生成词序列
How to generate word sequence
1.I 想要从给定的单词生成字符组合,每个字母最多连续重复 2 次,并且至少 1.The 个合成的单词长度不等。例如来自
"cat"
至
"cat", "catt", "caat", "caatt", "ccat", "ccatt", "ccaat", "ccaatt"
所需函数取一个长度为n的词并生成2^n个不等长的词。它几乎类似于具有 n 长度的二进制数字给出 2^n 组合。例如,一个 3 位二进制数给出
000 001 010 011 100 101 110 111
组合,其中 0=t 和 1=tt。
2.And 即使给定的单词有 letters.For 示例
的重复,同样的函数也应该限制结果序列最多连续重复一个字符 2
"catt"
至
"catt" "ccatt" "caatt" "ccaatt"
我试过这样的东西
pos=expand.grid(l1=c(1,11),l2=c(2,22),l3=c(3,33))
result=chartr('123','cat',paste0(pos[,1],pos[,2],pos[,3]))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"
它给出了正确的顺序,但我坚持将它推广到任何不同长度的给定单词。
谢谢。
正常使用标准输出...
打印("Hello, world!")
x="cat"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
chartr(n,x,do.call(paste0,expand.grid(m)))
1.Just Onyambu 给出的答案的补充,用于解决问题的第二部分,即在给定输入单词中任意数量的连续字符重复的情况下,将输出限制为最多连续重复 2 个字符.
x="catt"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
下面的代码行删除连续重复字符超过 2 个的单词
unique(gsub('([[:alpha:]])\1{2,}', '\1\1', o))
#[1] "catt" "ccatt" "caatt" "ccaatt"
2.If 你想要从 "cat" to "ccaattt"
开始的所有组合,给定输入单词中任意数量的连续字符重复。代码是
x1="catt"
下面一行代码将字符的连续重复限制为 1。
x2= gsub('([[:alpha:]])\1+', '\1', x1)
l=seq(nchar(x2))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
unique(gsub('([[:alpha:]])\1{2,}', '\1\1', o))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"
1.I 想要从给定的单词生成字符组合,每个字母最多连续重复 2 次,并且至少 1.The 个合成的单词长度不等。例如来自
"cat"
至
"cat", "catt", "caat", "caatt", "ccat", "ccatt", "ccaat", "ccaatt"
所需函数取一个长度为n的词并生成2^n个不等长的词。它几乎类似于具有 n 长度的二进制数字给出 2^n 组合。例如,一个 3 位二进制数给出
000 001 010 011 100 101 110 111
组合,其中 0=t 和 1=tt。
2.And 即使给定的单词有 letters.For 示例
的重复,同样的函数也应该限制结果序列最多连续重复一个字符 2"catt"
至
"catt" "ccatt" "caatt" "ccaatt"
我试过这样的东西
pos=expand.grid(l1=c(1,11),l2=c(2,22),l3=c(3,33))
result=chartr('123','cat',paste0(pos[,1],pos[,2],pos[,3]))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"
它给出了正确的顺序,但我坚持将它推广到任何不同长度的给定单词。
谢谢。
正常使用标准输出...
打印("Hello, world!")
x="cat"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
chartr(n,x,do.call(paste0,expand.grid(m)))
1.Just Onyambu 给出的答案的补充,用于解决问题的第二部分,即在给定输入单词中任意数量的连续字符重复的情况下,将输出限制为最多连续重复 2 个字符.
x="catt"
l=seq(nchar(x))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
下面的代码行删除连续重复字符超过 2 个的单词
unique(gsub('([[:alpha:]])\1{2,}', '\1\1', o))
#[1] "catt" "ccatt" "caatt" "ccaatt"
2.If 你想要从 "cat" to "ccaattt"
开始的所有组合,给定输入单词中任意数量的连续字符重复。代码是
x1="catt"
下面一行代码将字符的连续重复限制为 1。
x2= gsub('([[:alpha:]])\1+', '\1', x1)
l=seq(nchar(x2))
n=paste(l,collapse="")
m=split(c(l,paste0(l,l)),rep(l,2))
o <- chartr(n,x,do.call(paste0,expand.grid(m)))
unique(gsub('([[:alpha:]])\1{2,}', '\1\1', o))
#[1] "cat" "ccat" "caat" "ccaat" "catt" "ccatt" "caatt" "ccaatt"