Powered by AppSignal & Oban Pro

Advent of Code 2022

2022/day02.livemd

Advent of Code 2022

Mix.install([
  {:req, "~> 0.3.2"}
])

Day 2

input =
  "https://adventofcode.com/2022/day/2/input"
  |> Req.get!(headers: [cookie: "session=#{System.get_env("AOC_COOKIE")}"])
  |> Map.get(:body)

Part 1

A=rock, B=paper, C=scissors X=rock, Y=paper, Z=scissors

input
|> String.split("\n", trim: true)
|> Enum.map(&String.split/1)
|> Enum.map(fn
  ["A", "X"] -> {:rock, :draw}
  ["A", "Y"] -> {:paper, :win}
  ["A", "Z"] -> {:scissors, :lose}
  ["B", "X"] -> {:rock, :lose}
  ["B", "Y"] -> {:paper, :draw}
  ["B", "Z"] -> {:scissors, :win}
  ["C", "X"] -> {:rock, :win}
  ["C", "Y"] -> {:paper, :lose}
  ["C", "Z"] -> {:scissors, :draw}
end)
|> Enum.map(fn {chosen, outcome} ->
  p1 =
    case chosen do
      :rock -> 1
      :paper -> 2
      :scissors -> 3
    end

  p2 =
    case outcome do
      :win -> 6
      :lose -> 0
      :draw -> 3
    end

  p1 + p2
end)
|> Enum.sum()

Part 2

input
|> String.split("\n", trim: true)
|> Enum.map(&String.split/1)
|> Enum.map(fn
  ["A", "X"] -> {:scissors, :lose}
  ["A", "Y"] -> {:rock, :draw}
  ["A", "Z"] -> {:paper, :win}
  ["B", "X"] -> {:rock, :lose}
  ["B", "Y"] -> {:paper, :draw}
  ["B", "Z"] -> {:scissors, :win}
  ["C", "X"] -> {:paper, :lose}
  ["C", "Y"] -> {:scissors, :draw}
  ["C", "Z"] -> {:rock, :win}
end)
|> Enum.map(fn {chosen, outcome} ->
  p1 =
    case chosen do
      :rock -> 1
      :paper -> 2
      :scissors -> 3
    end

  p2 =
    case outcome do
      :win -> 6
      :lose -> 0
      :draw -> 3
    end

  p1 + p2
end)
|> Enum.sum()