Ejemplo n.º 1
0
        public static long SolvePart1Naive(IEnumerable <long> sequence, int preamble, ref List <long> list)
        {
            var window = new RingBuffer2D <long>(preamble, 1);
            int seqNo  = 0;

            foreach (long input in sequence)
            {
                if (list != null)
                {
                    list.Add(input);
                }
                if (seqNo >= preamble)
                {
                    if (!HasPairSummingTo(window.Array, input))
                    {
                        return(input);
                    }
                }

                window.Write(0, 0, input);
                window.XOffset++;
                seqNo++;
            }
            return(-1);
        }
Ejemplo n.º 2
0
        public static long SolvePart1Ringbuffer(List <long> sequence, int preamble)
        {
            var window = new RingBuffer2D <long>(preamble, 1);
            var sums   = new RingBuffer2D <long>(preamble, preamble);
            int seqNo  = 0;

            foreach (long input in sequence)
            {
                int num = Math.Min(seqNo, preamble);

                if (seqNo >= preamble)
                {
                    //Test against existing
                    if (!sums.Array.Contains(input))
                    {
                        return(input);
                    }
                }

                window.XOffset++;
                sums.XOffset++;
                sums.YOffset++;

                //push right column:
                if (seqNo >= preamble)
                {
                    sums.SetRow(-1, 0);
                }
                for (int i = 0; i < num; i++)
                {
                    long sum = input + window.Read(-i - 2, 0);
                    sums.Write(-1, -i - 1, sum);
                }
                window.Write(-1, 0, input);
                seqNo++;
            }
            return(-1);
        }