Day 2 - Rock Paper Scissors
Mix.install([{:kino, "~> 0.7.0"}])
:ok
Part 1
input = Kino.Input.textarea("Please insert your input")
A for Rock, B for Paper, and C for Scissors. X for Rock, Y for Paper, and Z for Scissors.
The score for a single round is the score for the shape you selected (1 for Rock, 2 for Paper, and 3 for Scissors) plus the score for the outcome of the round (0 if you lost, 3 if the round was a draw, and 6 if you won)
sample_input =
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
scores_map = %{
# opponent: rocks, you: rocks => draw
"A X" => 1 + 3,
# opponent: rocks, you: paper => win
"A Y" => 2 + 6,
# opponent: rocks, you: scissors => loss
"A Z" => 3 + 0,
# opponent: paper, you: rocks => loss
"B X" => 1 + 0,
# opponent: paper, you: paper => draw
"B Y" => 2 + 3,
# opponent: paper, you: scissors => win
"B Z" => 3 + 6,
# opponent: scissors, you: rock => win
"C X" => 1 + 6,
# opponent: scissors, you: paper => loss
"C Y" => 2 + 0,
# opponent: scissors, you: rock => draw
"C Z" => 3 + 3
}
%{
"A X" => 4,
"A Y" => 8,
"A Z" => 3,
"B X" => 1,
"B Y" => 5,
"B Z" => 9,
"C X" => 7,
"C Y" => 2,
"C Z" => 6
}
sample_input
|> Enum.map(fn play ->
Map.get(scores_map, play)
end)
|> Enum.sum()
11449
Part 2
X means you need to lose, Y means you need to end the round in a draw, and Z means you need to win.
new_scores_map = %{
# opponent: rocks, you: scissors => loss
"A X" => 3 + 0,
# opponent: paper, you: rocks => loss
"B X" => 1 + 0,
# opponent: scissors, you: paper => loss
"C X" => 2 + 0,
# opponent: rocks, you: rocks => draw
"A Y" => 1 + 3,
# opponent: paper, you: paper => draw
"B Y" => 2 + 3,
# opponent: scissors, you: scissors => draw
"C Y" => 3 + 3,
# opponent: rocks, you: paper => win
"A Z" => 2 + 6,
# opponent: paper, you: scissors => win
"B Z" => 3 + 6,
# opponent: scissors, you: rock => win
"C Z" => 1 + 6
}
%{
"A X" => 3,
"A Y" => 4,
"A Z" => 8,
"B X" => 1,
"B Y" => 5,
"B Z" => 9,
"C X" => 2,
"C Y" => 6,
"C Z" => 7
}
sample_input
|> Enum.map(fn play ->
Map.get(new_scores_map, play)
end)
|> Enum.sum()
13187