Powered by AppSignal & Oban Pro

Advent of Code 2024 Day 4 Part 1

2024_day4_part1.livemd

Advent of Code 2024 Day 4 Part 1

Mix.install([
  {:kino_aoc, "~> 0.1"}
])

Get Inputs

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "4", System.fetch_env!("LB_SESSION"))

My answer

input =
  """
  MMMSXXMASM
  MSAMXMSMSA
  AMXSXMAAMM
  MSAMASMSMX
  XMASAMXAMM
  XXAMMXXAMA
  SMSMSASXSS
  SAXAMASAAA
  MAMMMXMMMM
  MXMXAXMASX
  """
Regex.scan(~r/XMAS/, input)
Regex.scan(~r/SAMX/, input)
turned_input =
  input
  |> String.trim()
  |> String.split("\n")
  |> Enum.map(&String.codepoints(&1))
  |> Enum.zip()
  |> Enum.map(fn col -> col |> Tuple.to_list() |> Enum.join() end)
  |> Enum.join("\n")

IO.puts(turned_input)
Regex.scan(~r/XMAS/, turned_input)
Regex.scan(~r/SAMX/, turned_input)
turned_input =
  input
  |> String.trim()
  |> String.split("\n")
  |> Enum.with_index()
  |> Enum.map(fn {row, index} ->
    String.duplicate(".", index) <> row <> String.duplicate(".", String.length(row) - index - 1)
  end)
  |> Enum.join("\n")

IO.puts(turned_input)
turned_input =
  input
  |> String.trim()
  |> String.split("\n")
  |> Enum.with_index()
  |> Enum.map(fn {row, index} ->
    String.duplicate(".", index) <> row <> String.duplicate(".", String.length(row) - index - 1)
  end)
  |> Enum.map(&String.codepoints(&1))
  |> Enum.zip()
  |> Enum.map(fn col -> col |> Tuple.to_list() |> Enum.join() end)
  |> Enum.join("\n")

IO.puts(turned_input)
Regex.scan(~r/XMAS/, turned_input)
Regex.scan(~r/SAMX/, turned_input)
search_xmas = fn input ->
  IO.puts("")
  IO.puts(input)
  Enum.sum([
    Regex.scan(~r/XMAS/, input) |> length(),
    Regex.scan(~r/SAMX/, input) |> length()
  ])
end
search_xmas.(input)
search_all_xmas = fn input ->
  Enum.sum([
    input
    |> String.trim()
    |> search_xmas.(),
    input
    |> String.trim()
    |> String.split("\n")
    |> Enum.map(&String.codepoints(&1))
    |> Enum.zip()
    |> Enum.map(fn col -> col |> Tuple.to_list() |> Enum.join() end)
    |> Enum.join("\n")
    |> search_xmas.(),
    input
    |> String.trim()
    |> String.split("\n")
    |> Enum.with_index()
    |> Enum.map(fn {row, index} ->
      String.duplicate(".", index) <> row <> String.duplicate(".", String.length(row) - index - 1)
    end)
    |> Enum.map(&String.codepoints(&1))
    |> Enum.zip()
    |> Enum.map(fn col -> col |> Tuple.to_list() |> Enum.join() end)
    |> Enum.join("\n")
    |> search_xmas.(),
    input
    |> String.trim()
    |> String.split("\n")
    |> Enum.with_index()
    |> Enum.map(fn {row, index} ->
      String.duplicate(".", String.length(row) - index - 1) <> row <> String.duplicate(".", index)
    end)
    |> Enum.map(&String.codepoints(&1))
    |> Enum.zip()
    |> Enum.map(fn col -> col |> Tuple.to_list() |> Enum.join() end)
    |> Enum.join("\n")
    |> search_xmas.()
  ])
end
search_all_xmas.(input)
search_all_xmas.(puzzle_input)