Powered by AppSignal & Oban Pro

2022 Day 2

2022/elixir/day-2.livemd

2022 Day 2

Mix.install([
  {:kino, "~> 0.8.0"}
])

Section

input = Kino.Input.textarea("")
defmodule Part1 do
  def solve(input) do
    input
    |> String.split([" ", "\n"])
    |> Enum.chunk_every(2)
    |> Enum.map(fn [opp, me] ->
      score(me) + game_score(opp, me)
    end)
    |> Enum.sum()
  end

  defp score("X"), do: 1
  defp score("Y"), do: 2
  defp score("Z"), do: 3

  defp game_score("A", "X"), do: 3
  defp game_score("A", "Y"), do: 6
  defp game_score("A", "Z"), do: 0
  #
  defp game_score("B", "X"), do: 0
  defp game_score("B", "Y"), do: 3
  defp game_score("B", "Z"), do: 6
  #
  defp game_score("C", "X"), do: 6
  defp game_score("C", "Y"), do: 0
  defp game_score("C", "Z"), do: 3
end

input
|> Kino.Input.read()
|> Part1.solve()
defmodule Part2 do
  def solve(input) do
    input
    |> String.split([" ", "\n"])
    |> Enum.chunk_every(2)
    |> Enum.map(fn [opp, me] ->
      score(opp, me) + game_score(me)
    end)
    |> Enum.sum()
  end

  defp game_score("X"), do: 0
  defp game_score("Y"), do: 3
  defp game_score("Z"), do: 6

  defp score("A", "X"), do: 3
  defp score("A", "Y"), do: 1
  defp score("A", "Z"), do: 2
  #
  defp score("B", "X"), do: 1
  defp score("B", "Y"), do: 2
  defp score("B", "Z"), do: 3
  #
  defp score("C", "X"), do: 2
  defp score("C", "Y"), do: 3
  defp score("C", "Z"), do: 1
end

input
|> Kino.Input.read()
|> Part2.solve()