コンテキストについては、Wordle は、特定のヒントに基づいて 6 回以下の推測で 5 文字の単語を解読する必要があるゲームです。得られるヒントは次のとおりです。
- 文字が黒く着色されている場合、その文字に一致する文字はターゲット単語にありません。
- 文字がオレンジ色の場合、その文字と一致する文字がターゲット ワード内にありますが、位置が異なります。
- 文字が緑色に着色されている場合、位置と文字は一致しています。
私は、一連の単語試行を取り、可能な単語のリストからそれらを削除する wordle ソルバー プログラムを作成しています。
この問題を解決するための最良のアルゴリズムは、ルールの 1 つに違反する単語を配列から除外するブラック リストだと思います。しかし、より良い代替案があれば、私は提案を受け入れます.
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
})
}
私が抱えている問題は、単語に同じ文字が複数あり、そのうちの 1 つが緑またはオレンジの一致で、もう 1 つが黒である場合です。アルゴリズムの書き方が原因で、結果が得られません。
この問題を正しく解決する方法は何でしょうか?
ブラック リスト スタイルのフィルタリングは最適なソリューションですか? (ホワイトリストとは対照的に)。