예제 #1
0
        public string SolveSecondStar(StreamReader reader)
        {
            var adapters = StreamParsers.GetStreamAsLongIntList(reader);

            // Add port, which has effective joltage 0
            adapters.Add(0);
            adapters.Sort();

            // Build up an array of possibilities, where possibilities[i] represents
            // the number of possible ways to configure a valid adapter chain
            // ending in i
            long[] possibilities = new long[adapters.Max() + 1];

            // Initialize possibilities[0] to 1, because there is only one way
            // to configure the port
            possibilities[0] = 1;
            possibilities[1] = adapters.Contains(1) ? 1 : 0;
            possibilities[2] = possibilities[1] + (adapters.Contains(2) ? 1 : 0);

            for (int i = 3; i < adapters.Count(); i++)
            {
                var adapter = adapters[i];
                possibilities[adapter] += possibilities[adapter - 3];
                possibilities[adapter] += possibilities[adapter - 2];
                possibilities[adapter] += possibilities[adapter - 1];
            }

            return(possibilities.Last().ToString());
        }
예제 #2
0
        public string SolveFirstStar(StreamReader reader)
        {
            var adapters = StreamParsers.GetStreamAsLongIntList(reader);

            adapters.Sort();

            long currentJoltage = 0;
            int  smallJumps     = 0;
            int  bigJumps       = 0;

            foreach (var adapter in adapters)
            {
                if (adapter - currentJoltage == 1)
                {
                    smallJumps++;
                }
                else
                {
                    bigJumps++;
                }
                currentJoltage = adapter;
            }
            bigJumps++;
            return((smallJumps * bigJumps).ToString());
        }
예제 #3
0
        public string SolveFirstStar(StreamReader reader)
        {
            var lines         = StreamParsers.GetStreamAsLongIntList(reader);
            var cardPublicKey = lines[0];
            var doorPublicKey = lines[1];

            var doorLoops = ReverseTransform(DefaultSubject, doorPublicKey);

            return(TransformLoop(cardPublicKey, doorLoops).ToString());
        }
예제 #4
0
파일: Day09.cs 프로젝트: madman2/Advent2020
        public string SolveSecondStar(StreamReader reader)
        {
            var numbers = StreamParsers.GetStreamAsLongIntList(reader);
            var subList = findSubListEqualToN(numbers, FirstStarResult);

            if (subList == null)
            {
                throw new Exception($"Unable to find sub-list equal to {FirstStarResult}");
            }

            return((subList.Min() + subList.Max()).ToString());
        }
예제 #5
0
파일: Day09.cs 프로젝트: madman2/Advent2020
        public string SolveFirstStar(StreamReader reader)
        {
            var numbers       = StreamParsers.GetStreamAsLongIntList(reader);
            var recentNumbers = new LinkedList <long>();

            for (int i = 0; i < WindowSize; i++)
            {
                recentNumbers.AddLast(numbers[i]);
            }

            for (int i = WindowSize; i < numbers.Count(); i++)
            {
                if (!isNumberValid(recentNumbers, numbers[i]))
                {
                    FirstStarResult = numbers[i];
                    return(numbers[i].ToString());
                }

                recentNumbers.RemoveFirst();
                recentNumbers.AddLast(numbers[i]);
            }

            throw new Exception("Could not find invalid number");
        }