Day 02
Mix.install(
[
{:kino, "~> 0.7.0"},
{:kino_aoc, git: "https://github.com/ljgago/kino_aoc"}
],
force: true
)
* Getting kino_aoc (https://github.com/ljgago/kino_aoc)
remote: Enumerating objects: 58, done.
remote: Counting objects: 100% (58/58), done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 58 (delta 16), reused 51 (delta 10), pack-reused 0
origin/HEAD set to main
Resolving Hex dependencies...
Resolution completed in 0.143s
New:
castore 0.1.19
finch 0.14.0
hpax 0.1.2
jason 1.4.0
kino 0.7.0
mime 2.0.3
mint 1.4.2
nimble_options 0.5.1
nimble_pool 0.2.6
req 0.3.2
table 0.1.2
telemetry 1.1.0
* Getting kino (Hex package)
* Getting req (Hex package)
* Getting finch (Hex package)
* Getting jason (Hex package)
* Getting mime (Hex package)
* Getting castore (Hex package)
* Getting mint (Hex package)
* Getting nimble_options (Hex package)
* Getting nimble_pool (Hex package)
* Getting telemetry (Hex package)
* Getting hpax (Hex package)
* Getting table (Hex package)
==> table
Compiling 5 files (.ex)
Generated table app
==> mime
Compiling 1 file (.ex)
Generated mime app
==> nimble_options
Compiling 3 files (.ex)
Generated nimble_options app
==> kino
Compiling 36 files (.ex)
Generated kino app
===> Analyzing applications...
===> Compiling telemetry
==> jason
Compiling 10 files (.ex)
Generated jason app
==> hpax
Compiling 4 files (.ex)
Generated hpax app
==> nimble_pool
Compiling 2 files (.ex)
Generated nimble_pool app
==> castore
Compiling 1 file (.ex)
Generated castore app
==> mint
Compiling 1 file (.erl)
Compiling 19 files (.ex)
Generated mint app
==> finch
Compiling 13 files (.ex)
Generated finch app
==> req
Compiling 5 files (.ex)
Generated req app
==> kino_aoc
Compiling 3 files (.ex)
Generated kino_aoc app
:ok
Section
{:ok, puzzle_input} = KinoAOC.download_puzzle("2022", "2", System.fetch_env!("LB_SESSIOM"))
{:ok,
"C Y\nB Y\nC Y\nB X\nB X\nB X\nC Y\nB Z\nA Z\nA Z\nA Z\nA Y\nA X\nA Z\nA X\nA Z\nC Y\nA X\nA Z\nA Z\nA Z\nA Y\nC Y\nB Z\nB Z\nC Y\nC Y\nC Y\nC Y\nA X\nB Z\nC X\nB X\nA Y\nC X\nC Y\nC Y\nB X\nC X\nB Z\nC Y\nB X\nC Y\nB X\nB X\nC Y\nA X\nB X\nB Z\nB X\nA Z\nB Z\nB X\nB Y\nC Y\nA X\nC Y\nA Z\nC Y\nC Z\nB Z\nC Y\nC Y\nC Y\nB Y\nB X\nB X\nA X\nB Z\nB X\nB X\nB X\nB X\nB Y\nB X\nB X\nB X\nB X\nB Z\nB X\nB X\nB Y\nB X\nC Y\nC Y\nB Z\nA Z\nA X\nB X\nB X\nA X\nB X\nA X\nB X\nA Z\nB Y\nA X\nA Y\nC Y\nA X\nA X\nC Y\nA Z\nB X\nB Y\nC Z\nC Y\nB X\nB X\nA Z\nB X\nB X\nC Y\nA Z\nA Z\nB X\nC X\nB Z\nC Y\nB X\nA Y\nC Y\nB Z\nC Y\nB Z\nA X\nC Y\nC Z\nB X\nB X\nC X\nA X\nB X\nB Z\nB Z\nB Z\nA Y\nB Z\nB X\nC Y\nB Z\nA Z\nC Y\nC Y\nA Z\nC Y\nB X\nB X\nC Y\nB Z\nB Z\nC Y\nA X\nC Y\nC Y\nB X\nB Y\nC Y\nC Y\nA Z\nB Z\nB X\nB X\nC Z\nC Y\nA X\nB Z\nB Y\nC Y\nC Y\nB X\nB Z\nC X\nB X\nC Y\nB Z\nA X\nB X\nB Z\nA X\nC Y\nB X\nB X\nC Y\nA X\nB X\nB Y\nA X\nA Y\nC Y\nC Y\nB X\nA Z\nA X\nB Y\nA X\nA X\nC X\nC Y\nB Y\nA Z\nC X\nA X\nB Z\nB X\nB X\nC Y\nA X\nC X\nC Y\nA X\nC Y\nB X\nB X\nC Y\nC Y\nB X\nA X\nB X\nA X\nC Y\nB Y\nB Z\nB X\nB X\nC X\nC Y\nB Z\nC Y\nC Y\nB X\nA Z\nB Z\nA Z\nA Z\nC Y\nB X\nC Y\nC Y\nC X\nB X\nC X\nC Z\nC Y\nB Z\nC Z\nC Y\nA Z\nB X\nC X\nB Y\nB Z\nC Y\nB Z\nB Z\nB Z\nA Z\nC X\nA Y\nB Z\nA Z\nB Z\nB Y\nA Z\nC Y\nC Y\nB X\nA X\nB X\nC X\nB Y\nC Y\nB Z\nB X\nC Y\nA X\nB Z\nB Y\nC X\nC Y\nB X\nA Z\nA Z\nC Y\nB Z\nB Z\nB X\nB X\nC X\nB X\nB X\nB X\nA Z\nA X\nC Z\nB X\nA Z\nB X\nC X\nB X\nC X\nB Z\nB X\nB X\nA X\nB Z\nB Y\nA Z\nA Z\nC Y\nC Y\nA Z\nA Z\nB X\nA X\nB Z\nC X\nC Y\nC Y\nB Z\nA X\nB Y\nB Z\nA X\nC Y\nB Z\nA X\nB X\nB X\nC Y\nC Z\nA Y\nA X\nC Y\nA Z\nC X\nA Z\nA Z\nC X\nA X\nA Z\nB Z\nA Y\nA Z\nC Y\nB X\nB X\nB Z\nB X\nB X\nB Y\nB X\nB X\nC Y\nB X\nA Z\nB X\nC Y\nA Z\nB Z\nC Y\nC X\nC Y\nB X\nC Y\nB Y\nB X\nB Z\nC Y\nA X\nA X\nC X\nB X\nA X\nC X\nB Y\nB Y\nA Z\nC Z\nC Z\nA X\nC Y\nA Y\nA Z\nB Z\nA Z\nA X\nA Y\nB X\nB Y\nC Y\nA X\nB Y\nC X\nC Y\nB Z\nC Y\nA X\nB Z\nB Z\nA X\nC X\nB X\nA X\nB Z\nC Y\nC Y\nB Y\nA Y\nB X\nB Z\nB X\nC Y\nB X\nC Y\nC X\nA Z\nB Z\nC Y\nB X\nB Z\nB Z\nB Z\nC Y\nC X\nC X\nB X\nA X\nC Y\nC Y\nB X\nB Z\nC Y\nA X\nB X\nB Z\nB Z\nB Y\nA Y\nB X\nB Z\nB X\nA X\nA Z\nA Z\nC X\nB Y\nB Z\nC Z\nB X\nC Y\nB X\nC Y\nB Y\nB Z\nB Y\nB X\nA Z\nC X\nA X\nA Z\nC Y\nB X\nC Y\nC Y\nB X\nC Z\nB Z\nB Z\nC X\nC Y\nA Y\nC Y\nA Y\nB X\nB Y\nA Z\nB Z\nB X\nB X\nA X\nC Y\nB Z\nC Y\nB X\nA Z\nB Z\nC Y\nB Z\nA Z\nC Y\nB X\nB X\nC Y\nC Y\nC Y\nB X\nC Z\nB Z\nB X\nC Y\nC X\nB X\nC Y\nB Y\nB Z\nB Z\nB Y\nB Z\nB Y\nA Z\nB X\nB X\nA Z\nC Z\nA Z\nB X\nC Z\nA X\nB X\nC Y\nB Z\nA Z\nC Y\nC Y\nB Z\nA X\nC Y\nA Z\nB X\nB Z\nB Y\nB X\nB Z\nB X\nC Y\nA X\nB Z\nC Y\nB Z\nB Z\nC Y\nB X\nB X\nA Y\nC Y\nB Z\nB Z\nB X\nB Z\nA X\nA X\nC Y\nB X\nC Y\nA Z\nA X\nB X\nC Y\nB Z\nA Z\nB X\nA X\nB X\nB Y\nA X\nC Z\nA X\nB Y\nB X\nA Y\nC Y\nA Z\nB X\nC Y\nA X\nB X\nC Y\nA Z\nB Y\nA Z\nB Z\nB X\nA X\nB Y\nA X\nA Z\nB Z\nB X\nB Z\nC Y\nC Y\nC Y\nB X\nB Y\nA Z\nA Z\nB X\nB X\nB Y\nA X\nA Z\nC Y\nA Y\nB Z\nA X\nC X\nA Z\nC X\nC Y\nC Y\nB X\nB X\nB Z\nA X\nA Z\nB Y\nB Z\nB X\nB Z\nB X\nC Y\nB X\nC Y\nC Y\nB X\nB X\nC Z\nC Y\nA X\nA Z\nC Y\nC Y\nA X\nA Z\nA X\nC Y\nC Y\nB X\nA X\nC Y\nB X\nB X\nA Z\nB X\nA Z\nA Z\nC Y\nC Y\nB X\nC Y\nB X\nA X\nC Y\nB Z\nA X\nC Y\nB Z\nA X\nA Z\nC Y\nC Y\nB X\nA X\nB X\nB Z\nA Z\nC X\nB Z\nA X\nB Z\nC Y\nB X\nA Z\nC X\nB Z\nA Z\nA X\nC Y\nB X\nC Y\nB X\nA Z\nB Z\nB X\nC X\nB Z\nB Y\nC Y\nB Z\nB Z\nB Z\nB Z\nC Y\nC Y\nA Z\nC Y\nC Z\nC Z\nC Y\nC Y\nB Z\nA Y\nB X\nA Y\nB Z\nA Z\nC Z\nB X\nB X\nC X\nA Z\nC Y\nA Z\nB X\nB X\nA X\nB Z\nB X\nC X\nA Z\nB Y\nA X\nB X\nA Z\nA X\nB Z\nC Y\nB X\nB X\nC Y\nC Y\nB X\nA Y\nC X\nB X\nC X\nB Y\nB X\nC Y\nC Y\nB X\nA Z\nA Z\nA Y\nB Z\nB Z\nB Z\nC Y\nA X\nB X\nC Y\nC Y\nA X\nC Y\nA Z\nB X\nA X\nA Y\nB Z\nB Y\nB Y\nC X\nA Z\nA Z\nB Z\nA Z\nB Z\nB X\nA Z\nB Z\nB Y\nB X\nB X\nB X\nA Y\nA X\nB X\nB X\nA X\nC Y\nB Z\nC Y\nB Y\nA X\nB Z\nA Z\nC Y\nA X\nC Y\nB X\nB Z\nB Z\nC Y\nB Z\nC Y\nB X\nC Y\nA Z\nA X\nB X\nC Y\nA X\nA X\nC Y\nC X\nC Y\nA Z\nB Z\nA X\nC X\nC X\nC Y\nB X\nC X\nA X\nC Y\nB Y\nA X\nC Y\nB X\nA Z\nC Y\nC Y\nA X\nA X\nB X\nB Y\nB Y\nA Y\nA X\nC Y\nA X\nC X\nB X\nC Y\nC Y\nA X\nA Z\nB Z\nB Z\nC Y\nB Z\nB Y\nA X\nC X\nC X\nA X\nC Y\nB Z\nA Z\nB X\nC Y\nC Y\nC X\nC Y\nC X\nA X\nC Y\nB X\nC X\nB X\nA Z\nB Z\nB Z\nB Z\nB X\nB Z\nB X\nB Y\nC Y\nC X\nA Y\nB Z\nB Y\nC Y\nB Z\nA X\nA X\nA Z\nC Y\nA X\nC X\nC Y\nB Y\nB X\nB X\nA X\nB Y\nC Y\nB X\nC X\nC X\nA Z\nA Z\nC Y\nB X\nB Z\nC Y\nB Z\nB Z\nC Y\nC X\nA X\nB Z\nC Y\nC Y\nC Y\nB Z\nB X\nC Y\nB Z\nA X\nB X\nC Y\nA Z\nC Y\nA Z\nA Z\nB Z\nC Y\nA Z\nC Y\nB X\nA X\nA X\nB Z\nC Y\nB Y\nB X\nA Z\nB X\nC Y\nA Z\nC Y\nA X\nA Z\nB X\nB X\nB Y\nB X\nA Z\nC Y\nA X\nC Y\nC Y\nC Y\nC Z\nC Y\nA Z\nA Y\nB Z\nC Y\nB X\nC Y\nC Y\nA Z\nC Z\nC Y\nB X\nC Y\nA Z\nB Z\nB Y\nB Z\nA Z\nB X\nB X\nC X\nB X\nB Z\nA X\nC Y\nC Y\nC Y\nA Z\nB X\nB Y\nA X\nA Z\nC Y\nA Z\nA Z\nB X\nC Y\nB Z\nB Z\nB X\nC X\nA Z\nC X\nB Z\nC Y\nA Z\nB X\nC Y\nB X\nA X\nC Z\nC X\nC Y\nA Z\nC Y\nB X\nB X\nB X\nB X\nB X\nA Y\nC Y\nB X\nA X\nA Z\nA Z\nA X\nC Z\nB Z\nC Y\nB X\nB Z\nA X\nB X\nB X\nC Y\n" <> ...}
Puzzle
test_input = "A Y\nB X\nC Z"
"A Y\nB X\nC Z"
defmodule Score do
def convert_to_rps("A"), do: :rock
def convert_to_rps("B"), do: :paper
def convert_to_rps("C"), do: :scissors
def convert_to_rps("X"), do: :rock
def convert_to_rps("Y"), do: :paper
def convert_to_rps("Z"), do: :scissors
def convert_to_wtl("X"), do: :lose
def convert_to_wtl("Y"), do: :tie
def convert_to_wtl("Z"), do: :win
def rps_value(:rock), do: 1
def rps_value(:paper), do: 2
def rps_value(:scissors), do: 3
def winning_status(x, y) when x == y, do: :tie
def winning_status(:rock, :paper), do: :lose
def winning_status(:rock, :scissors), do: :win
def winning_status(:paper, :rock), do: :win
def winning_status(:paper, :scissors), do: :lose
def winning_status(:scissors, :paper), do: :win
def winning_status(:scissors, :rock), do: :lose
def winning_score(:win), do: 6
def winning_score(:tie), do: 3
def winning_score(:lose), do: 0
def score_game({rps_opponent, rps_me}) do
win = winning_status(rps_me, rps_opponent)
rps_value(rps_me) + winning_score(win)
end
def parse(input) do
# "A Y\nB X\nC Z"
input
# ["A Y", "B X", "C Z"]
|> String.split("\n", trim: true)
|> Enum.map(fn game_round ->
String.split(game_round, " ")
|> List.to_tuple()
end)
# [{"A", "Y"}, {"B", "X"}, {"C", "Z"}]
end
def compute_to_x_against(:tie, rps), do: rps
def compute_to_x_against(:win, :rock), do: :paper
def compute_to_x_against(:win, :paper), do: :scissors
def compute_to_x_against(:win, :scissors), do: :rock
def compute_to_x_against(:lose, :rock), do: :scissors
def compute_to_x_against(:lose, :paper), do: :rock
def compute_to_x_against(:lose, :scissors), do: :paper
end
{:module, Score, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:compute_to_x_against, 2}}
Test Input
test_input
# [{"A", "Y"}, {"B", "X"}, {"C", "Z"}]
|> Score.parse()
|> Enum.map(fn {a, b} ->
{Score.convert_to_rps(a), Score.convert_to_rps(b)}
end)
# [rock: :paper, paper: :rock, scissors: :scissors]
# [8, 1, 6]
|> Enum.map(&Score.score_game/1)
|> Enum.sum()
15
Part 1
puzzle_input
|> Score.parse()
|> Enum.map(fn {a, b} -> {Score.convert_to_rps(a), Score.convert_to_rps(b)} end)
|> Enum.map(&Score.score_game/1)
|> Enum.sum()
9759
Part 2
test_input
|> Score.parse()
|> Enum.map(fn {a, b} ->
{Score.convert_to_rps(a), Score.convert_to_wtl(b)}
end)
# [rock: :tie, paper: :lose, scissors: :win]
|> Enum.map(fn {rps, wtl} ->
{rps, Score.compute_to_x_against(wtl, rps)}
end)
# [rock: :rock, paper: :scissors, scissors: :paper]
# [4, 9, 2]
|> Enum.map(&Score.score_game/1)
|> Enum.sum()
12
puzzle_input
|> Score.parse()
|> Enum.map(fn {a, b} -> {Score.convert_to_rps(a), Score.convert_to_wtl(b)} end)
|> Enum.map(fn {rps, wtl} -> {rps, Score.compute_to_x_against(wtl, rps)} end)
|> Enum.map(&Score.score_game/1)
|> Enum.sum()
12429