コード例 #1
0
        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++ }
                });
            }
        }
コード例 #2
0
        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);
        }