예제 #1
0
파일: Program.cs 프로젝트: hervala/AoC2020
 public Benchmarks()
 {
     Day14           = new Day14();
     Day15           = new Day15();
     Day16           = new Day16();
     (console, _, _) = VirtualConsole.CreateBuffered();
 }
예제 #2
0
 public void Task2Test()
 {
     Assert.AreEqual(9, Day14.Task2("51589"));
     Assert.AreEqual(5, Day14.Task2("01245"));
     Assert.AreEqual(18, Day14.Task2("92510"));
     Assert.AreEqual(2018, Day14.Task2("59414"));
 }
예제 #3
0
        public void Part1Test()
        {
            Day14 day14  = new Day14();
            var   result = day14.Part1();

            Assert.Equal(1, result);
        }
예제 #4
0
        public void GetDay14Part2AnserTest()
        {
            BigInteger expected = 1893569;
            BigInteger actual   = Day14.GetDay14Part2Answer();

            Assert.Equal(expected, actual);
        }
예제 #5
0
        public void DistanceTravelledByFurthestReindeer(string reindeer, int time, int expectedDistance)
        {
            var day14          = new Day14();
            var actualDistance = day14.DistanceTravelledByFurthestReindeer(reindeer, time);

            Assert.Equal(expectedDistance, actualDistance);
        }
예제 #6
0
        public void Day14Part02()
        {
            var day  = new Day14();
            var grid = day.GenerateGrid("flqrgnkx");

            day.Part02("flqrgnkx").Should().Be("1242");
        }
예제 #7
0
        public async Task Day14_Part2_Test()
        {
            //var result = await fixture.Client.GetAsync("/2019/day/14/input");
            //result.EnsureSuccessStatusCode();
            //var input = await result.Content.ReadAsStringAsync();
            var input             = Day14Input;
            var totalCollectedOre = 1000000000000;
            var fuelAmount        = 0L;
            var fuelLeft          = 0L;
            var fuelRight         = 4300000L;
            var neededOre         = 0L;

            // using binary search to find the fuel amount
            while (true)
            {
                if (fuelAmount == fuelLeft + (fuelRight - fuelLeft) / 2)
                {
                    break;
                }
                fuelAmount = fuelLeft + (fuelRight - fuelLeft) / 2;
                neededOre  = new Day14().CalculateNeededOre(input, neededOutput: (material: "FUEL", amount: fuelAmount));

                if (totalCollectedOre - neededOre > 0)
                {
                    fuelLeft = fuelAmount;
                }
                else
                {
                    fuelRight = fuelAmount;
                }
            }

            Assert.Equal(4200533, fuelAmount);
        }
예제 #8
0
        public void PartATests(int input, string expectedOutput)
        {
            var day    = new Day14();
            var result = day.SolveA(input);

            Assert.AreEqual(expectedOutput, result);
        }
예제 #9
0
        public void PartBTests(string input, int expectedOutput)
        {
            var day    = new Day14();
            var result = day.SolveB(input);

            Assert.AreEqual(expectedOutput, result);
        }
예제 #10
0
        public void CanSolvePart2(string[] data, int expected)
        {
            var day    = new Day14();
            var result = day.SolvePart2(data);

            Assert.Equal(expected, result);
        }
예제 #11
0
        public void TestMask(string bits, int defaultValue, UInt64 expected)
        {
            var day    = new Day14();
            var result = day.Mask(bits, defaultValue);

            Assert.Equal(expected, result);
        }
예제 #12
0
    public void Y2021_Day14_Expand_Returns_Correct_Value(int steps, long expected)
    {
        // Arrange
        string[] instructions =
        {
            "NNCB",
            string.Empty,
            "CH -> B",
            "HH -> N",
            "CB -> H",
            "NH -> C",
            "HB -> C",
            "HC -> B",
            "HN -> C",
            "NN -> C",
            "BH -> H",
            "NC -> B",
            "NB -> B",
            "BN -> B",
            "BB -> N",
            "BC -> B",
            "CC -> N",
            "CN -> C",
        };

        // Act
        long actual = Day14.Expand(instructions, steps);

        // Assert
        actual.ShouldBe(expected);
    }
예제 #13
0
        public void Day14()
        {
            var day = new Day14();

            Assert.Equal(8304, day.FirstPart());
            Assert.Equal(1018, day.SecondPart());
        }
예제 #14
0
    public static void Solve(string[] input)
    {
        var  memory = new Dictionary <ulong, ulong>();
        Mask Mask   = default;

        foreach (string line in input)
        {
            if (line.StartsWith("mask"))
            {
                Mask = GetMaskFromString(line);
            }
            else
            {
                // Calculate all the addresses needed and write to all of them
                var wc        = Day14.GetWriteCommandFromString(line);
                var addresses = CalculateAddresses((ulong)wc.Address, Mask);
                foreach (var address in addresses)
                {
                    if (memory.ContainsKey(address))
                    {
                        memory[address] = wc.Value;
                    }
                    else
                    {
                        memory.Add(address, wc.Value);
                    }
                }
            }
        }
        var part2Answer = memory.Select(x => Convert.ToInt64(x.Value)).Sum();

        Console.WriteLine($"Part 2: {part2Answer}");
    }
예제 #15
0
        public void Part2_Answer()
        {
            var day14 = new Day14();

            var(_, actual) = day14.Count("jzgqcdpd");
            Assert.Equal(1212, actual);
        }
예제 #16
0
        public void Solve2()
        {
            var result = Day14.Solve2("165061");

            File.WriteAllText("C:\\Code\\aoc2018\\output14.txt", result.Item1);
            _output.WriteLine(result.Item2.ToString());
        }
예제 #17
0
        public void Part1()
        {
            var day14 = new Day14();

            var(actual, _) = day14.Count("flqrgnkx");
            Assert.Equal(8108, actual);
        }
예제 #18
0
 public void Puzzle1ExampleTest()
 {
     Assert.AreEqual("5158916779", Day14.Puzzle1(9));
     Assert.AreEqual("0124515891", Day14.Puzzle1(5));
     Assert.AreEqual("9251071085", Day14.Puzzle1(18));
     Assert.AreEqual("5941429882", Day14.Puzzle1(2018));
 }
예제 #19
0
        public void Test5()
        {
            var reactions = new[] {
                "171 ORE => 8 CNZTR",
                "7 ZLQW, 3 BMBT, 9 XCVML, 26 XMNCP, 1 WPTQ, 2 MZWV, 1 RJRHP => 4 PLWSL",
                "114 ORE => 4 BHXH",
                "14 VRPVC => 6 BMBT",
                "6 BHXH, 18 KTJDG, 12 WPTQ, 7 PLWSL, 31 FHTLT, 37 ZDVW => 1 FUEL",
                "6 WPTQ, 2 BMBT, 8 ZLQW, 18 KTJDG, 1 XMNCP, 6 MZWV, 1 RJRHP => 6 FHTLT",
                "15 XDBXC, 2 LTCX, 1 VRPVC => 6 ZLQW",
                "13 WPTQ, 10 LTCX, 3 RJRHP, 14 XMNCP, 2 MZWV, 1 ZLQW => 1 ZDVW",
                "5 BMBT => 4 WPTQ",
                "189 ORE => 9 KTJDG",
                "1 MZWV, 17 XDBXC, 3 XCVML => 2 XMNCP",
                "12 VRPVC, 27 CNZTR => 2 XDBXC",
                "15 KTJDG, 12 BHXH => 5 XCVML",
                "3 BHXH, 2 VRPVC => 7 MZWV",
                "121 ORE => 7 VRPVC",
                "7 XCVML => 6 RJRHP",
                "5 BHXH, 4 VRPVC => 5 LTCX"
            };
            var actual = Day14.Part1(reactions);

            Assert.AreEqual(2210736, actual);

            var actual2 = Day14.Part2(reactions);

            Assert.AreEqual(460664, actual2);
        }
예제 #20
0
 public void Puzzle2ExampleTest()
 {
     Assert.AreEqual(9, Day14.Puzzle2("51589"));
     Assert.AreEqual(5, Day14.Puzzle2("01245"));
     Assert.AreEqual(18, Day14.Puzzle2("92510"));
     Assert.AreEqual(2018, Day14.Puzzle2("59414"));
 }
예제 #21
0
        public void GetDay14Part1AnswerTest()
        {
            BigInteger expected = 873899;
            BigInteger actual   = Day14.GetDay14Part1Answer();

            Assert.Equal(expected, actual);
        }
예제 #22
0
        public void GetDay14Part01AnswerTest()
        {
            long expected = 6513443633260;
            long actual   = Day14.GetDay14Part01Answer();

            Assert.Equal(expected, actual);
        }
예제 #23
0
        public void Part2( )
        {
            day14 = new Day14("day14test2");
            var actual = day14.SolvePart2( );

            Assert.AreEqual(208.ToString( ), actual);
        }
예제 #24
0
        public void GetDay14Part02AnswerTest()
        {
            long expected = 3442819875191;
            long actual   = Day14.GetDay14Part02Answer();

            Assert.Equal(expected, actual);
        }
예제 #25
0
        public void PointsOfWinningReindeer(string reindeer, int time, int expectedDistance)
        {
            var day14          = new Day14();
            var actualDistance = day14.CalculateScoreForWinningReindeer(reindeer, time);

            Assert.Equal(expectedDistance, actualDistance);
        }
예제 #26
0
        public void Part1_Answer()
        {
            var day14 = new Day14();

            var(actual, _) = day14.Count("jzgqcdpd");
            Assert.Equal(8074, actual);
        }
예제 #27
0
 public void Task1Test()
 {
     Assert.AreEqual("5158916779", Day14.Task1(9));
     Assert.AreEqual("0124515891", Day14.Task1(5));
     Assert.AreEqual("9251071085", Day14.Task1(18));
     Assert.AreEqual("5941429882", Day14.Task1(2018));
 }
예제 #28
0
        public void Part2()
        {
            var day14 = new Day14();

            var(_, actual) = day14.Count("flqrgnkx");
            Assert.Equal(1242, actual);
        }
예제 #29
0
        public void Test5()
        {
            var input = @"171 ORE => 8 CNZTR
7 ZLQW, 3 BMBT, 9 XCVML, 26 XMNCP, 1 WPTQ, 2 MZWV, 1 RJRHP => 4 PLWSL
114 ORE => 4 BHXH
14 VRPVC => 6 BMBT
6 BHXH, 18 KTJDG, 12 WPTQ, 7 PLWSL, 31 FHTLT, 37 ZDVW => 1 FUEL
6 WPTQ, 2 BMBT, 8 ZLQW, 18 KTJDG, 1 XMNCP, 6 MZWV, 1 RJRHP => 6 FHTLT
15 XDBXC, 2 LTCX, 1 VRPVC => 6 ZLQW
13 WPTQ, 10 LTCX, 3 RJRHP, 14 XMNCP, 2 MZWV, 1 ZLQW => 1 ZDVW
5 BMBT => 4 WPTQ
189 ORE => 9 KTJDG
1 MZWV, 17 XDBXC, 3 XCVML => 2 XMNCP
12 VRPVC, 27 CNZTR => 2 XDBXC
15 KTJDG, 12 BHXH => 5 XCVML
3 BHXH, 2 VRPVC => 7 MZWV
121 ORE => 7 VRPVC
7 XCVML => 6 RJRHP
5 BHXH, 4 VRPVC => 5 LTCX";

            var reactions = Day14.ReadInput(input);
            var calc      = new OreCalculator(reactions);

            Assert.Equal(2210736, calc.GetOreFor1Fuel());
        }
예제 #30
0
        public void Part1_WithExampleInput_ReturnsExpectedAnswer()
        {
            var input = new[]
            {
                "NNCB",
                "CH -> B",
                "HH -> N",
                "CB -> H",
                "NH -> C",
                "HB -> C",
                "HC -> B",
                "HN -> C",
                "NN -> C",
                "BH -> H",
                "NC -> B",
                "NB -> B",
                "BN -> B",
                "BB -> N",
                "BC -> B",
                "CC -> N",
                "CN -> C",
            };
            var result = Day14.SolvePart1(input);

            Assert.Equal(1588, result);
        }