filteredWords = {
if (!wordleInput || !wordleInput.querySelector) return smallerSet;
const letters = Array.from(wordleInput.querySelectorAll('.letter-input'))
.map(input => input.value.toLowerCase());
const results = Array.from(wordleInput.querySelectorAll('.result-select'))
.map(select => parseInt(select.value));
if (letters.some(l => !l)) return smallerSet;
let correctPositions = {};
let presentLetters = new Set();
let absentLetters = new Set();
let wrongPositions = {};
letters.forEach((letter, i) => {
if (results[i] === 2) {
correctPositions[i] = letter;
} else if (results[i] === 1) {
presentLetters.add(letter);
if (!wrongPositions[letter]) wrongPositions[letter] = new Set();
wrongPositions[letter].add(i);
} else {
if (!presentLetters.has(letter) &&
!Object.values(correctPositions).includes(letter)) {
absentLetters.add(letter);
}
}
});
return smallerSet.filter(word => {
for (let [pos, letter] of Object.entries(correctPositions)) {
if (word[pos] !== letter) return false;
}
for (let letter of presentLetters) {
if (!word.includes(letter)) return false;
if (wrongPositions[letter]) {
for (let pos of wrongPositions[letter]) {
if (word[pos] === letter) return false;
}
}
}
for (let letter of absentLetters) {
if (word.includes(letter)) return false;
}
return true;
});
}