Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Advent of Code 2023 Day 2 Part 2

2023_day2_part2.livemd

Advent of Code 2023 Day 2 Part 2

Mix.install([
  {:kino_aoc, "~> 0.1"}
])

Get Inputs

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2023", "2", System.fetch_env!("LB_SESSION"))

My answer

games =
  puzzle_input
  |> String.split("\n")
  |> Enum.into(%{}, fn line ->
    [title, items] = String.split(line, ":")

    game_num =
      title
      |> String.replace("Game ", "")
      |> String.to_integer()

    game =
      items
      |> String.split(";")
      |> Enum.map(fn subsets ->
        subsets
        |> String.split(",")
        |> Enum.into(%{}, fn subset ->
          [_, number, color] = String.split(subset, " ")
          {color, String.to_integer(number)}
        end)
      end)

    {game_num, game}
  end)
games
|> Enum.map(fn {_game_num, game} ->
  ["red", "green", "blue"]
  |> Enum.map(fn color ->
    game
    |> Enum.map(&Map.get(&1, color, 0))
    |> Enum.max()
  end)
  |> Enum.product()
end)
|> Enum.sum()