Beispiel #1
0
        public void Part2Example()
        {
            const string?input = @"35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576";

            var sut = XmasCracker.Parse(input, 5);

            // ACT
            var result = sut.GetEncryptionWeakness();

            // ASSERT
            result.Should().Be(62);
        }
Beispiel #2
0
        public void Part1Example()
        {
            const string?input = @"35
20
15
25
47
40
62
55
65
95
102
117
150
182
127
219
299
277
309
576";

            var sut = XmasCracker.Parse(input, 5);

            // ACT
            var result = sut.GetFirstInvalidNumber();

            // ASSERT
            result.Should().Be(127);
        }
Beispiel #3
0
            public void Puzzle_9B()
            {
                var cracker = new XmasCracker();

                cracker.Init(PuzzleInputs.Puzzle9.Take(25));

                var candidates = PuzzleInputs.Puzzle9.Skip(25);

                var contiguousSet = new long[0];

                foreach (var candidate in candidates)
                {
                    var valid = cracker.ValidateNumber(candidate);
                    if (!valid)
                    {
                        contiguousSet = cracker.FindContiguousNumbersOfSum(candidate);
                        break;
                    }
                }

                Assert.Equal(17, contiguousSet.Length);
                var result = contiguousSet.Min() + contiguousSet.Max();

                Assert.Equal(1766397, result);
            }
Beispiel #4
0
            public void Example_2()
            {
                var cracker = new XmasCracker();

                cracker.Init(new long[] { 35, 20, 15, 25, 47 });

                var candidates = new long[] { 40, 62, 55, 65, 95, 102, 117, 150, 182, 127, 219, 299, 277, 309, 576 };

                var contiguousSet = new long[0];

                foreach (var candidate in candidates)
                {
                    var valid = cracker.ValidateNumber(candidate);
                    if (!valid)
                    {
                        contiguousSet = cracker.FindContiguousNumbersOfSum(candidate);
                        break;
                    }
                }

                Assert.Equal(4, contiguousSet.Length);
                Assert.Equal(15, contiguousSet[0]);
                Assert.Equal(25, contiguousSet[1]);
                Assert.Equal(47, contiguousSet[2]);
                Assert.Equal(40, contiguousSet[3]);

                var result = contiguousSet.Min() + contiguousSet.Max();

                Assert.Equal(62, result);
            }
Beispiel #5
0
            public void Should_return_false_for_a_number_note_having_any_pair_of_numbers_in_preamble_summing_to_input(
                long[] preamble,
                long candidate)
            {
                var cracker = new XmasCracker();

                cracker.Init(preamble);

                var ok = cracker.ValidateNumber(candidate);

                Assert.False(ok);
            }
Beispiel #6
0
            public void Should_return_true_for_a_number_having_at_least_one_pair_in_preamble_summing_to_input(
                long[] preamble,
                long candidate)
            {
                var cracker = new XmasCracker();

                cracker.Init(preamble);

                var ok = cracker.ValidateNumber(candidate);

                Assert.True(ok);
            }
Beispiel #7
0
            //[InlineData(new long[]{1,2,3}, 3)]
            //[InlineData(new long[]{1,2,3}, 4)]
            //[InlineData(new long[]{1,2,3}, 5)]
            public void Should_remove_first_digit_of_preamble_and_add_valid_candidate_to_preamble(
                long[] preamble,
                long[] candidates)
            {
                var cracker = new XmasCracker();

                cracker.Init(preamble);

                var  ok = false;
                long c  = 0;

                foreach (var candidate in candidates)
                {
                    c  = candidate;
                    ok = cracker.ValidateNumber(candidate);
                }

                Assert.True(ok, $"{c} did not validate");
            }
Beispiel #8
0
            public void Puzzle_9A()
            {
                var cracker = new XmasCracker();

                cracker.Init(PuzzleInputs.Puzzle9.Take(25));

                var candidates = PuzzleInputs.Puzzle9.Skip(25);

                long firstFail = 0;

                foreach (var candidate in candidates)
                {
                    var valid = cracker.ValidateNumber(candidate);
                    if (!valid)
                    {
                        firstFail = candidate;
                        break;
                    }
                }

                Assert.Equal(14144619, firstFail);
            }
Beispiel #9
0
            public void Example()
            {
                var cracker = new XmasCracker();

                cracker.Init(new long[] { 35, 20, 15, 25, 47 });

                var candidates = new long[] { 40, 62, 55, 65, 95, 102, 117, 150, 182, 127, 219, 299, 277, 309, 576 };

                long firstFail = 0;

                foreach (var candidate in candidates)
                {
                    var valid = cracker.ValidateNumber(candidate);
                    if (!valid)
                    {
                        firstFail = candidate;
                        break;
                    }
                }

                Assert.Equal(127, firstFail);
            }
Beispiel #10
0
 protected override long?SolvePart2Impl(string input) => XmasCracker.Parse(input, 25).GetEncryptionWeakness();
Beispiel #11
0
 protected override long?SolvePart1Impl(string input) => XmasCracker.Parse(input, 25).GetFirstInvalidNumber();