using AdvenOfCode.Contracts; namespace AoC_2025; public class Day12 : IPuzzleSolver { private (int[] presentSizes, (int area, int[] presentCounts)[] regions) ParsePuzzleInput(string path) { var puzzleInput = File.ReadAllText(path) .Split($"{Environment.NewLine}{Environment.NewLine}", StringSplitOptions.TrimEntries) .ToList(); var presentSizes = puzzleInput[..^1] .Select(s => s.Count(c => c == '#')) .ToArray(); var regions = puzzleInput[^1] .Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) .Select(s => s.Split(':', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)) .Select(s => (s[0].Split('x').Select(int.Parse).Aggregate((x, y) => x * y), s[1].Split(' ').Select(int.Parse).ToArray())) .ToArray(); return (presentSizes, regions); } public long SolvePart1(string pathToPuzzleInput) { var (presentSizes, regions) = ParsePuzzleInput(pathToPuzzleInput); var everythingFits = regions.Count(region => region.area >= GetMinTotalPresentArea(region.presentCounts, presentSizes)); return everythingFits; } private int GetMinTotalPresentArea(int[] presentCounts, int[] presentSizes) { return presentCounts .Zip(presentSizes, (count, size) => count * size) .Sum(); } public long SolvePart2(string pathToPuzzleInput) { return 0; } }