diff --git a/AoC_2025/Day08.cs b/AoC_2025/Day08.cs index dbf4841..da3b0ab 100644 --- a/AoC_2025/Day08.cs +++ b/AoC_2025/Day08.cs @@ -22,12 +22,10 @@ public class Day08 public long SolvePart1(string pathToPuzzleInput, int amountToConnect) { - var points = ParsePuzzleInput(pathToPuzzleInput); - - var pointPairs = GetAllCombinationsSortedByDistance(points); - - var circuits = CombineCircuits(amountToConnect, points, pointPairs); - + var jBoxes = ParsePuzzleInput(pathToPuzzleInput); + var jBoxPairs = GetAllCombinationsSortedByDistance(jBoxes); + var circuits = CreateCircuits(jBoxes); + circuits = CombineCircuits(circuits, jBoxPairs, amountToConnect); return circuits .Select(circuit => circuit.Count) .OrderDescending() @@ -35,44 +33,42 @@ public class Day08 .Aggregate((acc, next) => acc * next); } + private List> CreateCircuits(Coordinate[] jBoxes) + { + return jBoxes.Select(p => new List { p }).ToList(); + } + public long SolvePart2(string pathToPuzzleInput) { - var points = ParsePuzzleInput(pathToPuzzleInput); - - var pointPairs = GetAllCombinationsSortedByDistance(points); - - var lastConnected = LastCombinedConnectAllCircuits(points, pointPairs); - + var jBoxes = ParsePuzzleInput(pathToPuzzleInput); + var jBoxPairs = GetAllCombinationsSortedByDistance(jBoxes); + var circuits = CreateCircuits(jBoxes); + var lastConnected = LastCombinedConnectAllCircuits(circuits, jBoxPairs); return lastConnected.a.x * lastConnected.b.x; } - private List> CombineCircuits(int amountToConnect, Coordinate[] points, - (Coordinate pointA, Coordinate pointB)[] pointPairs) + private List> CombineCircuits(List> circuits, + (Coordinate boxA, Coordinate boxB)[] jBoxPairs, int amountToConnect) { - var circuits = points.Select(p => new List() { p }).ToList(); for (var i = 0; i < amountToConnect; i++) { - var nextToConnect = pointPairs[i]; - circuits = AddToCircuits(nextToConnect.pointA, nextToConnect.pointB, circuits); + var nextToConnect = jBoxPairs[i]; + circuits = ConnectJBoxes(nextToConnect.boxA, nextToConnect.boxB, circuits); } return circuits; } - private (Coordinate a, Coordinate b) LastCombinedConnectAllCircuits(Coordinate[] points, - (Coordinate pointA, Coordinate pointB)[] pointPairs) + private (Coordinate a, Coordinate b) LastCombinedConnectAllCircuits(List> circuits, + (Coordinate boxA, Coordinate boxB)[] jBoxPairs) { - var circuits = points.Select(p => new List() { p }).ToList(); - var lastConnected = pointPairs.First(); - var i = 0; - while(circuits.Count > 1) + foreach (var jBoxPair in jBoxPairs) { - var nextToConnect = pointPairs[i++]; - circuits = AddToCircuits(nextToConnect.pointA, nextToConnect.pointB, circuits); - lastConnected = nextToConnect; + circuits = ConnectJBoxes(jBoxPair.boxA, jBoxPair.boxB, circuits); + if(circuits.Count <= 1) + return jBoxPair; } - - return lastConnected; + return jBoxPairs[^1]; } private double GetDistance(Coordinate a, Coordinate b) @@ -80,7 +76,7 @@ public class Day08 return Math.Sqrt(Math.Pow(a.x - b.x, 2) + Math.Pow(a.y - b.y, 2) + Math.Pow(a.z - b.z, 2)); } - private List> AddToCircuits(Coordinate a, Coordinate b, List> circuits) + private List> ConnectJBoxes(Coordinate a, Coordinate b, List> circuits) { var circuitToAddBTo = circuits.First(circuit => circuit.Contains(a)); var circuitToAddATo = circuits.First(circuit => circuit.Contains(b)); @@ -95,15 +91,15 @@ public class Day08 return circuits; } - private (Coordinate pointA, Coordinate pointB)[] GetAllCombinationsSortedByDistance(Coordinate[] coordinates) + private (Coordinate boxA, Coordinate boxB)[] GetAllCombinationsSortedByDistance(Coordinate[] jBoxes) { - var combinations = Combinations(coordinates) + var combinations = Combinations(jBoxes) .OrderBy(x => GetDistance(x.a, x.b)) .ToArray(); return combinations; } - private IEnumerable<(TValue a, TValue b)> Combinations(IEnumerable values) where TValue:IComparable + private IEnumerable<(TValue a, TValue b)> Combinations(IEnumerable values) { var enumeratedValues = values.Index().ToArray(); var pairs =