Day 2
Mix.install([
{:kino, "~> 0.7.0"}
])
Input
input = Kino.Input.textarea("Please paste your input file:")
Helpers
myMoveMap = %{
"X" => 0,
"Y" => 1,
"Z" => 2
}
opponentMoveMap = %{
"A" => 0,
"B" => 1,
"C" => 2
}
defmodule Day02 do
def computeScore(opponentMove, myMove) do
winningMove = (opponentMove + 1) |> rem(3)
score = myMove + 1
cond do
myMove == winningMove -> score + 6
myMove == opponentMove -> score + 3
true -> score
end
end
end
parsed_input =
input
|> Kino.Input.read()
|> String.splitter("\n")
Part 1
parsed_input
|> Enum.map(fn line ->
[opponentMove, myMove] = String.split(line)
Day02.computeScore(opponentMoveMap[opponentMove], myMoveMap[myMove])
end)
|> Enum.sum()
Part 2
parsed_input
|> Enum.map(fn line ->
[opponentMove, gameResult] = String.split(line)
myMove =
cond do
gameResult == "X" -> (opponentMoveMap[opponentMove] + 2) |> rem(3)
gameResult == "Y" -> opponentMoveMap[opponentMove]
gameResult == "Z" -> (opponentMoveMap[opponentMove] + 1) |> rem(3)
end
Day02.computeScore(opponentMoveMap[opponentMove], myMove)
end)
|> Enum.sum()