对于上下文 Wordle 是一个游戏,您必须根据某些提示在 6 次或更少的猜测中破译 5 个字母的单词。你得到的提示如下:
- 如果一个字符被涂成黑色,则目标单词中没有与该字符匹配的字符。
- 如果一个字符是橙色的,那么在目标词中就有一个与该字符匹配的字符,但它位于不同的位置。
- 如果一个字符是绿色的,则位置和字符是匹配的。
我正在制作一个 wordle 求解器程序,该程序接受一系列单词尝试并将它们从可能的单词列表中消除。
我觉得解决这个问题的最佳算法是一个黑名单,其中一个违反规则的单词被从数组中删除。但如果有更好的选择,我愿意接受建议。
const text =
[
[
["N","black"],["i","black"],["g","black"],
["h","black"],["t","green"]
],
[
["b","black"],["e","black"],["l","orange"],
["o","orange"],["w","black"]
]
]
const words = "dozen,brave,apple,climb,outer,pitch,ruler,holds,fixed,costs,calls, ...etc"
const solver = (text: any) => {
this.resultingWords = words.split(",").filter(word => {
word = word.toUpperCase()
for (var i = 0; i < text.length; i++) {
for (var j = 0; j < 5; j++) {
let currentText = text[i][j]
currentText[0] = currentText[0].toUpperCase()
if (currentText[0] == '') { continue }
if (currentText[1] == "green" && (word[j] != currentText[0])) {
return false
}
if (currentText[1] == "black" && word.includes(currentText[0])) {
return false;
}
if (currentText[1] == "orange" &&
(word[j] == currentText[0] || !word.includes(currentText[0]))) {
return false
}
}
}
return true
})
}
我遇到的问题是,如果一个单词有多个相同的字母,其中一个是绿色或橙色匹配,而另一个是黑色。由于我编写算法的方式,我没有得到任何结果。
正确解决此问题的方法是什么?
过滤黑名单样式是最佳解决方案吗?(相对于白名单)。