예제 #1
0
 public void TestProperCalculation()
 {
     Assert.AreEqual(2, FuelCounterUpper.ProperCalculateForMass(12));
     Assert.AreEqual(2, FuelCounterUpper.ProperCalculateForMass(14));
     Assert.AreEqual(966, FuelCounterUpper.ProperCalculateForMass(1969));
     Assert.AreEqual(50346, FuelCounterUpper.ProperCalculateForMass(100756));
 }
예제 #2
0
 public void TestNaiveCalculation()
 {
     Assert.AreEqual(2, FuelCounterUpper.NaiveCalculateForMass(12));
     Assert.AreEqual(2, FuelCounterUpper.NaiveCalculateForMass(14));
     Assert.AreEqual(654, FuelCounterUpper.NaiveCalculateForMass(1969));
     Assert.AreEqual(33583, FuelCounterUpper.NaiveCalculateForMass(100756));
 }
예제 #3
0
        public void FuelCounterUpper_CalculateFuelSum_TotalEqualsExpected(IEnumerable <int> testmasses, int expected)
        {
            //Arrange
            var counter = new FuelCounterUpper();

            //Act
            int result = counter.CalculateFuelSum(testmasses);

            //Assert
            Assert.Equal(expected, result);
        }
예제 #4
0
        public void FuelCounterUpper_CalculateFuel_TotalEqualsExamples(int testmass, int expected)
        {
            //Arrange
            var counter = new FuelCounterUpper();

            //Act
            int result = counter.CalculateFuel(testmass);

            //Assert
            Assert.Equal(expected, result);
        }
예제 #5
0
        public void Day01Part2_TestSolution()
        {
            string[] masses    = DayDataUtilities.ReadLinesFromFile("day01.txt");
            long     totalFuel = 0;
            long     mass;
            long     fuel;

            foreach (var smass in masses)
            {
                mass       = long.Parse(smass);
                fuel       = FuelCounterUpper.FuelFuelCalculator(mass);
                totalFuel += fuel;
            }
            Assert.Equal(5175499, totalFuel);
        }
예제 #6
0
        static void DayOne()
        {
            var masses = File
                         .ReadLines("./Data/massesForMyModules.txt")
                         .Select(m => double.TryParse(m, out var mass) ? mass : 0)
                         .Where(m => m > 0)
                         .ToList();

            var result = FuelCounterUpper.CalculateFuelForMasses(masses);
            var resultIncludingGasMass = FuelCounterUpper.CalculateFuelForMasses(masses, true);

            Console.WriteLine(
                $"The total fuel required for all the modules for my ship is {result}"
                );
            Console.WriteLine(
                $"The total fuel required for all the modules (including gas mass) for my ship is {resultIncludingGasMass}"
                );
        }
예제 #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter day to execute:");
            string input = Console.ReadLine().ToUpper();

            Dictionary <string, Func <string> > days = new Dictionary <string, Func <string> >()
            {
                ["1A"] = () =>
                {
                    var ints    = File.ReadAllText("files/day01/input_day01.txt").Split('\n').Select(x => int.Parse(x));
                    var counter = new FuelCounterUpper();
                    int result  = counter.CalculateFuelSum(ints);
                    return($"Total fuel is: {result}");
                },
                ["1B"] = () =>
                {
                    var ints    = File.ReadAllText("files/day01/input_day01.txt").Split('\n').Select(x => int.Parse(x));
                    var checker = new RocketEquationDoubleChecker();
                    int result  = checker.CalculateRocketEquationFuelSum(ints);
                    return($"Total fuel is: {result}");
                },

                ["2A"] = () =>
                {
                    var program     = new IntcodeProgram(File.ReadAllText("files/day02/input_day02_modified.txt"));
                    var interpreter = new IntcodeInterpreter();
                    interpreter.Execute(program, true);
                    return($"Position 0: {program.Program[0]}");
                },

                ["2B"] = () =>
                {
                    string defaultInput = File.ReadAllText("files/day02/input_day02.txt");
                    var    interpreter  = new IntcodeInterpreter();
                    int    output       = -1;
                    for (int noun = 0; noun <= 99; noun++)
                    {
                        for (int verb = 0; verb <= 99; verb++)
                        {
                            var program = new IntcodeProgram(defaultInput);
                            program.Program[1] = noun;
                            program.Program[2] = verb;

                            interpreter.Execute(program, false);

                            if (program.Program[0] == 19690720)
                            {
                                output = 100 * noun + verb;
                            }
                        }
                    }

                    return($"Output : {output}");
                },
            };

            if (!days.ContainsKey(input))
            {
                Console.WriteLine("Invalid input! Must be a supported day of advent. Aborting.");
                Console.ReadKey();
                return;
            }

            string finalOutput = days[input]();

            Console.WriteLine(finalOutput);
            Console.ReadLine();
        }
예제 #8
0
 public void Calculates_Correct_Fuel_Including_Gas_Mass(double[] masses, int expectedFuel)
 {
     Assert.Equal(expectedFuel, FuelCounterUpper.CalculateFuelForMasses(masses, true));
 }
예제 #9
0
 public void Calculates_Correct_Fuel_For_Many_Masses(double[] masses, int expectedFuel)
 {
     Assert.Equal(expectedFuel, FuelCounterUpper.CalculateFuelForMasses(masses));
 }
예제 #10
0
 public void SolvePart2()
 {
     Assert.Equal(
         4954710,
         FuelCounterUpper.Count("../../../input/day_01.txt", FuelCalculator.CalculateRecursive));
 }
예제 #11
0
 public void SolvePart1()
 {
     Assert.Equal(
         3305041,
         FuelCounterUpper.Count("../../../input/day_01.txt", FuelCalculator.Calculate));
 }
예제 #12
0
 public void TestProperCalculationSum()
 {
     Assert.AreEqual(51316, FuelCounterUpper.ProperCalculateForMass(new int[] { 12, 14, 1969, 100756 }));
 }
예제 #13
0
 public void TestNaiveCalculationSum()
 {
     Assert.AreEqual(34241, FuelCounterUpper.NaiveCalculateForMass(new int[] { 12, 14, 1969, 100756 }));
 }
예제 #14
0
        public void Day01Part2_TestCases(long mass, long expectedFuel)
        {
            long actualFuel = FuelCounterUpper.FuelFuelCalculator(mass);

            Assert.Equal(expectedFuel, actualFuel);
        }