/// <summary>
        /// Calculate all sequences
        /// Could receive a parameter with which sequences should be calculated
        /// </summary>
        public CalculatedSequence CalculateSequences(int number)
        {
            try
            {
                if (number < 1 || number > 10000000)
                {
                    throw new Exception("Please inform a number bettween 1 and 10000000");
                }

                CalculatedSequence result = new CalculatedSequence();
                var allnumbers            = GetAllNumbersUpTo(number);

                result.AllSequence       = allnumbers;
                result.EvenSequence      = GetEvenNumbers(allnumbers);
                result.OddSequence       = GetOddNumbers(allnumbers);
                result.ReplacedSequence  = ReplaceNumberByLetterWhenMultiple(number);
                result.FibonacciSequence = GetFibonacciNumbers(number);

                Array.Resize(ref result.FibonacciSequence, result.FibonacciSequence.Length + 1);
                result.FibonacciSequence[result.FibonacciSequence.Length - 1] = number;

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #2
0
        /// <summary>
        /// Validate the sequence returned
        /// </summary>
        /// <param name="item">number</param>
        /// <param name="sequence">objec sequence</param>
        protected void ValidateSequence(int item, CalculatedSequence sequence)
        {
            var    total         = sequence.AllSequence.Length;
            Random rdn           = new Random();
            int    maxLoop       = item > 100 ? 50 : 10;
            int    maxDictionary = 4000000;

            total.Should().Be(item);
            sequence.EvenSequence.Where(x => x % 2 != 0).Count().Should().BeLessOrEqualTo(1);
            sequence.OddSequence.Where(x => x % 2 == 0).Count().Should().BeLessOrEqualTo(1);

            if (item % 2 == 0)
            {
                sequence.EvenSequence.Length.Should().Be(total / 2);
            }
            else
            {
                sequence.OddSequence.Length.Should().Be((total + 1) / 2);
            }

            for (var i = 1; i < maxLoop; i++)
            {
                int key = rdn.Next(1, maxDictionary);
                if (sequence.ReplacedSequence.ContainsKey(key))
                {
                    if ((key % 3 == 0) && (key % 5 == 0))
                    {
                        sequence.ReplacedSequence[key].Should().Be("Z");
                    }
                    else if (key % 3 == 0)
                    {
                        sequence.ReplacedSequence[key].Should().Be("C");
                    }
                    else
                    {
                        sequence.ReplacedSequence[key].Should().Be("E");
                    }
                }
            }

            if (sequence.FibonacciSequence.Length - 3 > 0)
            {
                for (var i = 1; i < maxLoop; i++)
                {
                    int value = rdn.Next(0, sequence.FibonacciSequence.Length - 3);
                    (sequence.FibonacciSequence[value + 2] - sequence.FibonacciSequence[value + 1]).Should().Be(sequence.FibonacciSequence[value]);
                }
            }
        }