Advent of Code 2023 Day 2 Part 1
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)
defmodule Checker do
def check(%{"red" => num}) when num > 12, do: false
def check(%{"green" => num}) when num > 13, do: false
def check(%{"blue" => num}) when num > 14, do: false
def check(_subset), do: true
end
games
|> Enum.reduce(0, fn {game_num, game}, acc ->
acc + if Enum.all?(game, &Checker.check(&1)), do: game_num, else: 0
end)