Day 02
Mix.install([:kino_aoc])
Section
{:ok, puzzle_input} =
KinoAOC.download_puzzle("2023", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{:ok,
"Game 1: 3 blue, 7 green, 10 red; 4 green, 4 red; 1 green, 7 blue, 5 red; 8 blue, 10 red; 7 blue, 19 red, 1 green\nGame 2: 6 red, 10 green; 11 green, 4 red; 16 green, 2 blue; 7 green, 5 blue, 4 red; 17 green, 1 red, 1 blue\nGame 3: 5 red, 9 blue, 1 green; 5 red; 11 red, 2 green, 8 blue; 2 green, 6 blue\nGame 4: 2 red, 5 green; 2 blue, 3 red, 3 green; 3 red, 2 blue; 8 green, 2 red\nGame 5: 12 red, 13 blue; 13 blue, 2 green, 9 red; 9 blue, 1 red; 2 green, 12 blue; 1 green, 1 red, 11 blue\nGame 6: 4 blue, 11 red; 4 red; 1 green, 7 red; 1 green, 1 blue; 8 blue, 10 red; 1 green, 2 blue, 8 red\nGame 7: 7 blue, 15 red, 1 green; 5 green, 17 red, 7 blue; 5 blue, 1 green; 11 blue, 2 green, 17 red; 14 green, 9 red, 2 blue; 6 blue, 19 red\nGame 8: 13 green; 5 green; 3 blue, 9 green, 1 red; 4 red, 11 green, 4 blue\nGame 9: 4 green, 1 red, 1 blue; 4 green, 7 blue, 7 red; 9 blue, 4 red; 2 blue, 8 red, 5 green; 6 blue, 2 green; 5 red, 5 green, 10 blue\nGame 10: 1 green, 5 blue, 3 red; 4 green, 9 red, 3 blue; 11 red, 2 green, 5 blue; 3 green, 1 blue, 2 red; 6 red, 2 blue\nGame 11: 2 red, 6 green, 12 blue; 2 red, 9 blue, 1 green; 12 green, 3 blue\nGame 12: 1 red, 1 blue, 12 green; 6 green, 2 red, 1 blue; 6 red, 6 green, 1 blue; 3 green, 6 red\nGame 13: 5 red, 19 green, 3 blue; 6 red, 7 blue, 11 green; 8 blue, 6 red; 3 blue, 4 green, 4 red; 8 red, 15 green, 5 blue; 5 blue, 2 red, 10 green\nGame 14: 5 blue, 9 green; 4 green, 6 blue; 14 green, 1 red, 4 blue; 3 blue, 3 green; 2 green; 5 blue, 7 green, 1 red\nGame 15: 5 red, 8 blue; 9 blue, 3 red; 5 red, 1 green, 16 blue; 1 blue, 3 red, 2 green; 5 red, 2 green, 10 blue\nGame 16: 6 blue, 9 green, 10 red; 8 blue, 9 red, 14 green; 7 green, 1 blue, 1 red; 8 red, 5 green, 8 blue; 10 red, 5 blue, 14 green; 7 blue, 11 red, 3 green\nGame 17: 12 blue, 12 red, 6 green; 14 green, 17 blue, 4 red; 11 blue, 1 red, 13 green\nGame 18: 7 blue, 2 green, 4 red; 1 blue, 2 green, 4 red; 2 red, 17 blue\nGame 19: 3 red, 9 green; 8 red, 2 blue, 2 green; 3 blue, 15 green, 11 red; 18 green, 3 red, 1 blue\nGame 20: 5 green, 5 red, 16 blue; 8 blue, 6 green, 4 red; 10 red, 11 blue; 5 red, 5 blue, 5 green\nGame 21: 1 red, 3 blue, 14 green; 6 red, 6 blue, 17 green; 12 green, 17 blue, 3 red; 15 green, 1 red, 19 blue; 3 red, 18 blue, 4 green\nGame 22: 15 blue; 11 blue, 2 red, 1 green; 1 green, 7 red; 1 red, 18 blue, 1 green; 16 blue; 3 red, 6 blue\nGame 23: 11 blue, 6 green, 4 red; 9 green, 11 red, 8 blue; 5 green, 5 red, 2 blue; 11 green, 4 blue, 11 red; 3 green, 9 blue, 2 red\nGame 24: 7 green, 2 red; 8 red, 1 blue, 15 green; 3 red, 6 green, 6 blue\nGame 25: 9 blue, 9 green; 3 green, 7 blue, 1 red; 6 green, 1 red, 1 blue; 6 green, 1 red, 1 blue\nGame 26: 1 green, 15 blue, 1 red; 1 red, 12 blue, 1 green; 16 blue; 5 red, 11 green, 14 blue; 6 green, 4 red, 14 blue\nGame 27: 14 red, 9 green; 11 red, 5 green, 6 blue; 1 red, 6 blue, 9 green\nGame 28: 6 green, 1 blue, 9 red; 1 green, 9 red; 7 red; 11 red, 1 blue, 2 green; 8 red, 10 green; 6 green, 1 blue, 5 red\nGame 29: 1 red, 19 blue, 3 green; 9 blue, 1 red; 8 green, 17 blue; 11 blue, 4 green\nGame 30: 7 blue; 5 blue, 1 red, 1 green; 3 blue, 1 red\nGame 31: 9 red, 2 green, 1 blue; 5 red, 1 green, 3 blue; 2 green, 7 red; 2 green, 12 red\nGame 32: 1 red, 1 blue, 17 green; 14 blue, 10 green, 6 red; 12 green, 11 blue, 3 red\nGame 33: 2 red, 1 green, 3 blue; 7 blue, 4 green; 1 red, 3 green, 5 blue\nGame 34: 9 blue, 1 green, 9 red; 12 blue, 2 green, 12 red; 3 blue, 12 red; 2 green, 14 blue, 11 red; 10 red, 12 blue\nGame 35: 6 blue, 2 red; 5 blue; 6 green, 9 blue, 3 red; 3 green, 1 red, 2 blue\nGame 36: 9 blue, 4 green, 6 red; 2 red, 4 green; 7 red, 3 green; 6 green, 2 blue; 3 red, 4 blue, 3 green; 3 green, 4 red, 16 blue\nGame 37: 2 green, 8 red, 4 blue; 3 red, 4 blue, 2 green; 5 blue, 3 green; 9 blue, 15 green; 5 red, 11 green, 7 blue\nGame 38: 12 red, 1 blue; 10 red, 3 green, 2 blue; 7 blue, 3 green, 8 red; 14 red, 2 green\nGame 39: 16 green, 2 red, 17 blue; 6 red, 4 green, 13 blue; 7 blue, 1 green, 4 red; 2 green, 3 blue; 12 green, 6 red, 17 blue; 5 red, 2 blue, 6 green\nGame 40: 3 green, 4 blue, 2 red; 2 green, 3 red; 6" <> ...}
games =
puzzle_input
|> String.split("\n", trim: true)
|> Enum.map(fn "Game " <> game ->
{id, ": " <> rest} = Integer.parse(game)
picks =
for pick <- String.split(rest, "; ") do
pick
|> String.split(", ")
|> Map.new(fn balls ->
{num, " " <> color} = Integer.parse(balls)
{color, num}
end)
end
{id, picks}
end)
[
{1,
[
%{"blue" => 3, "green" => 7, "red" => 10},
%{"green" => 4, "red" => 4},
%{"blue" => 7, "green" => 1, "red" => 5},
%{"blue" => 8, "red" => 10},
%{"blue" => 7, "green" => 1, "red" => 19}
]},
{2,
[
%{"green" => 10, "red" => 6},
%{"green" => 11, "red" => 4},
%{"blue" => 2, "green" => 16},
%{"blue" => 5, "green" => 7, "red" => 4},
%{"blue" => 1, "green" => 17, "red" => 1}
]},
{3,
[
%{"blue" => 9, "green" => 1, "red" => 5},
%{"red" => 5},
%{"blue" => 8, "green" => 2, "red" => 11},
%{"blue" => 6, "green" => 2}
]},
{4,
[
%{"green" => 5, "red" => 2},
%{"blue" => 2, "green" => 3, "red" => 3},
%{"blue" => 2, "red" => 3},
%{"green" => 8, "red" => 2}
]},
{5,
[
%{"blue" => 13, "red" => 12},
%{"blue" => 13, "green" => 2, "red" => 9},
%{"blue" => 9, "red" => 1},
%{"blue" => 12, "green" => 2},
%{"blue" => 11, "green" => 1, "red" => 1}
]},
{6,
[
%{"blue" => 4, "red" => 11},
%{"red" => 4},
%{"green" => 1, "red" => 7},
%{"blue" => 1, "green" => 1},
%{"blue" => 8, "red" => 10},
%{"blue" => 2, "green" => 1, "red" => 8}
]},
{7,
[
%{"blue" => 7, "green" => 1, "red" => 15},
%{"blue" => 7, "green" => 5, "red" => 17},
%{"blue" => 5, "green" => 1},
%{"blue" => 11, "green" => 2, "red" => 17},
%{"blue" => 2, "green" => 14, "red" => 9},
%{"blue" => 6, "red" => 19}
]},
{8,
[
%{"green" => 13},
%{"green" => 5},
%{"blue" => 3, "green" => 9, "red" => 1},
%{"blue" => 4, "green" => 11, "red" => 4}
]},
{9,
[
%{"blue" => 1, "green" => 4, "red" => 1},
%{"blue" => 7, "green" => 4, "red" => 7},
%{"blue" => 9, "red" => 4},
%{"blue" => 2, "green" => 5, "red" => 8},
%{"blue" => 6, "green" => 2},
%{"blue" => 10, "green" => 5, "red" => 5}
]},
{10,
[
%{"blue" => 5, "green" => 1, "red" => 3},
%{"blue" => 3, "green" => 4, "red" => 9},
%{"blue" => 5, "green" => 2, "red" => 11},
%{"blue" => 1, "green" => 3, "red" => 2},
%{"blue" => 2, "red" => 6}
]},
{11,
[
%{"blue" => 12, "green" => 6, "red" => 2},
%{"blue" => 9, "green" => 1, "red" => 2},
%{"blue" => 3, "green" => 12}
]},
{12,
[
%{"blue" => 1, "green" => 12, "red" => 1},
%{"blue" => 1, "green" => 6, "red" => 2},
%{"blue" => 1, "green" => 6, "red" => 6},
%{"green" => 3, "red" => 6}
]},
{13,
[
%{"blue" => 3, "green" => 19, "red" => 5},
%{"blue" => 7, "green" => 11, "red" => 6},
%{"blue" => 8, "red" => 6},
%{"blue" => 3, "green" => 4, "red" => 4},
%{"blue" => 5, "green" => 15, "red" => 8},
%{"blue" => 5, "green" => 10, "red" => 2}
]},
{14,
[
%{"blue" => 5, "green" => 9},
%{"blue" => 6, "green" => 4},
%{"blue" => 4, "green" => 14, "red" => 1},
%{"blue" => 3, "green" => 3},
%{"green" => 2},
%{"blue" => 5, "green" => 7, "red" => 1}
]},
{15,
[
%{"blue" => 8, "red" => 5},
%{"blue" => 9, "red" => 3},
%{"blue" => 16, "green" => 1, "red" => 5},
%{"blue" => 1, "green" => 2, "red" => 3},
%{"blue" => 10, "green" => 2, "red" => 5}
]},
{16,
[
%{"blue" => 6, "green" => 9, "red" => 10},
%{"blue" => 8, "green" => 14, "red" => 9},
%{"blue" => 1, "green" => 7, "red" => 1},
%{"blue" => 8, "green" => 5, "red" => 8},
%{"blue" => 5, "green" => 14, "red" => 10},
%{"blue" => 7, "green" => 3, "red" => 11}
]},
{17,
[
%{"blue" => 12, "green" => 6, "red" => 12},
%{"blue" => 17, "green" => 14, "red" => 4},
%{"blue" => 11, "green" => 13, "red" => 1}
]},
{18,
[
%{"blue" => 7, "green" => 2, "red" => 4},
%{"blue" => 1, "green" => 2, "red" => 4},
%{"blue" => 17, "red" => 2}
]},
{19,
[
%{"green" => 9, "red" => 3},
%{"blue" => 2, "green" => 2, "red" => 8},
%{"blue" => 3, "green" => 15, "red" => 11},
%{"blue" => 1, "green" => 18, "red" => 3}
]},
{20,
[
%{"blue" => 16, "green" => 5, "red" => 5},
%{"blue" => 8, "green" => 6, "red" => 4},
%{"blue" => 11, "red" => 10},
%{"blue" => 5, "green" => 5, "red" => 5}
]},
{21,
[
%{"blue" => 3, "green" => 14, "red" => 1},
%{"blue" => 6, "green" => 17, "red" => 6},
%{"blue" => 17, "green" => 12, "red" => 3},
%{"blue" => 19, "green" => 15, "red" => 1},
%{"blue" => 18, "green" => 4, "red" => 3}
]},
{22,
[
%{"blue" => 15},
%{"blue" => 11, "green" => 1, "red" => 2},
%{"green" => 1, "red" => 7},
%{"blue" => 18, "green" => 1, "red" => 1},
%{"blue" => 16},
%{"blue" => 6, "red" => 3}
]},
{23,
[
%{"blue" => 11, "green" => 6, "red" => 4},
%{"blue" => 8, "green" => 9, "red" => 11},
%{"blue" => 2, "green" => 5, "red" => 5},
%{"blue" => 4, "green" => 11, "red" => 11},
%{"blue" => 9, "green" => 3, "red" => 2}
]},
{24,
[
%{"green" => 7, "red" => 2},
%{"blue" => 1, "green" => 15, "red" => 8},
%{"blue" => 6, "green" => 6, "red" => 3}
]},
{25,
[
%{"blue" => 9, "green" => 9},
%{"blue" => 7, "green" => 3, "red" => 1},
%{"blue" => 1, "green" => 6, "red" => 1},
%{"blue" => 1, "green" => 6, "red" => 1}
]},
{26,
[
%{"blue" => 15, "green" => 1, "red" => 1},
%{"blue" => 12, "green" => 1, "red" => 1},
%{"blue" => 16},
%{"blue" => 14, "green" => 11, "red" => 5},
%{"blue" => 14, "green" => 6, "red" => 4}
]},
{27,
[
%{"green" => 9, "red" => 14},
%{"blue" => 6, "green" => 5, "red" => 11},
%{"blue" => 6, "green" => 9, "red" => 1}
]},
{28,
[
%{"blue" => 1, "green" => 6, "red" => 9},
%{"green" => 1, "red" => 9},
%{"red" => 7},
%{"blue" => 1, "green" => 2, "red" => 11},
%{"green" => 10, "red" => 8},
%{"blue" => 1, "green" => 6, "red" => 5}
]},
{29,
[
%{"blue" => 19, "green" => 3, "red" => 1},
%{"blue" => 9, "red" => 1},
%{"blue" => 17, "green" => 8},
%{"blue" => 11, "green" => 4}
]},
{30, [%{"blue" => 7}, %{"blue" => 5, "green" => 1, "red" => 1}, %{"blue" => 3, "red" => 1}]},
{31,
[
%{"blue" => 1, "green" => 2, "red" => 9},
%{"blue" => 3, "green" => 1, "red" => 5},
%{"green" => 2, "red" => 7},
%{"green" => 2, "red" => 12}
]},
{32,
[
%{"blue" => 1, "green" => 17, "red" => 1},
%{"blue" => 14, "green" => 10, "red" => 6},
%{"blue" => 11, "green" => 12, "red" => 3}
]},
{33,
[
%{"blue" => 3, "green" => 1, "red" => 2},
%{"blue" => 7, "green" => 4},
%{"blue" => 5, "green" => 3, "red" => 1}
]},
{34,
[
%{"blue" => 9, "green" => 1, "red" => 9},
%{"blue" => 12, "green" => 2, "red" => 12},
%{"blue" => 3, "red" => 12},
%{"blue" => 14, "green" => 2, "red" => 11},
%{"blue" => 12, "red" => 10}
]},
{35,
[
%{"blue" => 6, "red" => 2},
%{"blue" => 5},
%{"blue" => 9, "green" => 6, "red" => 3},
%{"blue" => 2, "green" => 3, "red" => 1}
]},
{36,
[
%{"blue" => 9, "green" => 4, "red" => 6},
%{"green" => 4, "red" => 2},
%{"green" => 3, "red" => 7},
%{"blue" => 2, "green" => 6},
%{"blue" => 4, "green" => 3, "red" => 3},
%{"blue" => 16, "green" => 3, "red" => 4}
]},
{37,
[
%{"blue" => 4, "green" => 2, "red" => 8},
%{"blue" => 4, "green" => 2, "red" => 3},
%{"blue" => 5, "green" => 3},
%{"blue" => 9, "green" => 15},
%{"blue" => 7, "green" => 11, "red" => 5}
]},
{38,
[
%{"blue" => 1, "red" => 12},
%{"blue" => 2, "green" => 3, "red" => 10},
%{"blue" => 7, "green" => 3, "red" => 8},
%{"green" => 2, "red" => 14}
]},
{39,
[
%{"blue" => 17, "green" => 16, "red" => 2},
%{"blue" => 13, "green" => 4, "red" => 6},
%{"blue" => 7, "green" => 1, "red" => 4},
%{"blue" => 3, "green" => 2},
%{"blue" => 17, "green" => 12, "red" => 6},
%{"blue" => 2, "green" => 6, "red" => 5}
]},
{40,
[
%{"blue" => 4, "green" => 3, "red" => 2},
%{"green" => 2, "red" => 3},
%{"blue" => 6, "green" => 6, "red" => 2},
%{"green" => 5},
%{"blue" => 3, "green" => 5, "red" => 1}
]},
{41,
[
%{"green" => 13, "red" => 11},
%{"blue" => 1, "green" => 3, "red" => 2},
%{"blue" => 1, "green" => 3, "red" => 9},
%{"green" => 11, "red" => 12},
%{"green" => 1, "red" => 9},
%{"green" => 9, ...}
]},
{42,
[
%{"blue" => 2, "green" => 4},
%{"blue" => 6, "green" => 10},
%{"blue" => 13, "green" => 6, "red" => 3},
%{"blue" => 11, "green" => 17},
%{"blue" => 8, ...}
]},
{43,
[
%{"blue" => 2, "green" => 10, "red" => 10},
%{"blue" => 3, "green" => 5, "red" => 3},
%{"blue" => 4, "green" => 10, ...},
%{"green" => 5},
%{...}
]},
{44,
[
%{"blue" => 1, "green" => 5, "red" => 4},
%{"blue" => 1, "green" => 3, ...},
%{"blue" => 1, ...},
%{...},
...
]},
{45, [%{"blue" => 7, "green" => 4, ...}, %{"blue" => 3, ...}, %{...}, ...]},
{46, [%{"blue" => 5, ...}, %{...}, ...]},
{47, [%{...}, ...]},
{48, [...]},
{49, ...},
{...},
...
]
Part 1
games
|> Enum.filter(fn {_, picks} ->
Enum.all?(picks, fn map ->
Map.get(map, "red", 0) <= 12 and Map.get(map, "green", 0) <= 13 and
Map.get(map, "blue", 0) <= 14
end)
end)
|> Enum.map(&elem(&1, 0))
|> Enum.sum()
2162
Part 2
games
|> Enum.map(fn {_, picks} ->
picks
|> Enum.reduce([0, 0, 0], fn hand, [r, g, b] ->
[
max(Map.get(hand, "red", 0), r),
max(Map.get(hand, "green", 0), g),
max(Map.get(hand, "blue", 0), b)
]
end)
|> Enum.product()
end)
|> Enum.sum()
72513