const fs = require("fs"); const forwardRegex = /XMAS/; const backwardRegex = /SAMX/; const input = fs.readFileSync("input.txt", "utf-8"); const inputArr = input.split("\n"); let totalMatches = 0; // console.log(inputArr) // const forwardMatchs = input.match(forwardRegex) // console.log(input) // console.log(forwardMatchs.length) //create a sliding window to match the words let lineRegex = 0; for (row of inputArr) { // console.log(row) const forwardMatches = row.match(forwardRegex); const backwordsMatches = row.match(backwardRegex); if (forwardMatches) { lineRegex += forwardMatches.length; } if (backwordsMatches) { lineRegex += backwordsMatches.length; } } console.log("lineRegex: ", lineRegex); // console.log(inputArr) const maxRows = inputArr.length; const maxLetters = inputArr[0].length; //horizontal words for (let x = 0; x < maxRows; x++) { for (let y = 0; y + 3 < maxLetters; y++) { const word = inputArr[x][y] + inputArr[x][y + 1] + inputArr[x][y + 2] + inputArr[x][y + 3]; // console.log(word) if (word.match(forwardRegex) || word.match(backwardRegex)) { totalMatches++; } } } console.log("after horizontal: ", totalMatches); //vertical words for (let x = 0; x + 3 < maxRows; x++) { for (let y = 0; y < maxLetters; y++) { const word = inputArr[x][y] + inputArr[x + 1][y] + inputArr[x + 2][y] + inputArr[x + 3][y]; if (word.match(forwardRegex) || word.match(backwardRegex)) { totalMatches++; } } } console.log("after vertical: ", totalMatches); //angled words nw-se for (let x = 0; x + 3 < maxRows; x++) { for (let y = 0; y + 3 < maxLetters; y++) { const word = inputArr[x][y] + inputArr[x + 1][y + 1] + inputArr[x + 2][y + 2] + inputArr[x + 3][y + 3]; if (word.match(forwardRegex) || word.match(backwardRegex)) { totalMatches++; } } } console.log("after nw-se: ", totalMatches); //angled words ne-sw for (let x = 0; x + 3 < maxRows; x++) { for (let y = 0; y + 3 < maxLetters; y++) { const word = inputArr[x][y + 3] + inputArr[x + 1][y + 2] + inputArr[x + 2][y + 1] + inputArr[x + 3][y]; if (word.match(forwardRegex) || word.match(backwardRegex)) { totalMatches++; } // console.log(word); } } console.log("after ne-sw: ", totalMatches); console.log("totalMatches: ", totalMatches);