Day 2
Day 2: Rock Paper Scissors
Day 2: Rock Paper Scissors
Input
input = """
A Y
B X
C Z
"""
Part 1
f = fn
{:Rock, :Rock} -> 1 + 3
{:Rock, :Paper} -> 2 + 6
{:Rock, :Scissors} -> 3 + 0
{:Paper, :Rock} -> 1 + 0
{:Paper, :Paper} -> 2 + 3
{:Paper, :Scissors} -> 3 + 6
{:Scissors, :Rock} -> 1 + 6
{:Scissors, :Paper} -> 2 + 0
{:Scissors, :Scissors} -> 3 + 3
end
map_opponent = %{"A" => :Rock, "B" => :Paper, "C" => :Scissors}
map_me = %{"X" => :Rock, "Y" => :Paper, "Z" => :Scissors}
input
|> String.split("\n", trim: true)
|> Enum.map(&String.split(&1, " "))
|> Enum.map(fn [opponent, me] ->
f.({map_opponent[opponent], map_me[me]})
end)
|> Enum.sum()
Part 2
f = fn
{:Rock, "Y"} -> 1 + 3
{:Rock, "Z"} -> 2 + 6
{:Rock, "X"} -> 3 + 0
{:Paper, "X"} -> 1 + 0
{:Paper, "Y"} -> 2 + 3
{:Paper, "Z"} -> 3 + 6
{:Scissors, "Z"} -> 1 + 6
{:Scissors, "X"} -> 2 + 0
{:Scissors, "Y"} -> 3 + 3
end
map_opponent = %{"A" => :Rock, "B" => :Paper, "C" => :Scissors}
input
|> String.split("\n", trim: true)
|> Enum.map(&String.split(&1, " "))
|> Enum.map(fn [opponent, me] ->
f.({map_opponent[opponent], me})
end)
|> Enum.sum()