another-wordle-solver
Version:
A very simple word enumerator
126 lines • 6.02 kB
JavaScript
;
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