Day 2
Mix.install([
{:kino, "~> 0.5.0"}
])
input = Kino.Input.textarea("Paste input here:")
Part 1
opponent_map = %{"A" => :rock, "B" => :paper, "C" => :scissor}
elf_map = %{"X" => :rock, "Y" => :paper, "Z" => :scissor}
choice_point = %{rock: 1, paper: 2, scissor: 3}
play_result = fn
:rock, :scissor ->
6
:scissor, :paper ->
6
:paper, :rock ->
6
x, x ->
3
_, _ ->
0
end
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(fn line ->
[opponent, mine] = String.split(line, " ")
opponent = opponent_map[opponent]
mine = elf_map[mine]
play_result.(mine, opponent) + choice_point[mine]
end)
|> Enum.sum()
Part 2
opponent_map = %{"A" => :rock, "B" => :paper, "C" => :scissor}
elf_map = %{"X" => :lose, "Y" => :draw, "Z" => :win}
result_point = %{win: 6, draw: 3, lose: 0}
choice_point = %{rock: 1, paper: 2, scissor: 3}
should_play = fn
:win, :scissor ->
:rock
:win, :paper ->
:scissor
:win, :rock ->
:paper
:lose, :scissor ->
:paper
:lose, :paper ->
:rock
:lose, :rock ->
:scissor
:draw, x ->
x
end
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(fn line ->
[opponent, mine] = String.split(line, " ")
opponent = opponent_map[opponent]
elf_result = elf_map[mine]
mine = should_play.(elf_result, opponent)
result_point[elf_result] + choice_point[mine]
end)
|> Enum.sum()