Day 3
Mix.install([
{:kino, "~> 0.8.0"}
])
Section
input = Kino.Input.textarea("")
defmodule Part1 do
def solve(input) do
input
|> String.split("\n")
|> Enum.map(&String.split_at(&1, String.length(&1) |> div(2)))
|> Enum.map(fn {front, back} ->
f = String.to_charlist(front)
b = String.to_charlist(back)
f
|> Enum.find(&(&1 in b))
|> priority()
end)
|> Enum.sum()
end
defp priority(c) when c >= ?a, do: c - ?a + 1
defp priority(c), do: c - ?A + 27
end
Kino.Input.read(input)
|> Part1.solve()
defmodule Part2 do
def solve(input) do
input
|> String.split("\n")
|> Enum.chunk_every(3)
|> Enum.map(fn [l1, l2, l3] ->
s1 = String.to_charlist(l1) |> MapSet.new()
s2 = String.to_charlist(l2) |> MapSet.new()
s3 = String.to_charlist(l3) |> MapSet.new()
s1
|> MapSet.intersection(s2)
|> MapSet.intersection(s3)
|> Enum.to_list()
|> hd()
|> priority()
end)
|> Enum.sum()
end
defp priority(c) when c >= ?a, do: c - ?a + 1
defp priority(c), do: c - ?A + 27
end
Kino.Input.read(input)
|> Part2.solve()