<!-- livebook:{"hub_id":"team-weiz"} -->
# 04
## Section
```elixir
example = """
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX
"""
```
```elixir
defmodule Day04 do
def into_map(input, whilte_list) do
for {row, y} <- input |> String.split("\n", trim: true) |> Enum.with_index(),
{c, x} <- row |> String.split("", trim: true) |> Enum.with_index(),
c in whilte_list,
into: %{} do
{{x, y}, c}
end
end
def part1(input) do
map = into_map(input, ["X", "M", "A", "S"])
for {start, "X"} <- map,
xadd <- -1..1,
yadd <- -1..1,
xadd == yadd != 0,
xmas(map, start, xadd, yadd),
reduce: 0 do
acc -> acc + 1
end
end
def xmas(map, {x, y}, xadd, yadd) do
Map.get(map, {x + xadd, y + yadd}) == "M" &&
Map.get(map, {x + xadd * 2, y + yadd * 2}) == "A" &&
Map.get(map, {x + xadd * 3, y + yadd * 3}) == "S"
end
def part2(input) do
map = into_map(input, ["M", "A", "S"])
for {start, "A"} <- map,
xadd <- [1, -1],
yadd <- [1, -1],
x_mas(map, start, xadd, yadd) do
start
end
|> Enum.frequencies()
|> Enum.count(&(elem(&1, 1) == 2))
end
def x_mas(map, {x, y}, xadd, yadd) do
Map.get(map, {x + xadd, y + yadd}) == "M" && Map.get(map, {x - xadd, y - yadd}) == "S"
end
end
Day04.part1(example)
Day04.part2(example)
```
<!-- livebook:{"offset":1452,"stamp":{"token":"XCP.f_anXktTVXc69Ueqjsnt1lzgGzWBv8fKVvY4SUuFxmc92QOF7FsKVT1f3h1CHg","token_signature":"lQneOMU479TCxYij7YoSLNUIa6Jz5QQyivMKqiMsWiOIeq3LzOHsHqrJ5KL2z6RoEYsepEnsz87O565H1tNAWDqiItXV_9bPdMrj31eAwxlr7lj8CLw_JtMW_Izw9x1SBrUDdmaWWlUfqyax9X1nhtCLAXIbpbWKAdm8ewG8l6aMSLkzksL1icdso4VHtJnj6vaDZJj_I-QMr5GUK_RLY6fFYEwhFrbftnrlAn5p2XocyuXPYz8KSnH_fSOzOxqU4Zs1Uzslcgb9zdEyR3iTAJDlu02yyS6LjrRyTp6k3hvkALSpnakmVpbeIu6XgjneqWWuw3rFmmcgeupSsqt5wQ","version":1}} -->