advent-of-code/2022-elixir/lib/solutions/day_02.ex
Anders Ytterström df5cfbd030 Add solutions for 2022:2 Rock Paper Scissors
Verbose code, and with bad naming. Good enough for now.
2023-11-20 20:53:58 +01:00

96 lines
1.6 KiB
Elixir

defmodule Aoc.Solution.Day02 do
import Aoc.Utils
@name "Day 2: Rock Paper Scissors"
@behaviour Solution
@impl Solution
def get_name, do: @name
@impl Solution
def present(solution), do: "Asumed strategy guide will grant #{solution} total score"
@impl Solution
def present_again(solution), do: "Actual strategy guide will grant #{solution} total score"
@impl Solution
def parse!(raw) do
raw |> split_lines() |> Enum.map(&parse_values/1)
end
@impl Solution
def solve(rounds) do
rounds |> Enum.map(&asumed_score/1) |> Enum.sum()
end
@impl Solution
def solve_again(rounds) do
rounds |> Enum.map(&score/1) |> Enum.sum()
end
def asumed_score([opponent, "X"]) do
result =
case opponent do
"A" -> 3
"B" -> 0
"C" -> 6
end
result + 1
end
def asumed_score([opponent, "Y"]) do
result =
case opponent do
"A" -> 6
"B" -> 3
"C" -> 0
end
result + 2
end
def asumed_score([opponent, "Z"]) do
result =
case opponent do
"A" -> 0
"B" -> 6
"C" -> 3
end
result + 3
end
def score([opponent, "X"]) do
result =
case opponent do
"A" -> 3
"B" -> 1
"C" -> 2
end
result
end
def score([opponent, "Y"]) do
result =
case opponent do
"A" -> 1
"B" -> 2
"C" -> 3
end
result + 3
end
def score([opponent, "Z"]) do
result =
case opponent do
"A" -> 2
"B" -> 3
"C" -> 1
end
result + 6
end
end