44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using AdvenOfCode.Contracts;
|
|
|
|
namespace AoC_2025;
|
|
|
|
public class Day12 : IPuzzleSolver<long>
|
|
{
|
|
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;
|
|
}
|
|
} |