r-我如何编写一个程序,接受字符输入,然后根据它们可能形成的单词列表检查字符



我正在努力编写一个程序,该程序接受用户的字符输入,然后检查一个预设单词列表,该单词可以由给定的字符组成。它要求5个单独的字符,并根据这些字符创建一个列表,重复5次,总共25个字符。这意味着表示组合锁的功能,该组合锁具有5个单独的表盘,每个表盘包含5个字母。

征求意见并定义一些列表:`

letters <- list()
possible <- list()

for (i in 1:5){
var1 = as.character(readline(prompt = 'First Letter: '))
var2 = as.character(readline(prompt = 'Second Letter: '))
var3 = as.character(readline(prompt = 'Third Letter: '))
var4 = as.character(readline(prompt = 'Fourth Letter: '))
var5 = as.character(readline(prompt = 'Fifth Letter: '))
tmp <- list(var1, var2, var3, var4, var5)
letters <- tmp
}

`

key <- list(some 5 letter words)

有了这个程序,字符的顺序就很重要了。例如,如果第一组输入是(a,r,v,s,t(,我只想检查每个单词的第一个字母是否是其中之一。现在我只使用R(和一般的编码(大约一周了,所以如果我试图创建这个程序冒犯了那些更有经验的人,我很抱歉:

`

for (j in keys){
for (i in letters){
for (k in 1:5){
if (letters[[i]][k] %in% substr(keys[[j]], 1, 1){
possible <- rep(keys[[j]]
{

}
}

}

}

`

我碰到了一堵墙,不知道该怎么继续。我确信有更有效的方法可以做到这一点,但我完全陷入了困境。

虽然这个程序是围绕组合锁建模的,但我不打算用它来解决实际的组合锁。这只是一个思想实验,所以我可以进行一些编码练习

以下是我理解您的问题的有效解决方案:

find_possible_words = function(dictionary, n_dials) {
dials = character(n_dials)
for(i in 1:n_dials) {
dials[i] = readline(prompt = paste0("Please input the letters on dial #", i, " "))
}
regex_pattern = paste("[", dials, "]", sep = "", collapse = "")
grep(pattern = regex_pattern, x = dictionary, ignore.case = TRUE, value = TRUE)
}
find_possible_words(dictionary = c("cat", "dog", "rat", "try"), n_dials = 3)
# Please input the letters on dial #1 abcd
# Please input the letters on dial #2 aor
# Please input the letters on dial #3 tgb
# [1] "cat" "dog"

其主要思想是使用正则表达式来搜索字典。CCD_ 2的正则表达式模式匹配";x〃"y"z";,并且[xyz][abc]的模式将匹配x或y或z,然后是a或b或c,依此类推。因此,我们将每个字母的选择放在方括号中,并将它们粘在一起,然后使用grep在字典中查找与模式匹配的单词。

最新更新