Untitled
input = File.read!("2022/day/2/input.txt") |> String.split("\n") |> Enum.drop(-1)
Section
defmodule X do
@atom_for %{
"A" => :rock,
"B" => :paper,
"C" => :scissor,
"X" => :rock,
"Y" => :paper,
"Z" => :scissor
}
def atomize([a, b]), do: [@atom_for[a], @atom_for[b]]
@win_score 6
@draw_score 3
@lose_score 0
@counter %{
rock: :paper,
paper: :scissor,
scissor: :rock
}
@choice_score %{
rock: 1,
paper: 2,
scissor: 3
}
def score([elf, me]) do
@choice_score[me] +
cond do
elf == me -> @draw_score
@counter[elf] == me -> @win_score
@counter[me] == elf -> @lose_score
end
end
end
input
|> Enum.map(&String.split/1)
|> Enum.map(&X.atomize/1)
|> Enum.map(&X.score/1)
|> Enum.sum()
defmodule Y do
@atom_for %{
"A" => :rock,
"B" => :paper,
"C" => :scissor,
"X" => :lose,
"Y" => :draw,
"Z" => :win
}
def atomize([a, b]), do: [@atom_for[a], @atom_for[b]]
@counter %{
rock: :paper,
paper: :scissor,
scissor: :rock
}
@anti_counter @counter
|> Map.to_list()
|> Enum.map(fn {a, b} -> {b, a} end)
|> Map.new()
def score([x, y]) do
X.score([
x,
case y do
:draw -> x
:win -> @counter[x]
:lose -> @anti_counter[x]
end
])
end
end
input
|> Enum.map(&String.split/1)
|> Enum.map(&Y.atomize/1)
|> Enum.map(&Y.score/1)
|> Enum.sum()