# Day 02 ```elixir Mix.install([:kino_aoc]) ``` ## Section ```elixir {: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" <> ...} ``` ```elixir 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 ```elixir 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 ```elixir 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 ```