Advent of Code day 2
Mix.install([
{:kino, "~> 0.7.0"}
])
:ok
Puzzle input
example = "A Y
B X
C Z"
"A Y\nB X\nC Z"
input = Kino.Input.textarea("Puzzle input")
parsed =
input
|> Kino.Input.read()
|> String.split("\n")
|> Enum.map(&String.split/1)
|> Enum.map(fn round ->
Enum.map(round, fn val ->
cond do
val in ["A", "X"] -> 1
val in ["B", "Y"] -> 2
val in ["C", "Z"] -> 3
end
end)
end)
[
[1, 2],
[2, 3],
[3, 2],
[2, 2],
[1, 2],
[1, 2],
[1, 1],
[1, 2],
[2, 3],
[1, 2],
[2, 2],
[1, 3],
[1, 2],
[3, 3],
[1, 3],
[1, 2],
[2, 2],
[1, 2],
[1, 2],
[2, 3],
[1, 3],
[3, 2],
[1, 1],
[2, 3],
[2, 3],
[2, 2],
[1, 2],
[1, 2],
[2, 3],
[2, 3],
[2, 3],
[2, 3],
[1, 2],
[3, 3],
[1, 1],
[2, 3],
[2, 3],
[2, 2],
[2, 3],
[1, 2],
[2, 2],
[2, 3],
[2, 2],
[1, 2],
[2, 2],
[2, 3],
[2, 3],
[1, 2],
[2, ...],
[...],
...
]
Part 1
parsed
|> Enum.map(fn [opponent, player] ->
cond do
opponent == player -> player + 3
opponent == 1 and player == 2 -> player + 6
opponent == 2 and player == 3 -> player + 6
opponent == 3 and player == 1 -> player + 6
opponent == 1 and player == 3 -> player
opponent == 2 and player == 1 -> player
opponent == 3 and player == 2 -> player
end
end)
|> Enum.sum()
15632
Part 2
parsed
|> Enum.map(fn [opponent, player] ->
cond do
player == 2 -> opponent + 3
player == 1 and opponent == 1 -> 3
player == 1 and opponent == 2 -> 1
player == 1 and opponent == 3 -> 2
player == 3 and opponent == 1 -> 2 + 6
player == 3 and opponent == 2 -> 3 + 6
player == 3 and opponent == 3 -> 1 + 6
end
end)
|> Enum.sum()
14416