using System.Collections.Generic;
public static class StringExtentions {
public static string[] LinesToArray(this string text)
return text.Replace(System.Environment.NewLine, "|").Split('|');
public static string[] BlankLinesToArray(this string text)
return text.Replace(System.Environment.NewLine+System.Environment.NewLine, "|").Split('|');
public List<long> Inputs {get; }
public int Preamble {get; }
public XmasChecker(int preamble, string input)
Inputs = input.LinesToArray().Where(x => !string.IsNullOrEmpty(x)).Select(x => long.Parse(x)).ToList();
var current = Preamble+1;
while (current < Inputs.Count())
var theNumber = Inputs[current];
if (!Validate(theNumber, Inputs.Skip(current-Preamble).Take(Preamble).ToList()))
public List<long> FindContiguousSet(long outcome)
var usableNumbers = Inputs.Where(x => x <outcome).ToList();
while(stride < usableNumbers.Count())
for(var i=0; i<usableNumbers.Count()-stride; i++)
var strideNumbers = usableNumbers.Skip(i).Take(stride).ToList();
if (strideNumbers.Sum() == outcome)
return strideNumbers.ToList();
public long SumMinMax(List<long> collection)
return collection.Min() + collection.Max();
return SumMinMax(FindContiguousSet(FindNumber()));
private bool Validate(long amount, List<long> inputRange)
for(var i=0; i<inputRange.Count(); i++)
for(var j=0; j<inputRange.Count(); j++)
(inputRange[i] + inputRange[j]) == amount)
public static void Main()
var checkerForTest = new XmasChecker(5, test);
Console.WriteLine("Test " + checkerForTest.FindAnswer());
var checkerForInput = new XmasChecker(25, input);
Console.WriteLine("Input " + checkerForInput.FindAnswer());
public static string test = @"35
public static string input = @"29