public string ComputePartTwo(string[] input) { surplus = new ChemicalsStore(); reactions = input.Select(i => Reaction.Parse(i)).ToList(); var fuel = new Chemical { Name = "FUEL", Quantity = 1 }; var oreGoal = 1000000000000; var orePerFuel = CalculateOreNeeded(fuel); var fuelGuess = oreGoal / orePerFuel; var mostValidGuess = fuelGuess; var fuelGuessFactor = fuelGuess / 2; long result; while ((result = CalculateOreNeeded(fuel * fuelGuess)) < oreGoal) { mostValidGuess = fuelGuess; if (result == oreGoal) { return($"{result}"); } Console.WriteLine($"Failed with guess {fuelGuess} - {fuelGuessFactor} and result {result}/{oreGoal}"); while (CalculateOreNeeded(fuel * (fuelGuessFactor + fuelGuess)) > oreGoal) { fuelGuessFactor /= 2; } if (fuelGuessFactor == 0) { fuelGuessFactor = 1; } fuelGuess += fuelGuessFactor; } return($"{mostValidGuess}"); }
public string Compute(string[] input) { surplus = new ChemicalsStore(); reactions = input.Select(i => Reaction.Parse(i)).ToList(); return($"{CalculateOreNeeded(new Chemical { Name = "FUEL", Quantity = 1 })}"); }