diff --git a/AdventOfCode.csproj b/AdventOfCode.csproj index 2b14c81..44344c2 100644 --- a/AdventOfCode.csproj +++ b/AdventOfCode.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net8.0 enable enable diff --git a/Year2023/Day2.cs b/Year2023/Day2.cs new file mode 100644 index 0000000..ca253a9 --- /dev/null +++ b/Year2023/Day2.cs @@ -0,0 +1,99 @@ +namespace AdventOfCode.Year2023; + +public static class Day2 +{ + private static List Input = File.ReadAllLines("inputs/Year2023/day2.txt").ToList(); + + private class Game + { + public int Id { get; set; } + public List> Sets { get; set; } = new List>(); + } + private static List Games = new List(); + + public static void Run() + { + ParseGames(); + Console.WriteLine($@" +Day2 Solution +Part1 Result: {Part1()} +Part2 Result: {Part2()} + +============================="); + } + + private static int Part1() + { + int sum = 0; + + foreach (var game in Games) + { + foreach (var set in game.Sets) + if (set["red"] > 12 || set["green"] > 13 || set["blue"] > 14) goto cont; + sum += game.Id; + cont: continue; + } + + return sum; + } + + private static int Part2() + { + int sum = 0; + + foreach (var game in Games) + { + Dictionary minimum = new Dictionary { + {"red", 0}, + {"green", 0}, + {"blue", 0} + }; + foreach (var set in game.Sets) + { + foreach (var color in set.Keys) + { + if (minimum[color] < set[color]) minimum[color] = set[color]; + } + } + sum += minimum.Values.ToArray().Product(); + } + + return sum; + } + + private static void ParseGames() + { + foreach (var line in Input) + { + Game game = new Game(); + + string[] game_sets = line.Split(": "); + game.Id = Convert.ToInt32(game_sets[0].Split(" ")[1]); + + string[] sets = game_sets[1].Split("; "); + + foreach (var setStr in sets) + { + Dictionary set = new Dictionary(); + foreach (var color in setStr.Split(", ")) + { + set.Add(color.Split(" ")[1], Convert.ToInt32(color.Split(" ")[0])); + } + if (!set.ContainsKey("red")) set.Add("red", 0); + if (!set.ContainsKey("green")) set.Add("green", 0); + if (!set.ContainsKey("blue")) set.Add("blue", 0); + game.Sets.Add(set); + } + + Games.Add(game); + } + } + + private static int Product(this int[] array) + { + int result = 1; + foreach (var e in array) + result *= e; + return result; + } +} diff --git a/Year2023/Loader2023.cs b/Year2023/Loader2023.cs index d56d0b5..899dbec 100644 --- a/Year2023/Loader2023.cs +++ b/Year2023/Loader2023.cs @@ -11,6 +11,7 @@ public static class Loader2023 */ Day1.Run(); + Day2.Run(); } }