From 0101f506cb7636e7efd6b080466102d76a489b33 Mon Sep 17 00:00:00 2001 From: Sebastian Lindemeier Date: Tue, 9 Dec 2025 10:44:32 +0100 Subject: [PATCH] Refactor Day09 to rename MinMax to CoordinatePair and update related method names for consistency --- AoC_2025/Day09.cs | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/AoC_2025/Day09.cs b/AoC_2025/Day09.cs index 63cc277..176e916 100644 --- a/AoC_2025/Day09.cs +++ b/AoC_2025/Day09.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using AdvenOfCode.Contracts; using Coordinate = (long x, long y); -using MinMax = (long minX, long minY, long maxX, long maxY); +using CoordinatePair = (long minX, long minY, long maxX, long maxY); namespace AoC_2025; @@ -24,7 +24,7 @@ public class Day09 : IPuzzleSolver public long SolvePart1(string pathToPuzzleInput) { var redTiles = ParsePuzzleInput(pathToPuzzleInput); - var possibleRectangles = GetAllPossibleRectanglesAsMinMax(redTiles); + var possibleRectangles = GetAllPossibleRectanglesAsPairs(redTiles); var areas = GetOrderedAreas(possibleRectangles); return areas.First(); } @@ -32,47 +32,47 @@ public class Day09 : IPuzzleSolver public long SolvePart2(string pathToPuzzleInput) { var redTiles = ParsePuzzleInput(pathToPuzzleInput); - var borders = GetBordersAsMinMax(redTiles); - var possibleRectangles = GetAllPossibleRectanglesAsMinMax(redTiles); + var borders = GetBordersAsPairs(redTiles); + var possibleRectangles = GetAllPossibleRectanglesAsPairs(redTiles); var containedRectangles = GetRectanglesContainedInBorders(possibleRectangles, borders); var areas = GetOrderedAreas(containedRectangles); return areas.First(); } - private IOrderedEnumerable GetOrderedAreas(IEnumerable<(long minX, long minY, long maxX, long maxY)> containedRectangles) + private IOrderedEnumerable GetOrderedAreas(IEnumerable containedRectangles) { return containedRectangles .Select(rectangle => GetArea((rectangle.maxX, rectangle.maxY), (rectangle.minX, rectangle.minY))) .OrderDescending(); } - private IEnumerable<(long minX, long minY, long maxX, long maxY)> GetRectanglesContainedInBorders(IEnumerable<(long minX, long minY, long maxX, long maxY)> possibleRectangles, (long minX, long minY, long maxX, long maxY)[] borders) + private IEnumerable GetRectanglesContainedInBorders(IEnumerable possibleRectangles, CoordinatePair[] borders) { return possibleRectangles .Where(rectangle => IsRectangleInsideBorders(borders, rectangle)); } - private IEnumerable<(long minX, long minY, long maxX, long maxY)> GetAllPossibleRectanglesAsMinMax(Coordinate[] redTiles) + private IEnumerable GetAllPossibleRectanglesAsPairs(Coordinate[] redTiles) { return Combinations(redTiles).Select(x => AsMinMax(x.a, x.b)); } - private MinMax[] GetBordersAsMinMax(Coordinate[] redTiles) + private CoordinatePair[] GetBordersAsPairs(Coordinate[] redTiles) { - return GetBorder(redTiles).Select(x => AsMinMax(x.a, x.b)).ToArray(); + return GetBorders(redTiles).Select(x => AsMinMax(x.a, x.b)).ToArray(); } - private bool IsRectangleInsideBorders((long minX, long minY, long maxX, long maxY)[] borders, (long minX, long minY, long maxX, long maxY) rectangle) + private bool IsRectangleInsideBorders(CoordinatePair[] borders, CoordinatePair rectangle) { return !borders.Any(border => RectangleOverlapsBorder(rectangle, border)); } - private MinMax AsMinMax(Coordinate a, Coordinate b) + private CoordinatePair AsMinMax(Coordinate a, Coordinate b) { return (Math.Min(a.x, b.x), Math.Min(a.y, b.y), Math.Max(a.x, b.x), Math.Max(a.y, b.y)); } - private bool RectangleOverlapsBorder(MinMax rectangle, MinMax borderSegment) + private bool RectangleOverlapsBorder(CoordinatePair rectangle, CoordinatePair borderSegment) { return rectangle.minX < borderSegment.maxX && rectangle.minY < borderSegment.maxY && rectangle.maxX > borderSegment.minX && rectangle.maxY > borderSegment.minY; @@ -83,13 +83,6 @@ public class Day09 : IPuzzleSolver return (Math.Abs(tileA.x - tileB.x) + 1) * (Math.Abs(tileA.y - tileB.y) + 1); } - private IEnumerable<(Coordinate tileA, Coordinate tileB)> GetAllCombinationsSortedByArea(IEnumerable tiles) - { - var combinations = Combinations(tiles) - .OrderByDescending(x => GetArea(x.a, x.b)); - return combinations; - } - private IEnumerable<(TValue a, TValue b)> Combinations(IEnumerable values) { var enumeratedValues = values.Index().ToArray(); @@ -101,9 +94,8 @@ public class Day09 : IPuzzleSolver return pairs; } - private IEnumerable<(Coordinate a, Coordinate b)> GetBorder(IEnumerable tiles) + private IEnumerable<(Coordinate a, Coordinate b)> GetBorders(Coordinate[] tiles) { - var allTiles = tiles.ToArray(); - return allTiles.Zip([..allTiles[1..], allTiles[0]], (a, b) => (a, b)); + return tiles.Zip([..tiles[1..], tiles[0]], (a, b) => (a, b)); } } \ No newline at end of file