From 6b51590b8b3bce916c537c20e9126db1a025b626 Mon Sep 17 00:00:00 2001 From: Josh Creek Date: Tue, 7 Dec 2021 17:42:58 +0000 Subject: [PATCH] feat(*): Update 2021-07 files to brute force working part 2 --- 2021/07/Program.cs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/2021/07/Program.cs b/2021/07/Program.cs index 9b4ccaf..950726f 100644 --- a/2021/07/Program.cs +++ b/2021/07/Program.cs @@ -40,35 +40,35 @@ static void Part2(List initialCrabPositions) { - // Using the median average is wrong here - // Mean average works for the example data, but not for my input - // Need to change how I work out the optimal horizontal position + // Calculate optimal position + // Loop through all possible positions and work out the total fuel consumption + int minPosition = initialCrabPositions.Min(); + int maxPosition = initialCrabPositions.Max(); + Dictionary possiblePositions = new Dictionary(); - double mean = initialCrabPositions.Average(); + for (int i = minPosition; i <= maxPosition; i++) + { + possiblePositions.Add(i,CalculateTotalFuelConsumption(initialCrabPositions, i)); + } - int meanAverage = Convert.ToInt32(mean); - - // int medianAverage = initialCrabPositions.OrderBy(x=>x).Skip(initialCrabPositions.Count()/2).First(); - - // int modalAverage = initialCrabPositions.GroupBy(n=> n). - // OrderByDescending(g=> g.Count()). - // Select(g => g.Key).FirstOrDefault(); - - Console.WriteLine($"Mean average: {meanAverage}"); - // Console.WriteLine($"Median average: {medianAverage}"); - // Console.WriteLine($"Modal average: {modalAverage}"); + // Find lowest fuel consumption + var lowestFuelConsumptionPosition = possiblePositions.OrderBy(kvp => kvp.Value).First(); + Console.WriteLine($"Position: {lowestFuelConsumptionPosition.Key} Fuel consumption: {lowestFuelConsumptionPosition.Value}"); + } + public static int CalculateTotalFuelConsumption(List initialCrabPositions, int targetPosition) + { int totalFuelConsumption = 0; foreach (int position in initialCrabPositions) { // Find the difference - int difference = Math.Abs(position - meanAverage); + int difference = Math.Abs(position - targetPosition); totalFuelConsumption += Convert.ToInt32(GetTriangularNumber(difference)); } - Console.WriteLine($"Total fuel consumption: {totalFuelConsumption}"); + return totalFuelConsumption; } public static double GetTriangularNumber(int n)