This commit is contained in:
104
script.js
Normal file
104
script.js
Normal file
@@ -0,0 +1,104 @@
|
||||
let dictionary = []; // Словарь будет загружен из файла
|
||||
|
||||
// Функция для загрузки слов из файла
|
||||
async function loadDictionary() {
|
||||
try {
|
||||
const response = await fetch("words.txt");
|
||||
if (!response.ok) {
|
||||
console.error("Ошибка загрузки файла:", response.statusText);
|
||||
return;
|
||||
}
|
||||
const text = await response.text();
|
||||
dictionary = text
|
||||
.split(/\s+/)
|
||||
.map(word => word.trim())
|
||||
.filter(word => word.length === 5);
|
||||
|
||||
console.log("Словарь успешно загружен. Количество слов:", dictionary.length);
|
||||
} catch (error) {
|
||||
console.error("Ошибка при загрузке словаря:", error);
|
||||
}
|
||||
}
|
||||
|
||||
// Основная функция для фильтрации слов
|
||||
function calculatePossibleWords(mask, incorrectMasks, excluded) {
|
||||
const maskRegex = new RegExp(`^${mask.replace(/_/g, ".")}$`, "i");
|
||||
const excludedLetters = excluded
|
||||
.split("")
|
||||
.map((l) => l.trim())
|
||||
.filter(Boolean); // Убираем пустые символы
|
||||
|
||||
// Преобразуем неправильные маски в формат [ "_", "_", "_" ]
|
||||
const forbiddenPositions = Array(5).fill(null).map(() => new Set());
|
||||
const requiredLetters = new Set();
|
||||
|
||||
incorrectMasks.forEach((mask) => {
|
||||
for (let i = 0; i < mask.length; i++) {
|
||||
const letter = mask[i];
|
||||
if (letter && letter !== "_") {
|
||||
forbiddenPositions[i].add(letter); // Запрещённая буква на конкретной позиции
|
||||
requiredLetters.add(letter); // Эти буквы должны присутствовать в слове
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return dictionary.filter(word => {
|
||||
// Проверяем соответствие маске (буквы на своих местах)
|
||||
if (!maskRegex.test(word)) return false;
|
||||
|
||||
// Проверяем отсутствие букв из исключённого списка
|
||||
if (excludedLetters.some(letter => word.includes(letter))) return false;
|
||||
|
||||
// Проверяем присутствие всех обязательных букв
|
||||
if (!Array.from(requiredLetters).every(letter => word.includes(letter))) return false;
|
||||
|
||||
// Проверяем, что буквы из неправильных масок не находятся на запрещённых позициях
|
||||
for (let i = 0; i < word.length; i++) {
|
||||
if (forbiddenPositions[i].has(word[i])) {
|
||||
return false; // Буква находится на запрещённой позиции
|
||||
}
|
||||
}
|
||||
|
||||
return true; // Слово прошло все проверки
|
||||
});
|
||||
}
|
||||
|
||||
// Обработчик для кнопки "Рассчитать"
|
||||
document.getElementById("calculate-btn").addEventListener("click", () => {
|
||||
const maskInputs = document.querySelectorAll(".mask-letter");
|
||||
const incorrectMaskContainers = document.querySelectorAll(".incorrect-mask-container");
|
||||
|
||||
let mask = Array.from(maskInputs).map((input) => input.value || "_").join("");
|
||||
let incorrectMasks = Array.from(incorrectMaskContainers).map(container =>
|
||||
Array.from(container.querySelectorAll(".incorrect-mask-letter"))
|
||||
.map(input => input.value || "_")
|
||||
.join("")
|
||||
);
|
||||
|
||||
const excluded = document.getElementById("excluded-letters").value.toLowerCase();
|
||||
|
||||
console.log("Введенные данные:");
|
||||
console.log("Маска:", mask);
|
||||
console.log("Неправильные маски:", incorrectMasks);
|
||||
console.log("Исключенные буквы:", excluded);
|
||||
|
||||
const possibleWords = calculatePossibleWords(mask, incorrectMasks, excluded);
|
||||
|
||||
const resultsList = document.getElementById("results-list");
|
||||
resultsList.innerHTML = "";
|
||||
|
||||
if (possibleWords.length === 0) {
|
||||
console.log("Слов не найдено.");
|
||||
resultsList.innerHTML = "<li>Подходящих слов не найдено</li>";
|
||||
} else {
|
||||
console.log("Найденные слова:", possibleWords);
|
||||
possibleWords.forEach((word) => {
|
||||
const listItem = document.createElement("li");
|
||||
listItem.textContent = word;
|
||||
resultsList.appendChild(listItem);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Загружаем словарь при старте
|
||||
loadDictionary();
|
||||
Reference in New Issue
Block a user