UNPKG

another-wordle-solver

Version:
126 lines 6.02 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const readline_sync_1 = __importDefault(require("readline-sync")); const fs = __importStar(require("fs")); const os = __importStar(require("os")); const word_list_1 = __importDefault(require("word-list")); let result = []; function replaceAt(str, index, ch) { return str.replace(/./g, (c, i) => i == index ? ch : c); } let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; console.log(" _______________________________________________________________"); console.log("| |"); console.log("| Simple word enumerator for WORDLE |"); console.log("|_______________________________________________________________|"); console.log(""); const wordArray = fs.readFileSync(word_list_1.default, 'utf8').split('\n'); var letterCount = readline_sync_1.default.question('Enter word letter count - useful when there is no pattern: (default is 5)') || 5; let pattern = readline_sync_1.default.question('Enter known letters - leave empty for non (For example if last three letter are known in "HELLO" word. You can use the following pattern **LLO): '); let hasKnownCharacters = readline_sync_1.default.question('Is there any known characters which you do not know the exact places (yes/no - default is no)? '); let knownCharacterArray; let saveToFile = false; if (hasKnownCharacters.toLowerCase() == 'y' || hasKnownCharacters.toLowerCase() == 'yes' || hasKnownCharacters.toLowerCase() == 'ye') { let characters = readline_sync_1.default.question("Enter characters comma seperated (like A, B, C):"); knownCharacterArray = characters.split(',').map(item => item.trim()); } let hasDeletedCharacters = readline_sync_1.default.question('Is there any known characters which are deleted? (yes/no - default is no)? '); let deletedCharacterArray; if (hasDeletedCharacters.toLowerCase() == 'y' || hasDeletedCharacters.toLowerCase() == 'yes' || hasDeletedCharacters.toLowerCase() == 'ye') { let characters = readline_sync_1.default.question("Enter characters that are deleted, comma seperated (like A, B, C):"); deletedCharacterArray = characters.split(',').map(item => item.trim()); if (deletedCharacterArray.length != 0) { deletedCharacterArray.forEach(character => { letters = letters.replace(character, ""); }); } } let writeToFile = readline_sync_1.default.question('Write results to file in home directory? (yes/no - default is no)? '); if (writeToFile.toLowerCase() == 'y' || writeToFile.toLowerCase() == 'yes' || writeToFile.toLowerCase() == 'ye') { saveToFile = true; } if (!pattern) pattern = '*'.repeat(letterCount); console.log("Selected pattern is " + pattern); console.log(""); var starCount = [...pattern].map(b => b == "*" ? 1 : 0).reduce((a, b) => a + b, 0); const starIndexes = [...pattern].map((b, index) => b == "*" ? index : -1).filter(item => item != -1); let resultItem = pattern; let start = async function () { await print(starCount); result = result.filter(item => { if (wordArray.indexOf(item.toLowerCase()) == -1) return false; let thisItemHasKnownChars = true; if (knownCharacterArray) { knownCharacterArray.forEach(knownChar => { if (item.indexOf(knownChar) == -1) { thisItemHasKnownChars = false; thisItemHasKnownChars = false; } }); } return thisItemHasKnownChars; }); if (saveToFile) { let filePath = os.homedir() + "/result_" + new Date().getUTCMilliseconds() + ".txt"; fs.writeFileSync(filePath, result.join("\r\n")); console.log("File saved successfully at " + filePath); } else { if (result.length == 0) { console.info("Sorry :( No words!"); console.log(""); } else { for (let index = 0; index < result.length; index++) { const element = result[index]; console.log(element); console.log(" "); await new Promise(resolve => setTimeout(resolve, 100)); } } } console.log("Done!"); }; start(); async function print(level) { for (let index = 0; index < [...letters].length; index++) { if (level == starCount) resultItem = pattern; let letter = [...letters][index]; if (level > 1) { let replaceIndex = starCount - level; resultItem = replaceAt(resultItem, starIndexes[replaceIndex], letter); print(level - 1); } else if (level == 1) { let replaceIndex = starCount - level; result.push(replaceAt(resultItem, starIndexes[replaceIndex], letter)); } } } //# sourceMappingURL=index.js.map