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