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 = "
  • Подходящих слов не найдено
  • "; } else { console.log("Найденные слова:", possibleWords); possibleWords.forEach((word) => { const listItem = document.createElement("li"); listItem.textContent = word; resultsList.appendChild(listItem); }); } }); // Загружаем словарь при старте loadDictionary();