Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 04

2024/day04.livemd

Day 04

Mix.install([:kino_aoc, :nx])

Section

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "4", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{:ok,
 "MASAMXMSSXXMAMXXMXMASXMASXMMSMSMMMAXMASASMMSSMSXAXMASMMSMMMSSMSASMSSSSMSMSMXXMXMAXAMXMSMSSXSAMXMSSXSXSXMASXMSASXMMXSXMSSSSSXSAMMAMXSXXMAAXSA\nMASMMXMASAXASMSMMMSAMXSMSAMXAAAAAXAMXASXAMAAAAMMSMMMMMASXAAAAMMAMAMMASAAAAXMXMSSSSSSMMSAMAXAXXSMAMSAMXASAXXASAMXASAMAXXMASAAAMAMAXXMASXSXSXS\nMMXAXMMMSXMAMAAXAAXAAAXXSMMSMSMSMXAXMXSMMMMSSMXAMXAAXMAMMMMSSMMAMAMMAMMMMMXSAAXAAMMAXXSAMXMSMAXMAMSMSSXMASMMMSXSXMAXMMSMMMMMMSASMSXMAMAXXSAM\nSXSAMASASMSXMSMSMSSMMMMMMXAMXMMXMASMMMMAXXAAAMMMSSSSSMASXXAAXASMSXXMXSXSXSASMSMMSMSAMMMAMXAAMASXMMSXMXMMMXASAXMSAASAMXSAAMXSXMASAXMMXSMSMMAM\nAAAXXXMASASXMXMAXXMMASAASMXSASASXAAAAMSSMMMSXMAAMMMMMXAXMMMMSAMXAMASAMXSAMASXXAXAAMAMXSAMXSXSMMASAMSMASAAMSMMSSXMAXASASMMSAMASAMAMSMAAXMASXM\nMSMMXXMMMAMAMMMMMMXSAXXAMMMMXSAXMMXXAMXAAMMXMASXMAAASMMXAAMXAXAMMMAMAMAMAMXMASXMMXMAAXMAXMAMXMSAMASXMAXMSXMAMXXXMASAMAMAXMMMAAXXAAAMXSXMMMAS\nMXAXAMXXMMMMSAMAASMMMSMMASASAMAMAXMSXMSMMXAMXAXMMSSXSASXSSSMAMSMXMXSAMSSSMAMXMXAMAXXMMSAXAXMMXMASMMMMSSMMASAMMAMSMMAMAXSMXXMSSSSSSMXAXMSSMMM\nASXMMXSAMXAASXXMXSAAAXASAMMMASMSSSMAAMMXMMSSMASAMAMMMAMMAXMAXMASXMAXMSAAASASAMXSSMXSAAXSSMXAAXXAXMAMXMAMSMMAXMAAAAMXMAMXASXAMAMXMXMMAXAAXAXS\nMAASMAMMSSMMSMSSXSMMXSMMASMSXMAAASMMMMAAMAMAMXAXAASMSSMMMMXSMSXSMXSXMXMXMSXMASAMAAAMMMMMMXXXSXMASMXMXMMMSXMSAMASMSMAXMASAAMXMMSSMASXXMXMAXMA\nSAMXMXSAXAMASMXAASXSMMAXXMASAMMMMMMXXXSXMASAMXMASXSAAMXXXMMXMXAXMAMAMXXAAMAXAMASMMMSMMXSMMMXMAAMXXAXSXSASASXSMAMAAXMMSMMXMAXSAAAMXSASMSSXSAS\nMMXSSXMXSAMASXXMXMAXAXXMSMMMXSAMXXMSXMMASXSXSXXAXMMMMMXMAXAMXMMMMASAMXSMSSSMSMMMMMAXXMAXAAAAXXSXXSASXAMAXXMAXMAMSMMSASXMAXMXMMSXSAMXMAAXASAM\nASAMXAMXSXMAMMMXAMSSSMSAXXXMSXASASXXAASAMXMAMAMSXXAXASASASXXSAAAMASAMAXXAAAMXASXSMXXAMASMMSMSAMAMXXXMMMSMXMMMXMXAAAMXSASXSSSXAAAMMAMMMMMAMAM\nMMMSSXMXMAMXMSMXMSAAAAMMMXMSMSMMAAMSSMXAMMMAMXMXXSXSMSAMXSMAMSXSXAXAMSMMMSMMSAMAXAMXXAXXXAAAMXXMMSMMMSAMXXSASASXSMMXMSAMAAAAMMSXMAAMAMAMXMAM\nXXAXMASMSAMAAAAASMMMMXMASMMAAAXMAMAAMMMSAMSAMSAXMAAMMMAMXMMMMAXXAMXSMMSMAXXXXAMSMMSASMMMMSMXMSMMAAAAAMMMXMMAMASAMAAAXMSMMMMMXXMASXSSSSXSASAS\nSASAMXMAMMSASMSMXASMMASXSASMSSXSAMMXAAAASASAMXMXAXMSASASMXAAMMSMMSAMXAAMASMMSMMXAXMXXAAXXAAASAAMSSSMSXMXSAMAMAMASMSMSAMXMMASMMXMMAAAAXASMSSM\nXAMASXSXSASAXMXMSXMASAXASMSAAXXMAMSSSMSAXMMMSAMXMSASASAMAMMMSAAMAMASMSXSAXAMAMXMXMASXSMMSXSXMAXMAAXAMASXMAMXSXMXMXAXMAMAMAAAXMSXMMMMMMXMXXXM\nMMMASMAAMMMAMASASAMXMASMMAMMMMMXMMXAMAMXMAAXMAXXXMAMXMMMSSMAMMXMXSXMAXMMMSSSXSMSAMXSAXMASMMMASXMXSXXXAMAXAMMSASMSSSMSASASMXSAMAMXXAASXMMSASX\nAXMAXXMXMXSAMMMAMAMXMXAMXSMSXASASMMAMXMSSXMSXSAMXMXMMXSXAAXMASXMXAMSXSAAXXAXXXAAXAAMMMXXMAMMAMAAAMMSMSSMMSSMSAMAAAAASASASAMXXAXMMSAXSAAXMASX\nSXMASXXXMAXASMMMMMSXMMASXAAXSXSXSASMMASMSAXMAXAMXXMAMASMSSMMAXAAASASASMMAAMMXMSMSMXSAMXMXSXMASMMMSAXMMAXSMAMMXMMMSMMMAMAMXMAMXMAMAMMSXMXMXMX\nMAMMAMXAMXSSMMXAAXAMASAMXMMASXSXSAMMSMSAXMASASAMMMAAMAXAMXXMMSMMAASMAMMXMMXSAAAAXMASASMMAMXXMAAAXMXSSMXMAXAMXAMSMMMSMSMSMAMMSAXMASAAXMMASAAX\nSAXSAXSXSXMMASMSSMXMMMASXXAAMMMAMAMAAMMMMAMMMMAMAASXMSSSXMAXMAXAXMXMSMAXXAASMMMSMXMSAMXMASMSSSSMMSAXMASAMSMSXMMAAAAAXAAXSAMMMMXXXMMXSMSASMSM\nMAMAXMMMXAASAMAMMMMMSSMSXSMXSAMSMMMSXSASAAXAAMAMSMMAMAAMAMXMSASXSXXXXAMXMMXSMSMXMAMMAMXSASAAXAAAXMAMSAMAXAMSASMSSMSSSMMMSMSAAXSSSXSMXAMXSXMX\nMSMSMMXSMSMMAXMASAMSAMXMASAAMXSAAXAMXSMSSSSSXSAXXXXAMMSMXXSXMASAXXMASAMXMSXXAAAASAXMAMMMMMMMMSAMMAMXMMXSMXMSAMAAAAXXMAXMXMSMMSAMAAMXSAMXXASM\nAMAMAXAMXXXSXMXAXMXMASAMXMMMSMSXSMMSAMXXAXAAXAXMASMSMSMXXXAMMMMMMSMXSMMSAMXMSMSMSMSSMMMASXSSMMXSMAXMASAMXXXMMMMMMXMMSMMSAMXASMAMMSMMAAXXMASM\nXMAMMMXSAMASMAMXSXXSAMAMSMMAAASMXXMAAASMXMMMMMXXXAAAMAMMMXMAAMAMAMXASAAAAMAAAAAMXMMASXSXMAMAAMAMXSXSAMXMAMXSXAMSMSAMAXAXAMAMMSSMXMXAXXMSAMXM\nSMXSAAAMAMAMMSMAXAMMXSAMAAXSMXXASXSMSMAMXAAXMXMMMMSMMAMSAAXSXSAMAMXXSMMSASXSMSMSAMSAMMSAMXMSAMXSAXMMXMAXAMAAMAMAAAXSASMSSMXSAAXMASASAMXSAASM\nAAAAMMSSXMASAAMSXSAMXSXSXSMXMASASAMXMAASASXMXAAXAXAASAXASXMMASXSASMMMXAXXMAAMXXXMMMXMAMAMXMXAMXSAXAXSXMXAMMXSAMMSMMMMSMAMXMMMSSMXAAXAAAMXMXM\nMMMSAAXMMMSMMSSMAMMMMMMMMXAXSXSAMXMAXXXSXAAMSSSXMXSXMXSMMSAMAMAMXSAAAMXMAMMMMMSMSXSMMMXMMAXSAMAMASMXMASXSMMASXSAMXSAMXMAMAXASXXMMMMMMMXMMSSM\nSAMAMMSMSMXAMMXMAMMSASASASAMMAMMMMMXMSAMXMXMAAMASMMXSMAXAXMMMMSMMMXSMSSSSSMAAAMMSAMMAMASXSMSAMXSASAXMAMAMAMMSAMXSASASXSMSMSXSXAMAAAAXSASAAXX\nSMSMXXA" <> ...}
# puzzle_input
search_box =
  puzzle_input
  |> String.split("\n", trim: true)
  |> Enum.map(&amp;String.to_charlist/1)
[~c"MASAMXMSSXXMAMXXMXMASXMASXMMSMSMMMAXMASASMMSSMSXAXMASMMSMMMSSMSASMSSSSMSMSMXXMXMAXAMXMSMSSXSAMXMSSXSXSXMASXMSASXMMXSXMSSSSSXSAMMAMXSXXMAAXSA",
 ~c"MASMMXMASAXASMSMMMSAMXSMSAMXAAAAAXAMXASXAMAAAAMMSMMMMMASXAAAAMMAMAMMASAAAAXMXMSSSSSSMMSAMAXAXXSMAMSAMXASAXXASAMXASAMAXXMASAAAMAMAXXMASXSXSXS",
 ~c"MMXAXMMMSXMAMAAXAAXAAAXXSMMSMSMSMXAXMXSMMMMSSMXAMXAAXMAMMMMSSMMAMAMMAMMMMMXSAAXAAMMAXXSAMXMSMAXMAMSMSSXMASMMMSXSXMAXMMSMMMMMMSASMSXMAMAXXSAM",
 ~c"SXSAMASASMSXMSMSMSSMMMMMMXAMXMMXMASMMMMAXXAAAMMMSSSSSMASXXAAXASMSXXMXSXSXSASMSMMSMSAMMMAMXAAMASXMMSXMXMMMXASAXMSAASAMXSAAMXSXMASAXMMXSMSMMAM",
 ~c"AAAXXXMASASXMXMAXXMMASAASMXSASASXAAAAMSSMMMSXMAAMMMMMXAXMMMMSAMXAMASAMXSAMASXXAXAAMAMXSAMXSXSMMASAMSMASAAMSMMSSXMAXASASMMSAMASAMAMSMAAXMASXM",
 ~c"MSMMXXMMMAMAMMMMMMXSAXXAMMMMXSAXMMXXAMXAAMMXMASXMAAASMMXAAMXAXAMMMAMAMAMAMXMASXMMXMAAXMAXMAMXMSAMASXMAXMSXMAMXXXMASAMAMAXMMMAAXXAAAMXSXMMMAS",
 ~c"MXAXAMXXMMMMSAMAASMMMSMMASASAMAMAXMSXMSMMXAMXAXMMSSXSASXSSSMAMSMXMXSAMSSSMAMXMXAMAXXMMSAXAXMMXMASMMMMSSMMASAMMAMSMMAMAXSMXXMSSSSSSMXAXMSSMMM",
 ~c"ASXMMXSAMXAASXXMXSAAAXASAMMMASMSSSMAAMMXMMSSMASAMAMMMAMMAXMAXMASXMAXMSAAASASAMXSSMXSAAXSSMXAAXXAXMAMXMAMSMMAXMAAAAMXMAMXASXAMAMXMXMMAXAAXAXS",
 ~c"MAASMAMMSSMMSMSSXSMMXSMMASMSXMAAASMMMMAAMAMAMXAXAASMSSMMMMXSMSXSMXSXMXMXMSXMASAMAAAMMMMMMXXXSXMASMXMXMMMSXMSAMASMSMAXMASAAMXMMSSMASXXMXMAXMA",
 ~c"SAMXMXSAXAMASMXAASXSMMAXXMASAMMMMMMXXXSXMASAMXMASXSAAMXXXMMXMXAXMAMAMXXAAMAXAMASMMMSMMXSMMMXMAAMXXAXSXSASASXSMAMAAXMMSMMXMAXSAAAMXSASMSSXSAS",
 ~c"MMXSSXMXSAMASXXMXMAXAXXMSMMMXSAMXXMSXMMASXSXSXXAXMMMMMXMAXAMXMMMMASAMXSMSSSMSMMMMMAXXMAXAAAAXXSXXSASXAMAXXMAXMAMSMMSASXMAXMXMMSXSAMXMAAXASAM",
 ~c"ASAMXAMXSXMAMMMXAMSSSMSAXXXMSXASASXXAASAMXMAMAMSXXAXASASASXXSAAAMASAMAXXAAAMXASXSMXXAMASMMSMSAMAMXXXMMMSMXMMMXMXAAAMXSASXSSSXAAAMMAMMMMMAMAM",
 ~c"MMMSSXMXMAMXMSMXMSAAAAMMMXMSMSMMAAMSSMXAMMMAMXMXXSXSMSAMXSMAMSXSXAXAMSMMMSMMSAMAXAMXXAXXXAAAMXXMMSMMMSAMXXSASASXSMMXMSAMAAAAMMSXMAAMAMAMXMAM",
 ~c"XXAXMASMSAMAAAAASMMMMXMASMMAAAXMAMAAMMMSAMSAMSAXMAAMMMAMXMMMMAXXAMXSMMSMAXXXXAMSMMSASMMMMSMXMSMMAAAAAMMMXMMAMASAMAAAXMSMMMMMXXMASXSSSSXSASAS",
 ~c"SASAMXMAMMSASMSMXASMMASXSASMSSXSAMMXAAAASASAMXMXAXMSASASMXAAMMSMMSAMXAAMASMMSMMXAXMXXAAXXAAASAAMSSSMSXMXSAMAMAMASMSMSAMXMMASMMXMMAAAAXASMSSM",
 ~c"XAMASXSXSASAXMXMSXMASAXASMSAAXXMAMSSSMSAXMMMSAMXMSASASAMAMMMSAAMAMASMSXSAXAMAMXMXMASXSMMSXSXMAXMAAXAMASXMAMXSXMXMXAXMAMAMAAAXMSXMMMMMMXMXXXM",
 ~c"MMMASMAAMMMAMASASAMXMASMMAMMMMMXMMXAMAMXMAAXMAXXXMAMXMMMSSMAMMXMXSXMAXMMMSSSXSMSAMXSAXMASMMMASXMXSXXXAMAXAMMSASMSSSMSASASMXSAMAMXXAASXMMSASX",
 ~c"AXMAXXMXMXSAMMMAMAMXMXAMXSMSXASASMMAMXMSSXMSXSAMXMXMMXSXAAXMASXMXAMSXSAAXXAXXXAAXAAMMMXXMAMMAMAAAMMSMSSMMSSMSAMAAAAASASASAMXXAXMMSAXSAAXMASX",
 ~c"SXMASXXXMAXASMMMMMSXMMASXAAXSXSXSASMMASMSAXMAXAMXXMAMASMSSMMAXAAASASASMMAAMMXMSMSMXSAMXMXSXMASMMMSAXMMAXSMAMMXMMMSMMMAMAMXMAMXMAMAMMSXMXMXMX",
 ~c"MAMMAMXAMXSSMMXAAXAMASAMXMMASXSXSAMMSMSAXMASASAMMMAAMAXAMXXMMSMMAASMAMMXMMXSAAAAXMASASMMAMXXMAAAXMXSSMXMAXAMXAMSMMMSMSMSMAMMSAXMASAAXMMASAAX",
 ~c"SAXSAXSXSXMMASMSSMXMMMASXXAAMMMAMAMAAMMMMAMMMMAMAASXMSSSXMAXMAXAXMXMSMAXXAASMMMSMXMSAMXMASMSSSSMMSAXMASAMSMSXMMAAAAAXAAXSAMMMMXXXMMXSMSASMSM",
 ~c"MAMAXMMMXAASAMAMMMMMSSMSXSMXSAMSMMMSXSASAAXAAMAMSMMAMAAMAMXMSASXSXXXXAMXMMXSMSMXMAMMAMXSASAAXAAAXMAMSAMAXAMSASMSSMSSSMMMSMSAAXSSSXSMXAMXSXMX",
 ~c"MSMSMMXSMSMMAXMASAMSAMXMASAAMXSAAXAMXSMSSSSSXSAXXXXAMMSMXXSXMASAXXMASAMXMSXXAAAASAXMAMMMMMMMMSAMMAMXMMXSMXMSAMAAAAXXMAXMXMSMMSAMAAMXSAMXXASM",
 ~c"AMAMAXAMXXXSXMXAXMXMASAMXMMMSMSXSMMSAMXXAXAAXAXMASMSMSMXXXAMMMMMMSMXSMMSAMXMSMSMSMSSMMMASXSSMMXSMAXMASAMXXXMMMMMMXMMSMMSAMXASMAMMSMMAAXXMASM",
 ~c"XMAMMMXSAMASMAMXSXXSAMAMSMMAAASMXXMAAASMXMMMMMXXXAAAMAMMMXMAAMAMAMXASAAAAMAAAAAMXMMASXSXMAMAAMAMXSXSAMXMAMXSXAMSMSAMAXAXAMAMMSSMXMXAXXMSAMXM",
 ~c"SMXSAAAMAMAMMSMAXAMMXSAMAAXSMXXASXSMSMAMXAAXMXMMMMSMMAMSAAXSXSAMAMXXSMMSASXSMSMSAMSAMMSAMXMSAMXSAXMMXMAXAMAAMAMAAAXSASMSSMXSAAXMASASAMXSAASM",
 ~c"AAAAMMSSXMASAAMSXSAMXSXSXSMXMASASAMXMAASASXMXAAXAXAASAXASXMMASXSASMMMXAXXMAAMXXXMMMXMAMAMXMXAMXSAXAXSXMXAMMXSAMMSMMMMSMAMXMMMSSMXAAXAAAMXMXM",
 ~c"MMMSAAXMMMSMMSSMAMMMMMMMMXAXSXSAMXMAXXXSXAAMSSSXMXSXMXSMMSAMAMAMXSAAAMXMAMMMMMSMSXSMMMXMMAXSAMAMASMXMASXSMMASXSAMXSAMXMAMAXASXXMMMMMMMXMMSSM",
 ~c"SAMAMMSMSMXAMMXMAMMSASASASAMMAMMMMMXMSAMXMXMAAMASMMXSMAXAXMMMMSMMMXSMSSSSSMAAAMMSAMMAMASXSMSAMXSASAXMAMAMAMMSAMXSASASXSMSMSXSXAMAAAAXSASAAXX",
 ~c"SMSMXXAAAAMMMMASASASASXMASAMXMAXAXSXMAAXMSXMAMXAMAMAMXSMMSXSXAAMXSMXXAAMAAMSMMSAMXMMASMSAMXSAMXMASXMMMSASAMAMXMAMASAMMSMAAXMMMSSSSSSSMAMMMMX",
 ~c"XAAXASMSMSMAAXXXAXMMMMAMAMAMXXSSMXXMAMXMAMASXSMMMAMAMMXXAAAXMSXSAMAAMMSMSSMMMAMXSAMSASAMXMASXMAMMMMAXMAXXMSAMXMAMXMAMAMMMXMSXAAMAAAXAMXMSASA",
 ~c"MXMXAMXAXMMSXSMMSMSSSSMMSSXMXXXAMXXSSSSMXSAMAMAAXSMMMAAMSMXXMAMMASASMAXMAAAAMMSASAXMSMXMXMASMXXXAAXMAMMAXMSXSASXSXSAMSSMSMASMMMSAMMMSXMXXASA",
 ~c"SASXSSSXMSXMAAAAXAAAXMASXMAAXXMSAMMAAAXAAMASAMMMAMASMSXAXXAXMSSSXMAXMXSMSSMMSMAXMMMXAMXXMXAXMASMSMXSAASMXAXXSAMSAASXMAAAXMAXXAASMAMAXAXXMMMM",
 ~c"SASAXAMXASAXSSSMMMMMMXMSASXMXMAXAXMMMMMMMMXAXXAMXXAMAMXSAMAMSAAXMMMMSXSAAXMASMMMMMXMMAMMAMSSMAXAAAASAMAAMSMXMSMMMMMMASMMXMMSMXMSSSMASMMAAAAA",
 ~c"MSMXMAMSSMMMXAAAXXMASMXSAMSAMXSMSMMASAAXMXAAMMXXSMSSXMXXASAMXMSMSAMXMAMMMMMMMMAAAAAAXMMAXXMMMMMSMMMSAXMMMMAXAXXAAAXXAXAMXAAAXMMMMMMAMMSXSMSS",
 ~c"SAMXSMMXXAAAMMMSAMXSMAAMAMMMXMXXAAMASXSXMSXSXSXASAMXAMXSXMAMMXMASASXMMMSXXSMMSSSSSSSSMSSSMXSAXXMAXAXXMXSAXMMMXSSSXMMSXMMSMSSSXSAAAMMXMXMMMXM",
 ~c"XAMMASMSSMMSMAAXXAXMXMMSMMASASXASXMASAMXXSAMAAMMMAMSAMAXMASXMAMMMAMXAMSMSXAAMXAAAAMAAAAAAAAMXXMXMMSSMSASMMXAXAXMAXSAMAMXSAMAAMASXMXMAMMSAXAM",
 ~c"SSMMSAMXAASMXMMSMMMSAMXXXSASASAXAAMAMAMMMMAMMXSASAMMAMXXXAXAMMSMSSSMSMSAXSSMMMMMMXMMMMMSMMMXMMAASAMAAMASAASXMMXMXXMAMXMMSAMMMMXASXSSXSASASMS",
 ~c"XAXSMMSSSMMXAMAAAAXMMSSMAXXMXMXSSXMXMAMAAMXMXASASASMSMXSAMXMMSAMMAAAXAMXMMMSMXSAMXSAAXXAMXSAASMMSAMMMMMMMMAAMAMSASMSMASASAMSMXSAMXAAAAXMAMAA",
 ~c"MXMXAAXMMMMSSMSSSSSMASAMSSMXXSAXAMMSSXSSSMSMMXMAMAMMXSAMXSAMXSASMSMMMSMMXMXAMXSAMXSSMMAMXAMMMMSASXMASMXSSMSSMASMASAXSMMASXMXMMAASMMMMMMMAMAM",
 ~c"MXXMMMSMXSAAAAAXAXAMMXAMAAAAMXXSAAAAXXMAMAXXMXMMMSMMXMXSASASASAMXXXAAXAMASAXMASXMMMMSMAXMMSXXAMMMMSAXSAMXAMXMMSMMMMXAXMAMXMASASMMAXSXSAMAXAX",
 ~c"MSMXAXXAAMMSMMMMSMSMMSMMXSMSXSMSXMMSMSMAMSMSMXMXMMAAMMXMASMMASAMXXSMXSXMAXAASASASXAAXXXMASAMMSMXMXMXSMXMMAMMMMXXXXXSMMMMSSXXAMMASMXAAMAMSMMS",
 ~c"AAASXMMMMSMAXXXAAMAAXSXSMXAMAAASAXMAXAAXMXAMXAXAMMXMAXAMMMMMAXAXMMXMXSAMASXXMASAMSMMAXMAMXASAMMSMAXMMMSASAMAAAAMXMXAXXXSAMMMMASAMXSMSMSMMAMX",
 ~c"SAXMSAAAAAMMMSMSSSMSMMAMAMAMXMSSMMMXASAMXMAMSMSXSSMSXMAXAAXMSSMMXMMSASMMMXXAMAMAMXMAXMASMSAMASASXSXSAAMXSAMSAMXAAAMMSMXMASAXSMMAMXAAMAXAMAMX",
 ~c"AMMASXMMSSSMASAMAAXXAMAMMSMMXXXXAAMXMMXXXMMMMAAAXMAXMASMSXSXAAXMAXSMAXXAXMSMMMSXMSMXMAXAMMMMAMXMAMAMMMSASMMXAXMSMSAMAMMSAMMXSAMAMXMSMMMSSSMM",
 ~c"SSMAMAMAMAAMAMAMXMMSAMXMXAAMAMMSSMSMXSXXMAXAMMMSMMSMXXMAXMSMSSMSXXAMSMSMSAMASAMXAAMSSSMSMAXAAXAMSMSMSXMASASMSMMAAXAMAMAMAMXMSAMXMMAMXXAAAAXX",
 ~c"MAMXSXMAMSMMXSXMASAMSMASMSSSMXAAXSAMAXMSSXSAMAAAAMMMSAMXMAXAXAMAXMXMXAMASXSAMASXMXSAAXAXSASMMSXSXAMAMXMXMXMAMMSASXSMSASMSMSXSMMAMMSMMMSSSMAA",
 ~c"SMMXMASAXMXMASASMSXSASMSAAAAMMMMSMMMMSMMAXAMSSSSXMAASXXMMAASMMMAXSAMMXMAMMMMSAMXMMMMSMMMMMSAASMMMSMAMSASMAMSMASAMAMAMAMAXXAAMXMSMMXAXMAAAXXM",
 ~c"XAMXXXASAMAMXSAMASMAMMXMXMMMMASXMMXSAAAMMAMMAXMMMSMAXMAXASMXAMMAXSASMSMASXSASAMMAAXAMMXAXASMMMAAAXXAMXAXMAMAMXMSMXMXMAMSMMMSMMMXAASAMAMSMMMM",
 ~c"SSMMSMAXXSXSAMAMAMAAXMAMXSMMSASMSMAMSSSMXMXMMSXAAXXAASMMMMASMMMXMSAMAAMXSXSAMAMXAMSASASASAMSXSSMSSSMMMAMSSSXSAAXMMMMSXMASXAXXXASMMMAAMXXXAAM",
 ...]

Part 1

defmodule CeresSearch do
  def rows(rows), do: rows |> Enum.map(&amp;count(&amp;1, 0)) |> Enum.sum()

  def count([], acc), do: acc
  def count(~c"XMAS" ++ rest, acc), do: count([?S | rest], acc + 1)
  def count(~c"SAMX" ++ rest, acc), do: count([?X | rest], acc + 1)
  def count([_ | rest], acc), do: count(rest, acc)

  def cols(rows) do
    rows
    |> Enum.zip()
    |> Enum.map(&amp;Tuple.to_list/1)
    |> rows()
    |> dbg()
  end

  def diagonals(rows) do
    map =
      for {row, x} <- Enum.with_index(rows),
          {val, y} <- Enum.with_index(row),
          into: %{},
          do: {{y, x}, val}

    {w, h} = Enum.max(Map.keys(map))

    0..max(w, h)
    |> gen_diagonals()
    |> then(fn diags ->
      Enum.map(diags, &amp;extract(map, &amp;1))
    end)
    |> rows()
  end

  def gen_diagonals(_..max//_ = range) do
    d1 =
      for n <- range do
        for(
          y <- 0..n,
          x = n - y,
          do: {y, x}
        )
      end

    d2 =
      for n <- range do
        for(
          y <- 0..n,
          x = max - n + y,
          do: {y, x}
        )
      end

    diag1 = d1 ++ d2

    diag2 =
      Enum.map(diag1, fn d ->
        Enum.map(d, fn {y, x} -> {max - y, x} end)
      end)

    Enum.uniq_by(diag1 ++ diag2, &amp;Enum.sort/1)
  end

  def extract(map, keys) do
    for key <- keys, val = map[key], do: val
  end

  def search_all(box) do
    cols(box) + rows(box) + diagonals(box)
  end
end
{:module, CeresSearch, <<70, 79, 82, 49, 0, 0, 31, ...>>, {:search_all, 1}}
CeresSearch.search_all(search_box)
2401

Part 2

map =
  for {row, x} <- Enum.with_index(search_box),
      {val, y} <- Enum.with_index(row),
      into: %{},
      do: {{y, x}, val}

Enum.count(map, fn
  {{y, x}, ?A} ->
    [map[{y + 1, x + 1}], map[{y - 1, x - 1}]] in [~c"MS", ~c"SM"] and 
      [map[{y - 1, x + 1}], map[{y + 1, x - 1}]] in [~c"MS", ~c"SM"]
  _ ->
    false
end)
1822