Ejemplo n.º 1
0
        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}");
        }
Ejemplo n.º 2
0
 public string Compute(string[] input)
 {
     surplus   = new ChemicalsStore();
     reactions = input.Select(i => Reaction.Parse(i)).ToList();
     return($"{CalculateOreNeeded(new Chemical { Name = "FUEL", Quantity = 1 })}");
 }