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); }
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); }