--- Day 4: Ceres Search ---

"Looks like the Chief's not here. Next!" One of The Historians pulls out a device and pushes the only button on it. After a brief flash, you recognize the interior of the Ceres monitoring station!

As the search for the Chief continues, a small Elf who lives on the station tugs on your shirt; she'd like to know if you could help her with her word search (your puzzle input). She only has to find one word: XMAS.

This word search allows words to be horizontal, vertical, diagonal, written backwards, or even overlapping other words. It's a little unusual, though, as you don't merely need to find one instance of XMAS - you need to find all of them. Here are a few ways XMAS might appear, where irrelevant characters have been replaced with .:

..X...
.SAMX.
.A..A.
XMAS.S
.X....
The actual word search will be full of letters instead. For example:

MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX
In this word search, XMAS occurs a total of 18 times; here's the same word search again, but where letters not involved in any XMAS have been replaced with .:

....XXMAS.
.SAMXMS...
...S..A...
..A.A.MS.X
XMASAMX.MM
X.....XA.A
S.S.S.S.SS
.A.A.A.A.A
..M.M.M.MM
.X.X.XMASX
Take a look at the little Elf's word search. How many times does XMAS appear?

Your puzzle answer was 2434.

--- Part Two ---

The Elf looks quizzically at you. Did you misunderstand the assignment?

Looking for the instructions, you flip over the word search to find that this isn't actually an XMAS puzzle; it's an X-MAS puzzle in which you're supposed to find two MAS in the shape of an X. One way to achieve that is like this:

M.S
.A.
M.S
Irrelevant characters have again been replaced with . in the above diagram. Within the X, each MAS can be written forwards or backwards.

Here's the same example from before, but this time all of the X-MASes have been kept instead:

.M.S......
..A..MSMS.
.M.S.MAA..
..A.ASMSM.
.M.S.M....
..........
S.S.S.S.S.
.A.A.A.A..
M.M.M.M.M.
..........
In this example, an X-MAS appears 9 times.

Flip the word search from the instructions back over to the word search side and try again. How many times does an X-MAS appear?
const fs = require("fs");
const filename = "input.txt";

var buffer, input, rows;

try {
  buffer = fs.readFileSync(__dirname + "/" + filename, "utf8");
} catch (e) {
  throw e;
}

input = buffer.toString();
rows = input.split("\n").map(el => el.split(""));

function find_xmas(letter, i, j) {
  let total = 0;
  if (letter !== 'A') return total; // This aint it fam

  // If the coords exists, check for the letter
  // M ? S
  // ? A ?
  // M ? S
  if (rows[i - 1] && rows[i - 1][j - 1] && rows[i - 1][j - 1] === "M") {
    if (rows[i - 1] && rows[i - 1][j + 1] && rows[i - 1][j + 1] === "S") {
      if (rows[i + 1] && rows[i + 1][j - 1] && rows[i + 1][j - 1] === "M") {
        if (rows[i + 1] && rows[i + 1][j + 1] && rows[i + 1][j + 1] === "S") {
          total++;
        }
      }
    }
  }

  // M ? M
  // ? A ?
  // S ? S
  if (rows[i - 1] && rows[i - 1][j - 1] && rows[i - 1][j - 1] === "M") {
    if (rows[i - 1] && rows[i - 1][j + 1] && rows[i - 1][j + 1] === "M") {
      if (rows[i + 1] && rows[i + 1][j - 1] && rows[i + 1][j - 1] === "S") {
        if (rows[i + 1] && rows[i + 1][j + 1] && rows[i + 1][j + 1] === "S") {
          total++;
        }
      }
    }
  }

  // S ? S
  // ? A ?
  // M ? M
  if (rows[i - 1] && rows[i - 1][j - 1] && rows[i - 1][j - 1] === "S") {
    if (rows[i - 1] && rows[i - 1][j + 1] && rows[i - 1][j + 1] === "S") {
      if (rows[i + 1] && rows[i + 1][j - 1] && rows[i + 1][j - 1] === "M") {
        if (rows[i + 1] && rows[i + 1][j + 1] && rows[i + 1][j + 1] === "M") {
          total++;
        }
      }
    }
  }

  // S ? M
  // ? A ?
  // S ? M
  if (rows[i - 1] && rows[i - 1][j - 1] && rows[i - 1][j - 1] === "S") {
    if (rows[i - 1] && rows[i - 1][j + 1] && rows[i - 1][j + 1] === "M") {
      if (rows[i + 1] && rows[i + 1][j - 1] && rows[i + 1][j - 1] === "S") {
        if (rows[i + 1] && rows[i + 1][j + 1] && rows[i + 1][j + 1] === "M") {
          total++;
        }
      }
    }
  }


  return total;
}

let found_xmass = 0;

for (let i = 0; i < rows.length; i++) {
  for (let j = 0; j < rows[i].length; j++) {
    found_xmass += find_xmas(rows[i][j], i, j);
  }
}

console.log({ found_xmass });