Powered by AppSignal & Oban Pro

Day 2

advent_of_code/2022/day-02.livemd

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()