Day 2
Input
example_input = """
A Y
B X
C Z
"""
input = """
B Z
B Z
C Z
C Z
B X
C Y
A Y
B Z
A Z
A Y
C Z
C X
C Z
C X
B X
B Z
B Z
A Z
C Z
C Z
C Y
C Z
B Z
B Z
A X
A Y
B Z
B Z
C Z
B Z
B Z
C X
C Z
A Y
A X
A X
C Z
C Z
B X
C X
B Z
A Z
B X
B Z
B Z
A Z
B Z
A Y
C Z
C Z
B X
C Z
A Z
C Z
C Z
C Z
C Z
A Z
B Z
C Z
A Z
C Z
C Z
C Y
A Y
C X
C Z
C Z
C Z
C Z
A Y
C X
A Y
A Y
C X
B Z
A Y
C Y
C Z
B Z
C Z
B Z
B Z
B Z
C Y
B Z
A Y
C Z
C Z
A X
C X
C Z
A X
C Z
C Z
C X
A Z
C Z
C Z
B Z
C Y
A Y
C Y
C Y
A Z
B Z
C Z
C Z
C Z
A Z
C Z
B X
C Z
A Y
C Z
C X
C Y
C Y
B Z
C Z
C Z
A X
C X
C Z
C Z
A Z
B Z
B Z
C X
C Z
B Z
C X
B Z
C Z
B Z
B Z
B Z
B Z
C Y
C Z
B Z
C Z
C Z
C Z
C Z
B Z
C Z
B Z
C Z
B Z
C Z
C Y
C Z
C Z
C X
C Z
C Z
C Y
C Z
C Y
C X
B Z
B Z
C Z
A Z
C Z
C Z
C Z
B Z
C Z
B Z
C Z
B Z
C Z
C Z
B X
B Z
C Z
C Z
A Z
A Z
B Z
C Z
C Z
A Z
B X
C X
A Z
C Z
C Z
B Y
B Z
B Z
A Y
B Z
C Z
C Z
A Y
B Z
C Y
A Z
C X
A Z
A Y
C X
C Y
C Z
B Z
C Z
A Y
B Z
B Z
C Z
C Z
C Z
C Z
C Z
B Z
C Z
A X
C Z
C Z
A Y
C Z
A Y
C Z
B Z
C Z
A Y
C Z
C Y
C Z
B Z
C X
A Y
C X
A Y
B X
C Y
B X
C Z
C Y
C Z
C Y
C Y
B Z
C Z
A Y
C X
C Z
C Z
B Z
A Z
C Z
C Z
C Y
C Z
C Y
B X
C Z
C Z
C Z
C X
A Y
B Z
C Z
C Z
C Z
B Z
A Y
A Z
A Y
B Z
A Z
A Y
B Z
C Z
A Y
A Z
B Z
B Z
B Z
C Z
C Z
C Z
C Z
C Z
C Z
B Z
C Z
C Z
C Z
A Z
A Y
C X
C Z
A Z
C Z
A Y
C Z
A Y
C Z
C Z
A X
C Y
C Z
A X
C X
A X
B Z
C Z
A X
C Z
B Z
A X
C Z
A Y
A Z
C Y
A Y
C Y
A Z
B Z
A Z
B Z
C X
C X
C Z
C Z
B Z
A Y
C Z
A Y
C Z
B Z
B X
B X
B X
A Z
B Z
C X
C Z
A Y
C Z
B X
A Y
C X
B Z
C Z
C Z
C Z
C Z
A Z
B Z
B Z
B X
A Y
C Z
C X
A Y
C Z
C Z
C Z
A Y
A X
B Z
C Z
A Z
C Y
A Z
B Z
A Y
C Z
C Z
B Z
A Y
B Z
A Z
A Y
C Z
A X
C Z
C Z
B Z
C Z
C X
A Y
A Y
B Z
C Z
B X
A Y
C Z
C Z
A X
A Z
C Z
C Z
A Y
C Z
C Y
A Y
A Y
B Z
C Z
C Z
C X
C Z
A Y
B Z
C Z
C Z
A Y
B Z
C Z
C Z
B Z
A Y
B Z
C Z
C Z
C Z
C X
C Z
C Z
C Z
C Y
C X
C Y
C Z
B Z
A Y
C X
B Z
C X
C X
C Z
A Z
C Z
B X
A Y
C Z
B Z
A X
B X
C X
C Z
C Z
B Z
B Z
C Z
C Z
A Y
B Z
A Z
B Z
A Z
A X
C Z
A Z
A Z
B X
A Z
B Z
B Z
A Y
C Y
B Z
B Z
B Z
B Z
C Z
B Z
C Z
B Z
C Y
C Z
C Z
C X
C Z
C Y
C Y
C X
A Y
C Y
B Z
C Z
A Y
A Z
B X
C Z
C Z
A Y
A Y
A Y
C Z
A Z
C Z
B Y
A X
A Y
C Z
A X
B Z
C Z
C Z
B Z
C Z
A Z
C X
C Z
B Z
B Z
C Z
B Z
A Z
C Z
C Z
A Y
B Z
A Y
B Z
C Z
B Z
C Z
B Z
B Z
A Y
C Y
B Z
C Z
A Z
B Z
C Z
C Z
A Z
B Z
C Z
A Y
A Z
C X
B Z
A Y
A Y
C Z
A Z
B Z
B Z
C Z
C Z
C Z
C Z
A Y
A X
C Z
B Z
C Z
C Z
C Y
C Z
A X
A Z
C Z
B X
A Z
B X
B X
A Y
A Y
A Y
C Z
C Z
C Z
A Z
C X
A Y
C Z
B Z
C Z
A X
B Z
A X
A Z
C Z
C Z
C Z
B X
B Z
C X
B Z
C Z
C Z
C Z
A Y
B Z
B Z
C Z
A X
B Z
A Y
C Z
A Y
A Y
C Z
C Z
A Y
C X
C Z
A Y
C Z
B Z
B Z
C Z
C Y
B Z
B Z
C Z
A Y
C Z
B Z
B X
A Y
A Z
C Z
B Z
C Z
C X
A Y
A Z
A Y
B Z
A Z
B Z
A Y
A Y
B Z
C Z
C Z
C Z
A Y
A X
B Z
A Y
C Z
B X
C Z
C Z
A Y
C Z
C Z
C Y
C Z
C Y
B Z
B Z
C Z
C Z
B Z
B Z
B Z
C Z
B Z
B Z
C Z
C Z
C X
C Z
C Z
B Z
B Z
C X
A Y
C Y
C X
B Z
C X
B Z
C Z
A Z
C Y
C Z
C X
B X
A Y
C Y
A X
C Z
C Z
C Z
C Z
A Y
C Y
C Z
A Y
C Z
C Z
B Z
B Z
B Z
C Z
C Z
C Z
C Z
C Z
C Z
B Z
C Z
B Z
C Z
B Z
C Z
C Z
B Z
C Z
C Z
C Z
A Y
C Z
C Z
A X
C Z
C Z
A X
B Z
C Z
A Y
C X
C Z
A Z
C Y
A Y
C Z
B Z
C Z
B Z
C X
C Y
B Z
C Z
C Z
A Y
C X
C Z
C Z
B X
C Z
C Z
C Z
C Z
A Z
A Y
C Z
B Z
C Z
B Z
A Y
B Z
C Z
B Z
B Y
C Z
B Z
A Y
C Z
C Y
C Z
A X
B Z
C Z
A Z
A Z
B Z
A X
B Z
B Z
C Y
C Z
C Z
B Y
B Z
C Z
A Y
B X
B Z
C Z
C Z
C Z
B X
A Y
A Y
B Z
B Z
C Z
B Z
C Z
C Y
B Z
B Z
B X
A Y
A Y
A Y
B X
C Z
C Z
B Z
C Z
C X
B Z
C Z
C Z
B Z
C Z
C Z
A Y
B Z
A Y
C Y
B Z
B Z
B Z
C X
C Z
C Z
C Z
C X
C Z
A X
B Z
C Z
C Z
A Y
B Z
C Z
A Y
C Z
B Z
C Z
C Z
B Z
B Z
C Z
C Z
C Y
C Z
C Y
C X
C Z
C Y
C Z
A Y
B Z
B Z
A Y
B Z
B X
B X
A Z
C Y
C Z
C Z
B Z
C Z
C Z
C Z
C Z
C Y
C Z
B Z
C Z
C Z
C Z
B Z
B Z
C Z
B X
C Y
A X
C Z
A Z
C Y
C Z
C Z
B Z
C Z
C Z
C Z
B Z
A Y
A Z
B X
C X
A Y
A Y
C Z
C Z
C Z
C Z
C Z
C Z
C Y
C Z
C Z
C Z
A Y
A Z
C Z
A Y
C Z
C Z
B Z
B Z
B X
A Y
B Z
C Y
C Z
B Z
A Z
A Y
A X
C Z
B Z
C Z
B Z
B Z
C Z
C Z
C Z
C Z
A Y
A Z
C Z
C Z
A Y
C Y
C Z
A X
B X
B X
C Z
C Z
B Z
A Y
A Y
A Y
A X
C Z
B Z
B Z
B Z
A Y
C Y
B Z
A Z
C Z
B X
C Z
C Z
C X
C X
C Z
A Y
B Z
C Z
A Y
C Z
A X
C Z
B Z
B Z
B Z
C Z
B Z
C Z
A Z
C Z
B Z
C Z
A Y
C Z
A Z
C Z
C Y
B Z
A Z
C Z
B Y
A Z
C Z
A X
C Z
B Z
A X
C Z
B Z
C Z
C X
A Y
C Z
B Z
A X
C Z
B Z
C Z
A Y
C Z
C Z
C Z
B Z
C Y
C Z
C X
A Z
C Z
C Z
B Z
C Z
C Z
C Z
A Z
C Z
A Y
A X
C Z
A Y
C X
C Z
B Z
C Z
B Z
B Z
A Y
B Z
A Y
A Y
C X
B Z
C Z
C Z
C Z
C Z
C Z
A Y
B Z
C Z
A Y
B Z
C Z
C Z
A Y
B Z
C Z
C Y
B Z
C Z
B Z
A Z
C X
B Z
C Y
C Z
C Z
C X
C X
A X
C Z
B Z
A Z
C Z
B Z
B X
C Z
C Z
C Z
C Z
B Z
B X
C Z
C Z
C Z
B Z
C Y
B Z
B X
C Y
C Z
C Z
B Z
A Z
C Y
C X
C Z
B Z
C Z
C Z
C Z
B Z
B X
C Z
C Z
A Y
C Z
C Y
A Y
A Z
B Y
C Z
A Y
C X
C X
C X
C Z
B Z
C Z
C Z
B Z
C Z
A Y
C Z
C Z
B Z
C X
C Z
B Z
C Z
A Y
C Z
C Z
C X
C Z
B Z
C Y
C Z
A Z
C Z
B Z
A Z
B Z
C Z
A Y
B Z
C Z
C Z
B Z
A Z
C Z
C X
C Z
C Z
A Y
A Y
A Z
C Z
A Y
A X
C Z
C Z
C Z
C X
A Z
C Z
A Y
C Z
C Z
C Y
C Z
C Z
B Z
C Z
C Z
B Z
B Z
C Z
C Z
C Z
B Z
C Z
C Z
C Y
B Z
C Y
B Z
B X
C Z
C Z
A Y
B Z
C Y
B Z
B Z
B Z
B Z
C Z
C Y
A X
C Z
C Z
C Z
C Z
C Z
B Z
C Z
A Y
C Z
C Z
A Y
A Y
C Z
C Z
B Z
B Z
C X
C Z
C Z
A X
C Z
C Y
C Z
B Z
C Z
A Y
C Z
C Z
C Z
C X
A Y
C Z
C X
B Z
C Z
C Z
C Y
C Z
A Y
B Z
B Z
A X
C Y
C Z
B X
A X
C Z
C Z
C Z
C Z
C Y
A X
B Z
C Z
C Z
A Y
B X
A Z
A Y
B Z
C Z
C X
A X
C X
C Y
C Z
B X
A X
C Z
C Z
B X
A Y
A Y
A Y
C Z
C Z
A Y
C Z
A Z
A Y
C Z
B X
C Z
C Z
C X
C Z
C Z
A Z
B Z
A Z
C Y
C Y
C Y
C Z
C X
C Z
A Y
B Z
C Z
B Z
C Z
A Y
C X
C Z
C Z
B Z
C Z
C Y
A Y
B Z
B Z
B X
B Z
C Z
A Y
C Z
B Z
A Y
C Z
C Z
B Z
A Y
C Z
C Z
C Z
C Z
A Z
A Y
C Z
C X
A Z
A Z
C Z
C Z
C Z
A Y
B Z
B Z
B Z
B Z
C Z
C X
C Z
C Z
B Z
B Z
C Z
C X
A Z
A Y
C Z
B Z
C X
C X
A Y
A Y
C Z
B X
C Z
C Y
C X
A Y
C Y
C Z
C Z
B Z
A Z
C Z
C Z
C Z
C X
C Z
B Z
A Y
C Z
B Z
C Z
A Y
A Y
B X
B X
B Z
C Z
C Z
C Z
C Z
C X
C Z
B Z
C X
C X
A Z
B Y
C Z
C Z
C X
B Z
C Z
C Z
A Z
C Z
C X
A Y
A Z
C Z
B Z
C Z
B X
A Y
C Z
C Z
B Z
C X
B Z
B Z
C Z
C Z
C Z
B Z
A Z
C Z
A X
C Z
C Z
C Z
C X
C X
B Z
C Y
C Z
C Y
A Z
A Y
A X
B Z
A Y
C Z
C Y
B Z
B Z
B Z
B Y
B Z
A X
C Z
A Y
B Z
A Y
C Z
C Z
C Z
A Y
C Z
B Z
C Z
A Z
C Y
C X
A Y
A Y
A Y
B Z
C Y
C Z
C Z
C X
B Z
A Y
C Z
C Z
B Z
A Z
C Z
B Z
C X
C Z
B Z
C Z
C Z
B Y
B Z
C Y
B Z
A X
C Y
B Z
C Z
A Y
C Z
A Z
C Z
B Z
A X
C Y
C Y
A Y
A Z
B Z
A Z
C Z
C Y
C X
C Z
A Y
C Z
A Y
C Z
C Z
C Z
C Y
C X
C X
B Z
A Y
C Z
A X
C Z
A Z
C X
A X
A Z
A Y
C Z
C Z
C Z
B Z
B Z
C Z
C Z
C Z
A Y
C Z
A Z
C Z
C Z
C X
C X
C Z
C Z
C Z
C Z
C Z
A Y
B Z
B Z
C Z
B X
C Y
C Z
C Z
C Z
A Y
B X
C Z
C X
B Z
A Z
B X
C Z
C Z
B Z
C X
B Z
C Z
A Y
C X
A Y
A Z
C Y
C Z
C Y
C Z
C X
C Z
C Z
C Z
C Z
C Z
C Z
B Z
C Z
B Z
C X
C Z
C X
B Z
A Z
A X
C Z
A Y
C Y
C Z
C Z
C Z
B Z
B Z
A X
C Z
B Z
C Z
C Z
A X
C Z
B Z
C X
C Z
C Z
C Z
C Z
B X
C X
B Z
C Z
B Z
A Y
C Z
A Y
B X
C Z
C Z
C Z
C Z
A Y
C Z
C Z
B Z
C Z
C Z
B Z
A Y
C X
C Z
C Z
A Y
C X
B Z
B Z
A Y
C Z
B Z
C Z
A Y
B Z
A Z
C Z
B Z
C Z
B Z
C X
B Z
C Z
C Z
C Z
A Y
A Y
C Z
B Z
A Y
B X
C Z
B Z
C X
C Z
B Z
B Z
C Y
C Y
A Z
C X
C Z
B Z
A Y
C Z
C Z
B Z
A Y
B Z
A Z
C Z
B Z
B Z
B Z
C Z
C X
B Z
C Z
B Z
C Z
C Z
A Y
A Y
C Z
C X
A Y
B Z
C Z
A Z
C Z
B Z
A Y
C Z
C X
C Z
C Z
C Z
C Z
A Y
C Z
C X
B Z
B X
C Z
A Y
C Y
C Z
C Z
C X
C Z
C X
C X
C Z
B Z
B X
A Z
A Z
C Z
C Y
A Y
C Z
A Y
C Z
C Z
C Z
B Z
B Z
C Z
B Z
C Z
C Z
C Y
B Z
B Z
C Z
C Z
B Z
C X
A Z
C Z
C Z
A Y
A Y
A Y
C Z
C Z
B Z
A Z
A X
A Y
C X
C Z
B Z
C X
C X
B Z
B Z
B X
C Z
C Y
B Y
C Z
C Z
C Z
B Y
A Y
A Y
C Z
C Z
C Z
C Z
C Z
C Z
C Z
C Z
B X
A Z
A X
C Z
A Y
A Z
C X
C Z
C Y
C Z
C Z
C Z
B Z
B Z
A Y
A Z
C X
B X
B X
C Z
C Y
C Z
C Z
C Y
C Z
C Z
A Z
B Z
C Z
A Y
C Z
C Z
C Z
A Y
C Z
B Y
B X
C Z
A Y
B X
C Y
A Y
C Z
C Z
C Y
A Z
B Z
C Z
C Z
B Z
C Y
C X
C Y
C Y
B Z
C Z
B Z
C Z
A Y
A Y
A Y
B Z
C Z
A Z
C Z
C Y
B Z
B Z
C Y
C Z
C Z
A Y
C Z
C Z
B Z
C Z
C X
A X
A Y
A Y
B Z
C Z
B X
A Y
B Z
C Z
C Z
B Z
A Y
C Z
C Z
B X
A Y
C Z
B X
A Y
C Z
C X
A Z
B Z
B Z
C Z
C X
A Y
C Z
C Z
A Y
B Z
C Z
A Y
C Z
A Y
C Z
B Z
C Z
A X
B Z
C Z
C Z
C X
B Y
A Y
A X
C X
B Z
C Z
C X
B Z
C Z
C Z
C Z
C Z
A Z
C Z
A Y
B X
C Z
C Z
B Z
B Z
C X
B Z
B X
C Z
C Z
C Z
A Y
C Z
C Z
C Z
C Z
A Y
A Z
B Z
C Y
A Z
C Z
C Z
C Z
B X
B Z
C Z
B Z
C Z
C X
C Z
A X
C Z
C Z
C Z
C Z
C Z
A Y
A Y
B Z
B Z
B Z
B Z
C Z
C Z
C Z
C Z
A Z
A Y
C Z
A Z
A Y
C Z
C Z
C Y
A Y
B Z
C X
B Z
A Y
C Z
A Y
C Z
B Z
B Z
B Z
C Z
C Z
A Z
A Y
C X
A Y
C Z
A Y
C Z
C Z
A Y
B Z
C Z
C Y
C Z
B Z
B Z
B Z
C Y
C Z
B Z
C X
B Z
A Y
B Z
C Z
A Y
C Z
C Y
C Z
C Z
C Z
C Z
B X
B Z
C Z
C Z
A Y
C Y
C Z
C Z
C Z
C Z
C Z
C X
B Z
C X
A Y
B X
A Y
C Z
B Z
A Y
B Z
C Z
A Y
C Z
C Z
C X
C X
C Z
B Z
C X
C Z
A X
A Z
C Z
C Y
A Y
A X
B Z
C Z
C Z
B Z
A Y
C Z
A X
B Z
B Z
A X
C Y
C Z
A Y
B Z
C Z
C Z
C Z
B Z
C Z
B Z
C Z
B X
B Z
C Z
A X
C Z
A X
C Z
A Y
C Z
A Z
C Z
C Z
C Z
B X
A Y
A Y
A X
B Z
B Z
C Y
C Z
B Z
A X
C Z
A Y
C Z
C Z
B Z
C Z
C X
B X
B Z
B X
C Z
C Z
B Z
A Z
C Z
C Y
C Y
C Z
C Z
C Z
C Z
C Z
C Z
A X
A Z
C Z
B Z
B Z
B Z
C X
A Z
C Z
C Z
B Z
B Z
C Z
B X
C Z
B Z
C Z
C Z
C Z
C Z
A X
A Z
A Y
C Z
A Z
A Y
C Z
A Z
C Z
A Y
C Z
B Z
C Z
A Y
C Y
A Y
B Z
A Y
B Z
C Z
B X
C X
C Z
B Z
A Z
C Z
B X
C Y
C Z
C Y
A X
C X
C X
B Z
A Y
C Z
A Z
B Z
C Z
C X
C Z
C Z
C Z
C Z
C Z
B Z
B Z
C Z
C Z
C Z
C Z
C X
A Z
C Z
A Y
A Y
C Z
C Z
C Y
C Z
A Y
C Z
B Z
B X
A Z
A Y
A Y
C Z
A Y
C Z
A X
A Y
B X
C Z
C Z
A Z
C Z
A Y
B Z
A Y
C Z
C Z
B Z
C X
C Z
C Z
C Z
C Y
C Z
B X
C Z
C Z
B X
A Z
C Z
C X
C X
B Z
C Z
C Z
B Z
C Z
C Z
B Z
B Z
B Z
B Z
B Z
A Z
C X
C Y
C Z
A Y
C Z
B Z
A Y
C Z
C Z
B Z
B Z
C Z
A Z
A X
A Y
C Z
A Z
C Z
C X
B Z
C Z
A X
B Z
B X
C Z
C Z
C Z
B X
C Z
B Z
B Z
A Y
A Y
A Z
C Z
C Z
C Z
B Z
C Z
B Z
C Z
A Z
C Z
C X
C Z
C Z
C Z
B Z
A Y
C Y
C Z
C Z
C Z
C Z
B Z
C Y
C Z
A Z
C Y
C Z
B X
A Y
A Y
A X
B Z
B Z
C Z
A Y
B X
A Y
C X
C Z
A Y
C X
C Z
C Z
A Z
C X
C Z
C X
C Z
A Y
C Z
C Z
B Z
C Z
C Y
A Z
C X
C Y
C Z
C Z
C Y
B Z
B Z
C X
C Z
C Z
C Z
C Z
B Z
C Z
C Z
C Z
B Y
C Y
C Z
B Z
C Z
C Z
C Y
B Z
A Y
A Z
C Y
C Y
C Z
C X
C Z
A Z
C Z
C Z
A Y
A Z
C Z
A Z
C Z
B Z
B X
B Z
B Z
A Z
C Z
A Y
C Z
C Y
C Z
A Z
B Z
B Z
B Z
C Z
B Z
A Z
A Y
C Z
C Z
C Z
C Z
C Z
A Z
C Z
A Z
A X
B Z
A Y
C X
A Z
B X
B Y
A Y
B Z
A Z
B Z
B Z
C Z
A Z
B Z
B Z
A Y
C Y
C Y
A X
C Z
C Z
C Z
C X
C Z
C Z
C Z
C Z
B Z
A Y
C Z
C Z
C Z
A Z
C X
C Z
B Z
C Y
B X
B Y
C Z
C Z
A X
C Y
C X
B Z
B Z
C Z
B Z
C Y
C Y
C Y
C X
C Z
C Z
C Z
C X
A Y
C Z
C Z
B Z
A Z
C Z
A Y
B X
C Z
C X
C Z
A Z
B Z
A Y
C Z
C Z
C Z
A Z
C Z
C Z
C X
C Z
C Z
B Z
C Z
B Z
C X
C Z
A Y
A Y
C Z
C Z
B Z
C Z
C Z
C X
C Z
A Y
C Z
C Z
C Z
B Z
C Z
A Y
"""
Parse
defmodule ParserPart1 do
def letter_to_pick("A"), do: :rock
def letter_to_pick("B"), do: :paper
def letter_to_pick("C"), do: :scissor
def letter_to_pick("X"), do: :rock
def letter_to_pick("Y"), do: :paper
def letter_to_pick("Z"), do: :scissor
def letter_to_pick(other), do: raise("Unkown play \"#{other}\"")
def parse_line(line) do
line
|> String.split(" ")
|> Enum.map(&letter_to_pick/1)
|> List.to_tuple()
end
def parse(lines) do
lines
|> String.trim()
|> String.split("\n")
|> Enum.map(&parse_line/1)
end
end
defmodule ParserPart2 do
def letter_to_pick("A"), do: :rock
def letter_to_pick("B"), do: :paper
def letter_to_pick("C"), do: :scissor
def letter_to_pick("X"), do: :lose
def letter_to_pick("Y"), do: :tie
def letter_to_pick("Z"), do: :win
def letter_to_pick(other), do: raise("Unkown play \"#{other}\"")
def parse_line(line) do
line
|> String.split(" ")
|> Enum.map(&letter_to_pick/1)
|> List.to_tuple()
end
def parse(lines) do
lines
|> String.trim()
|> String.split("\n")
|> Enum.map(&parse_line/1)
end
end
Helpers
defmodule RockPaperScissors do
def score(:rock, :rock), do: :tie
def score(:rock, :paper), do: :win
def score(:rock, :scissor), do: :lose
def score(:paper, :rock), do: :lose
def score(:paper, :paper), do: :tie
def score(:paper, :scissor), do: :win
def score(:scissor, :rock), do: :win
def score(:scissor, :paper), do: :lose
def score(:scissor, :scissor), do: :tie
def score({opponent, self}), do: score(opponent, self)
def self_value(:rock), do: 1
def self_value(:paper), do: 2
def self_value(:scissor), do: 3
def outcome_value(:lose), do: 0
def outcome_value(:tie), do: 3
def outcome_value(:win), do: 6
def play({opponent, self}) do
outcome_value(score(opponent, self)) + self_value(self)
end
def desired(:rock, :tie), do: :rock
def desired(:rock, :win), do: :paper
def desired(:rock, :lose), do: :scissor
def desired(:paper, :tie), do: :paper
def desired(:paper, :win), do: :scissor
def desired(:paper, :lose), do: :rock
def desired(:scissor, :tie), do: :scissor
def desired(:scissor, :win), do: :rock
def desired(:scissor, :lose), do: :paper
def play_to_desired({opponent, desired_outcome}) do
to_play = desired(opponent, desired_outcome)
outcome_value(score(opponent, to_play)) + self_value(to_play)
end
end
Part 1
example_input
|> ParserPart1.parse()
|> Enum.map(&RockPaperScissors.play/1)
|> Enum.sum()
input
|> ParserPart1.parse()
|> Enum.map(&RockPaperScissors.play/1)
|> Enum.sum()
Part 2
example_input
|> ParserPart2.parse()
|> Enum.map(&RockPaperScissors.play_to_desired/1)
|> Enum.sum()
input
|> ParserPart2.parse()
|> Enum.map(&RockPaperScissors.play_to_desired/1)
|> Enum.sum()