feat(*): Update 2021-07 files to brute force working part 2

This commit is contained in:
Josh Creek
2021-12-07 17:42:58 +00:00
parent 69a61b53e5
commit 6b51590b8b
+17 -17
View File
@@ -40,35 +40,35 @@
static void Part2(List<int> initialCrabPositions) static void Part2(List<int> initialCrabPositions)
{ {
// Using the median average is wrong here // Calculate optimal position
// Mean average works for the example data, but not for my input // Loop through all possible positions and work out the total fuel consumption
// Need to change how I work out the optimal horizontal position int minPosition = initialCrabPositions.Min();
int maxPosition = initialCrabPositions.Max();
Dictionary<int, int> possiblePositions = new Dictionary<int, int>();
double mean = initialCrabPositions.Average(); for (int i = minPosition; i <= maxPosition; i++)
{
possiblePositions.Add(i,CalculateTotalFuelConsumption(initialCrabPositions, i));
}
int meanAverage = Convert.ToInt32(mean); // Find lowest fuel consumption
var lowestFuelConsumptionPosition = possiblePositions.OrderBy(kvp => kvp.Value).First();
// int medianAverage = initialCrabPositions.OrderBy(x=>x).Skip(initialCrabPositions.Count()/2).First(); Console.WriteLine($"Position: {lowestFuelConsumptionPosition.Key} Fuel consumption: {lowestFuelConsumptionPosition.Value}");
}
// 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}");
public static int CalculateTotalFuelConsumption(List<int> initialCrabPositions, int targetPosition)
{
int totalFuelConsumption = 0; int totalFuelConsumption = 0;
foreach (int position in initialCrabPositions) foreach (int position in initialCrabPositions)
{ {
// Find the difference // Find the difference
int difference = Math.Abs(position - meanAverage); int difference = Math.Abs(position - targetPosition);
totalFuelConsumption += Convert.ToInt32(GetTriangularNumber(difference)); totalFuelConsumption += Convert.ToInt32(GetTriangularNumber(difference));
} }
Console.WriteLine($"Total fuel consumption: {totalFuelConsumption}"); return totalFuelConsumption;
} }
public static double GetTriangularNumber(int n) public static double GetTriangularNumber(int n)