Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 2

2022/day02.livemd

Day 2

input = """
C Y
A Z
B Y
A Z
A X
A Z
B Y
A Z
B Y
C Z
B Y
C Z
A Z
C Y
B Y
B Y
B Y
C Y
B Y
B Y
A X
B Y
A Y
B Y
B Y
B X
A Y
C Z
C X
A Z
B Y
A X
C Y
C X
C Z
C X
B Y
B Y
B X
A Z
A X
C Y
A Z
C Z
B X
C X
B Y
C X
C Z
C Y
C Z
A Y
A Z
C Z
A Z
A Z
A Z
A Z
B Y
A Z
B Y
B Y
B Y
B X
A Z
B X
C Z
C Z
A Z
A Z
B Y
C Y
A X
C Y
C Y
B Z
B Y
C X
A X
A Z
C Z
C X
B Y
A X
C X
B Y
C X
B Y
C X
B Y
C Y
A Z
C Z
B X
C Y
B Y
A Z
B X
C Z
C Z
B Y
C Z
C X
A X
A Z
A Z
A Y
C Z
C Y
A X
C Z
C Y
A Z
C X
B X
A Z
B Y
A Z
B X
C X
A Z
C Y
C Z
B Y
C Y
C X
A Z
C X
C X
B Y
B Z
A X
B X
C Y
A Z
B Y
C Z
B Y
C Z
B X
B Y
B X
B Y
B Y
B Y
C Y
A Z
A Y
A Z
C Z
B Y
C Z
B Y
C Y
A Z
B X
B Y
C Z
A X
A Y
C X
B X
A Z
C X
A Y
A X
A Z
A Z
A Z
B Y
B Y
B Z
B Y
C Y
B Y
A Z
C X
A Z
A X
B Y
A X
C X
C X
A X
B X
C X
C Z
B Y
B Y
C Y
B X
C X
A Z
B Y
B Y
C Z
A Z
B Y
B X
C Z
A Y
B Y
A Y
C Y
C X
A X
B Y
C X
B Z
B Y
B Y
A Z
C Y
B Y
B Y
A Y
B Z
B Z
A Y
B Y
C Y
A Z
B Y
C Z
A Z
B Y
A Z
C Y
A X
B Z
C X
C Y
B Y
C Y
A Z
A Z
B Y
B Y
C Y
A Y
A Y
C Y
A Z
C Y
B X
C X
A X
A Y
A Z
A Y
A Z
B Y
B Y
B Y
A Z
C Y
C Z
A Y
C Y
A Z
A Z
C Z
B Y
A Z
C Z
B Y
C Y
C Z
C X
B Y
A Z
B Y
B Y
A Z
C X
B Y
A Z
B Y
C Y
A Y
A Z
C X
A Z
A Y
C Y
A Z
C Y
C Y
B X
A Z
B Y
A Z
C Y
B Y
B Y
B Y
A Z
C Z
C Y
B Y
C Z
C Y
C Y
C Y
A X
B X
C X
B Y
B Y
B X
B Y
B Y
C Z
B Y
B Z
C X
B Y
C Y
C Y
B X
A Z
B Y
B Y
A Z
B Y
C Z
B Y
B Y
A Z
C Z
C Z
A Z
C Y
B Y
B Y
C Y
B Z
A Y
C X
A Z
B X
C Y
A Z
C Z
B Y
B X
B Y
B Y
B Y
C Z
A Z
B Y
B X
B Y
B X
B X
C Z
A Z
B Y
C Z
A Z
C Y
C Y
A Z
A Z
A Y
B Y
C X
A Z
B Y
A Z
A Z
A Z
A Y
A Z
A Z
A Y
A X
A Z
C Z
C Y
C Y
C X
A Z
A Y
B Y
A Z
A Z
B Y
B X
B Y
A Z
A X
B Y
C Y
C Y
A Z
C Y
C X
B Y
A X
A X
C Y
A X
C Z
C X
C Y
B Y
A Z
C Y
A Z
A Z
C Z
B Y
A Z
A Y
A X
C X
C X
B Y
C X
B Y
C Z
A Y
B Y
C Y
C X
B Y
C Y
A Z
B Y
A X
C Y
A Y
A Z
A Z
B Y
A Z
A Z
C X
B Y
B Y
A Z
B Y
C Y
C Z
A Z
C Z
C Z
B Y
A Z
B Y
A Z
B Z
C Z
A Y
B Y
B Y
B Y
C Y
A X
A X
B X
B Y
C Z
C Y
C Y
C Y
A X
B Y
B Y
C Z
C X
B Y
A X
A Z
C Y
C Y
A Z
A Z
C Z
A Z
C Y
B Y
A X
B Y
C Z
A Z
A Y
B Y
B Z
C Y
C Y
C X
B Y
C Y
C Y
C Y
C Z
B Y
A Y
A Y
A Z
B Y
C X
B X
B X
B X
A Z
B Y
C Z
C Z
C X
B Y
B Y
B Y
A X
A Z
A Z
B Y
C Y
B Y
C Y
B X
A Z
B Y
B Y
B Y
B Y
B Y
B Y
C X
A Y
B Y
B Y
C Y
A Z
B Y
C X
B X
C Z
C X
A X
C X
B Y
B Y
C X
B Y
C Y
A Z
B Y
A X
C Y
A X
C Y
C Y
B Y
A Y
A Z
B Y
C Z
C Z
B Y
C Z
A Z
A Y
A Z
C Y
C Z
B Y
C Z
A Z
C X
A Y
C Z
A Z
B Y
C Z
C Y
B Y
A Z
B X
A Z
B X
C Z
B Y
A X
C Y
A Z
C Y
B Y
B Y
B Y
C Y
B Y
B Y
C X
A Z
A Z
B Y
C Y
C Z
C X
A Z
C Y
B X
B Y
A X
B Y
A Z
A Z
B Y
B X
C Z
C X
B Z
A Y
B Y
B Z
C Y
A Z
B X
C Y
B Y
C Z
B Z
A Y
A X
C X
B Y
C Y
A X
A Z
B Y
A Y
B Z
C X
B Y
C Y
C X
A Z
A Y
A Z
B Y
C Z
B X
A X
B Y
B Z
A Z
C Y
C X
A Z
C Y
C Z
B X
A Z
B X
A Z
A Z
C Y
B Z
C Y
C Y
B Y
C X
B X
A X
A Z
C Z
B X
B X
B X
B Z
B Y
B Z
C Y
B Y
C Y
C Z
A Z
A X
B Y
B Y
B Y
B Y
C X
B Y
B Y
A X
C X
B Y
C Z
C Y
A Z
A Y
B Y
C Y
B Y
C X
C X
B Y
B Y
B Y
C Y
A Z
A Y
C X
A Z
A Z
B Y
C X
C Y
B Y
B Y
C Y
C X
B X
C Y
B X
A Z
B Y
C X
B X
C Y
C Y
A Z
B Y
A Z
C Y
A Z
A Z
C Z
C X
C Y
A Z
C Z
A Z
B Y
A X
B Y
B Y
A Z
C X
B Z
B Y
C X
A Y
B Y
A Z
C Z
A Z
A Z
A Z
B Y
B Y
B X
B Y
B Y
B Y
C Z
B Y
A Z
C X
C Z
A Z
C Z
C Y
B Y
C Y
B X
C Y
B Y
A Z
B Y
C X
B Y
A Z
C Y
B Y
C Y
C Z
A X
B X
C X
B X
A X
B Y
A X
C Z
B Y
C Z
B Y
B Y
C Z
B Y
A Y
C Z
B Z
A Z
C X
A Z
A Z
B Y
B Y
C Y
C Z
C X
A Y
B Y
B Y
A X
A Y
B X
C Z
C Z
B Y
C Y
B Y
C X
B Z
A Z
A Z
B Y
A Y
A Y
A X
A Z
B Y
A X
B Z
C Z
B X
C Z
B X
B Y
A Y
B X
A Z
A Z
C Z
A X
C Z
B Y
A Y
C Z
C X
B Y
B Y
A X
C Y
C X
C Y
C X
A X
B Y
B X
B Y
C Y
C Y
C X
A Y
A Z
C Y
C Y
B Y
B X
B Y
B X
A Z
A Z
C Z
B Y
B Y
B Y
B X
C Z
A Y
A Z
B Y
B Y
B Y
B X
A X
B Y
C Z
A Z
A Z
C Y
C Y
B Y
B Y
A Z
B Y
A X
A Z
C Z
A Z
B Y
C X
B Y
A X
B Y
B X
B Y
B X
C X
A Z
C Z
C Z
B X
A Z
B Y
A Z
B X
B Y
A Z
C Y
B Y
A Z
A X
B Y
A Z
B Y
B Y
C Y
A Z
B Y
B Y
C Y
A Z
C Z
A Z
C Z
B Y
A Z
B Y
A Z
C Y
B Y
A X
A Z
B Y
B Y
C Z
C Z
C Z
B Y
C Y
A X
C X
A X
C Y
A Y
B X
B Y
C Z
B Y
B Y
B X
C Z
B Y
C X
A Z
C X
B Y
A X
C X
C Y
A Z
A X
C Z
C Z
B Y
C Y
A Y
A Z
A Y
C X
C X
B Y
C Y
B Y
A Z
C X
B Y
C Y
A X
A Z
C Y
B Y
B Y
A Y
C X
B Y
C Y
B Y
B X
A Z
C Y
C Y
A X
C X
A Z
C X
B Y
A X
C Z
B Y
C X
B Y
A Z
A Y
B Y
B X
B Y
C Y
C Z
B Y
A Z
A X
B X
C X
C Z
B Y
B Y
C X
C Z
A Z
C Y
C Z
B Y
A Z
B Y
B Y
C Z
C Z
B Y
C Y
B Y
A Z
B X
B Y
B Y
C X
A Z
A Z
B Y
C Y
B Y
A Z
A Y
A X
C Z
C Y
C Z
C Z
C Z
A Z
B Y
C Z
A Z
C Y
A Z
B Y
B Y
B Y
A Z
B Y
B X
B Y
B Y
B Y
B Y
B Y
B Y
A X
C Z
B X
B Y
C X
A Z
B Y
B X
C Y
B Y
C Y
B Y
A Z
B Y
C Y
A X
B Y
C X
B X
B Y
C Z
B X
C X
C Y
C X
C Y
C X
A Z
C X
B Y
A Z
B X
A Z
B X
B X
A Z
C Z
A Z
B X
B Z
C X
C Y
A X
A Z
B X
C Y
A Z
C Z
B Y
B Y
C Y
B Z
B Y
B Y
C Y
C Z
B Y
A Z
A X
B X
B X
C X
A Z
C Y
B Y
B Y
A Z
B Y
A Z
A Z
B Y
B Y
B Y
B Y
C X
B Y
B X
C Z
B X
C X
B X
B Y
B Y
B Y
A Z
B Y
A X
A Y
C X
B X
B Y
B Y
C Z
A Y
C Z
C Y
A Z
C Z
C Z
B X
B Y
A Z
B Y
C X
C Y
C Y
B X
B Y
B Z
A Y
A Z
C X
A X
B X
C X
B Y
B Y
B Y
B X
C X
B Y
A Z
A Z
A Y
B X
C Y
C Z
A Z
A Z
B X
A Z
C Y
B Y
A X
B X
A Z
B Y
B Y
B Y
B Y
C Z
C Z
A Y
B Y
C Z
C Z
B Y
B X
A Z
C Y
C X
A Z
A Z
C Y
C X
C Y
A Y
B Y
C X
B Y
B X
C Z
C X
C Y
B Y
B Y
A Z
B Y
C Z
C Y
B X
B Y
A Z
A Z
B X
B Y
A X
A Z
B Y
B Y
B Y
B Y
B Y
C Y
B Y
B Y
C Y
B Y
B Y
C Z
B Y
A X
C Y
B Y
A Z
B Y
C Z
C Z
C Y
A Y
B Y
A Z
A X
C Y
C Z
C Y
C Z
C Z
C Y
B X
B Y
B Y
C Z
C X
A Y
C Y
B Y
B Y
A Y
A Y
C X
C Y
A Z
A Z
A X
B Z
B X
A X
A Y
A Z
B Y
C Y
B X
B Y
B Y
C Z
C X
B Y
B Y
B Y
B Y
C Y
B Y
B X
C X
C Y
B Y
A Z
A Y
A Z
C Z
C Y
A Z
A Z
B Y
B Y
C Y
A X
B Y
A Z
B Y
A Z
B Y
B X
C X
C Y
A Z
A Y
B Y
C X
A Z
B Y
A Z
C Y
B X
B Y
B X
C Z
C X
B Y
A Z
B Y
B X
A X
C Z
C X
A Z
A Y
A X
A Z
A Z
A Z
C Y
A Z
B Y
A Z
A Z
C Z
B X
B Y
B Y
B Y
B Y
A Z
B Y
C Y
A Z
A Y
B Y
B Y
C Y
C Y
A Z
C Z
A Z
B Y
B Y
A Z
A X
A Z
A Z
C Y
C Z
A Z
C X
A X
B Y
C Y
C X
C Z
B Y
C Y
A Z
A Z
C Z
A Z
A Z
A X
B Y
C Y
A Z
C X
C Y
B Y
C X
B X
B Y
C Y
A Z
A Z
A X
B Y
A Z
B Y
B Y
C Z
C Z
A X
A Y
B Y
C Z
B Y
B Y
C X
A Z
C Z
A X
B Y
A Y
B Y
C Z
B Y
C X
B Y
B X
B Y
B Y
C Y
B X
B Y
A Z
A Z
B Z
A Z
B Y
B Y
A Y
A Z
C Z
C Y
B X
B Y
C Y
B X
C X
B Y
C X
A Z
B Y
B Y
B Y
C Y
B Y
B Z
A Z
B Y
A Z
C Y
B Y
B Y
B Y
B Y
C Z
B Y
B Y
B Y
A Z
C Z
B Y
B X
A Z
C X
C Y
C Z
B Y
A Z
C Y
A Y
A X
C Y
A X
A Z
A Z
B X
B Y
B Y
C Y
B X
B Y
A Z
B X
B Y
C Y
B Y
C X
A Z
A Z
A Z
A Z
C Z
A Y
C Z
C Z
C Z
B X
B Y
B X
A Z
A Y
B Y
A X
C X
C X
B Y
B Y
B Y
A X
A X
B Y
C Z
B Y
A Z
C Y
B Y
B Y
A Z
C Y
C Z
A Y
A Z
B Y
C X
C X
A Z
B Y
C Y
A Z
A Z
C Z
C X
B Y
C Z
C Z
B Y
A Z
A Z
B X
C X
B Y
C Y
B Y
C Y
B Y
B Y
A Z
A Y
B X
C Y
B Y
C X
C X
C Y
A Z
B Y
C Y
B Y
C Y
B Y
A Y
B Y
A Z
C X
C Z
C Z
C Y
B Y
C Y
B X
B X
A X
B Y
A X
B Y
A Z
C X
B Y
A Z
B X
B Z
B Y
B Y
C Y
B Y
A Z
B Y
C Y
C Z
A Z
C Z
B Y
B Y
B Z
A Z
B Y
C Z
B X
A Z
A X
B X
B Y
A X
B Y
C Y
A Z
A Y
B Y
A Z
B Y
A Y
B Y
C Z
C Z
C Y
C Z
B Y
A Z
B X
B Y
C Y
B Y
C Y
C Y
A Z
A Z
C X
A Y
C Z
B Y
B Y
B Y
C Y
B X
C Y
B Y
A Z
A Y
B Y
B Y
B Y
C X
B Y
C Z
A Y
B X
A Z
A Z
C X
B Y
B Y
A Z
A Y
A Y
C Z
A Z
A Y
B Y
C X
A X
A Y
B Y
A X
B Y
B X
C Y
C Z
C X
B Y
C Y
A Z
B X
A Z
B Y
B Y
B Y
C Y
B Z
C Z
C Y
B Y
C Y
B X
A X
B Y
B Y
A X
C Y
C Y
C Z
B X
A Z
C X
A Z
A Z
C Z
C Y
B Y
C Y
C X
A Z
C Z
B Y
A Z
A Z
C Z
A X
B Y
B Y
C Y
A Z
B X
B X
B X
B Y
B Y
B Y
B Y
A X
B Y
B Y
B X
C X
A Z
A Z
A Z
A Z
B Y
A Z
A Z
B X
A Z
C Y
B Y
B Y
B Y
B X
C Z
A Z
B Y
C X
A X
C Z
B Y
C Y
C Z
A Y
C Z
C X
C Y
B Z
B Y
B Y
B Y
A Z
C Z
A Z
A Z
C Z
B X
C Z
C Y
B X
B Y
C Y
B Y
B X
A Y
B Y
A Z
A Z
B Y
B Y
B X
B X
B X
B Y
A Y
C X
C Y
B Y
C X
B X
A Z
B Y
C X
B Y
B Y
B Y
B Y
A Z
B Y
C Z
B Y
C Z
A X
A Z
C Y
B Y
C Z
B Y
A Y
C X
C X
C Y
A Z
B Y
C X
B Y
B Y
A X
C X
A Z
C X
A Z
B Y
C Y
B Y
B Y
C Y
A Z
A X
C X
B X
B Y
B Y
A Y
B Y
B Y
C X
A Z
B Y
A Y
B Y
B Y
B Y
C Y
B Y
C X
B X
B X
C X
A Z
C X
C X
C Z
B Y
B Y
B Y
B Y
C Z
B X
B Y
B Y
A Z
A X
A Y
A Z
C Y
B Y
B Y
C X
B Y
B Y
B X
A Y
C Y
B Y
B Y
B Y
A Z
A Z
B X
C Y
B Y
A X
B Y
B Y
B X
B Y
A Y
C X
B Y
C Y
C Z
A Z
A Z
C Z
C Y
A Z
B Y
B X
B Y
B Y
C Z
B Y
A Z
C X
B Y
A Z
B Y
B Y
B Y
C X
A Z
A X
C Z
B Y
A Z
C Y
A Y
B Y
A Y
B Y
C Y
C Z
B Y
A Z
A Z
B Y
A X
C X
C Z
C X
B X
C Z
B Z
B Y
B X
C Z
B Y
C Y
C Y
A Z
B Y
B Y
B Y
B Y
C Y
A Z
B Y
A Z
C Z
A X
A Z
B Z
A Z
C Y
B Y
C Z
B Y
C Z
A Z
C Z
B Y
B Y
B Y
A Z
B Y
B X
B X
B X
A Z
C Z
C Y
B X
C Z
A X
B Y
C Y
B Y
B X
B Y
A Z
A X
A X
B Y
C Y
C Y
B Y
B Y
A Z
C Y
A X
A Z
C Y
A Z
C Z
C Y
A Z
C Y
C X
A Z
B X
B Y
A X
C Z
C Z
B X
C X
B Y
A Z
C Z
C Y
C Z
C X
C Z
A X
C Z
B X
C Y
C Z
B Y
C X
A Z
A Y
B Y
A Z
B Y
B Y
B X
C Z
B Y
B Y
B X
B Y
C Y
C Z
B X
B Y
C Z
B Y
B Y
B Y
B Y
A Z
C Z
C Y
B X
B X
B Y
B X
C Y
C Y
A Z
A Z
B X
B Y
B Y
C Z
C Z
B Y
A Z
C X
C Y
C X
B Y
B Y
C Z
C X
B Y
C Y
C Z
C Y
C X
C Y
B X
B X
B Y
B Y
B Y
C Z
B X
B Y
C X
C Y
C Y
C X
A Z
B Y
C Y
C Z
B Y
C Y
B Y
A Y
A Z
C Z
C Z
C Y
A X
C X
C Z
C Y
C Z
B X
C Z
B Y
C X
C Y
C Y
A Z
B Y
A Z
B Y
A X
C Z
A Z
C Z
B Y
B Y
B Y
A Z
A X
B Y
B Z
B Y
B Y
A Z
B Y
B Y
C Z
B Z
A Z
C X
B Y
A Y
B Y
C Y
C Y
C X
B Y
B Z
C Y
B Y
A Y
C X
A Z
A Z
B X
C Y
B Y
B Z
A Z
A Z
B Y
A Z
A Z
A Z
C Y
A Z
A Y
A Z
C Z
C Y
B Y
A Z
B X
B Y
A Z
A Y
B X
B Y
C Y
C Z
C Y
B X
C Y
B Y
B Y
A Z
A Z
B Y
C X
A X
A Z
A X
A X
C Y
B Y
C Z
A Z
B Z
B Y
B Y
B Y
C X
B Y
C Z
B Y
B Y
C Z
C Z
A Z
A Z
A Z
A Z
C Y
A Z
A Z
B Y
B Y
A Z
A Z
C X
C Y
A Z
B Z
B Y
C X
C X
B Y
C X
B Y
C Y
C X
B Y
C Z
A X
B Y
B X
B Y
C Y
B Y
A X
C X
B Y
B Y
B X
B Y
A Z
A Z
A Z
A Z
B Z
B Y
B Y
C X
A Z
C Y
B Z
A X
B Y
B X
B Y
A X
C X
B Y
B Y
A Z
B Y
C Z
A Y
B X
C X
B Y
B Y
A Z
C X
C Y
B Y
C Y
C Z
A Y
A Z
B Y
B Y
A Z
C Y
B Y
C Y
C X
C X
C Y
C Z
A Z
C X
B Y
A Z
B Y
C X
B Y
B Y
A Z
A Z
C X
B Y
A Z
B Y
A Y
B X
B Y
B X
A Y
B Y
B X
B Y
A Z
B Y
C Z
B Y
B Y
B Y
A Y
B Y
C Z
B X
B Y
A X
A Z
B Y
A Z
B X
C Y
B Y
B Z
C Y
B Y
C Y
C X
C X
C Z
B Y
B Y
B Y
A Z
B X
A Z
C Z
B Y
A Y
B Y
C Y
A Z
B Y
A Y
B X
B Y
C Y
C Y
A Z
A Z
B Y
C Y
C Z
A Z
A X
B Y
B Y
B Y
B Y
A Z
C Y
A Z
B Y
B Y
C Z
A Z
A X
C Y
B Y
B Y
A Z
B X
C Z
C Y
C Z
C Y
B Y
A Z
A Z
B Y
A Z
A Z
B Z
C X
C X
B Y
C Z
A Z
B X
A X
A Y
C Y
C Y
A Z
C Y
B Y
A Z
A Z
C Y
B Y
A Y
B X
C Z
B Y
B Y
A Z
B Z
C Z
B Y
B Y
B Y
A Y
C Y
A Z
A X
B Y
B Y
B Y
C Z
A X
B Y
B Y
C Y
B X
B Y
A Z
B Y
A Z
A Y
C Y
B Y
B Y
A Z
B X
A Z
A Z
A Z
B Y
A Y
C Z
B Y
B X
B Y
B Y
B Y
B Y
B Y
A X
C Z
B Y
B Y
B Y
C Z
B X
A Y
B X
C Z
B Y
C X
C X
A Z
B Y
B Y
A Z
C X
C X
A Z
B X
B Y
C X
C Z
A X
B X
B Y
"""

Input

The puzzle input is a set of rock paper scissors games. Each line represents a game: the first letter represents the opponents play (A = rock, B = paper, C = scissors), and the second letter represents our play (X = rock, Y = paper, Z = scissors)

Part 1

the solution to part one is the score we would get by following the guide. scores are based on our selection and the result of the round

  • Rock - 1 point
  • Paper - 2 points
  • Scissors - 3 points
  • Loss - 0 points
  • Tie - 3 points
  • Win - 6 points
parse_letter = fn
  "A" -> :rock
  "B" -> :paper
  "C" -> :scissors
  "X" -> :rock
  "Y" -> :paper
  "Z" -> :scissors
end

score_of = fn
  :rock -> 1
  :paper -> 2
  :scissors -> 3
  [selection, selection] -> 3
  [:rock, :scissors] -> 0
  [:scissors, :paper] -> 0
  [:paper, :rock] -> 0
  [:rock, :paper] -> 6
  [:paper, :scissors] -> 6
  [:scissors, :rock] -> 6
end

games =
  input
  |> String.split("\n", trim: true)
  |> Enum.map(fn line ->
    line
    |> String.split(" ", trim: true)
    |> Enum.map(&parse_letter.(&1))
  end)

games
|> Enum.reduce(0, fn [_, us] = game, score ->
  game_score = score_of.(us) + score_of.(game)
  score + game_score
end)

Part 2

Now the interpretation of the input changes a bit. The second letter of the line represents the game result we need to achieve. X = loss, Y = tie, Z = win. The solution is the score we achieve following these new instructions. Scoring is unchanged.

parse_letter = fn
  "A" -> :rock
  "B" -> :paper
  "C" -> :scissors
  "X" -> :loss
  "Y" -> :tie
  "Z" -> :win
end

score_of = fn
  :loss -> 0
  :tie -> 3
  :win -> 6
  :rock -> 1
  :paper -> 2
  :scissors -> 3
end

our_play = fn
  [selection, :tie] -> selection
  [:rock, :loss] -> :scissors
  [:rock, :win] -> :paper
  [:paper, :loss] -> :rock
  [:paper, :win] -> :scissors
  [:scissors, :loss] -> :paper
  [:scissors, :win] -> :rock
end

games =
  input
  |> String.split("\n", trim: true)
  |> Enum.map(fn line ->
    line
    |> String.split(" ", trim: true)
    |> Enum.map(&parse_letter.(&1))
  end)

games
|> Enum.reduce(0, fn [_, result] = game, score ->
  our_play_score = game |> our_play.() |> score_of.()
  score + our_play_score + score_of.(result)
end)