public void Seed(IEnumerable <int> input) { int j = 0; foreach (var i in input) { NumbersSpoken = NumbersSpoken.Concat(new int[] { i }).ToArray(); Numbers.Add(new Number { Value = i, PreviouslySpoken = new int[] { j++ } }); } }
public int GetNextNumber() { var lastNumberSpoken = NumbersSpoken[NumbersSpoken.Length - 1]; var numberInfo = Numbers.First(x => x.Value == lastNumberSpoken); int newNumber; if (numberInfo.IsNew) { newNumber = 0; } else { newNumber = numberInfo.PreviouslySpoken[1] - numberInfo.PreviouslySpoken[0]; } if (!Numbers.Any(x => x.Value == newNumber)) { var number = new Number { Value = newNumber }; number.PreviouslySpoken = new int[] { NumbersSpoken.Length }; Numbers.Add(number); } else { //Numbers.First(x => x.Value == newNumber).IsNew = false; var number = Numbers.First(x => x.Value == newNumber); if (number.PreviouslySpoken.Length == 2) { number.PreviouslySpoken[0] = number.PreviouslySpoken[1]; number.PreviouslySpoken[1] = NumbersSpoken.Length; } if (number.PreviouslySpoken.Length == 1) { number.PreviouslySpoken = number.PreviouslySpoken.Concat(new int[] { NumbersSpoken.Length }).ToArray(); } } NumbersSpoken = NumbersSpoken.Concat(new int[] { newNumber }).ToArray(); return(newNumber); }