Exemplo n.º 1
0
        public IActionResult PalindromeAnalysis(string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                HttpContext.Response.StatusCode = 500;
                string error = "No input provided. Please provide inputed text.";
                return(new JsonResult(new ErrorResponse()
                {
                    StatusCode = 500, ErrorMsg = error
                }));
            }

            if (Regex.IsMatch(input, @"^[a-zA-Z]+$") == false)
            {
                HttpContext.Response.StatusCode = 500;
                string error = "Input provided includes non-alphabetical characters. Please include alphabetical characters only.";
                return(new JsonResult(new ErrorResponse()
                {
                    StatusCode = 500, ErrorMsg = error
                }));
            }

            var result = PalindromeHelper.AnalyzeText(input);

            var response = new PalindromeAnalysisResponse();

            response.Output = new PalindromeAnalysis()
            {
                IsPalindrome         = result.IsPalindrome,
                SortedCharacterCount = result.SortedCharacterCount,
                TimeStamp            = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
            };

            return(new JsonResult(response));
        }
Exemplo n.º 2
0
        public void GetLongestPalindromesFromStringReturnsEmptyListWhenNumberToReportIs0()
        {
            int               numberToReport     = 0;
            string            inputString        = "abcdefg";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual(0, longestPalindromes.Count);
        }
Exemplo n.º 3
0
        public void GetLongestPalindromesFromStringReturnsOnlyAsManyAsAskedForIfMoreWithMaximumLengthThanRequested()
        {
            int               numberToReport     = 3;
            string            inputString        = "abacdcefeghgiji";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual(numberToReport, longestPalindromes.Count());
        }
Exemplo n.º 4
0
        public void GetLongestPalindromesFromStringReturnsNullsWhenNoPalindromesAreFound()
        {
            int               numberToReport     = 3;
            string            inputString        = "abcdefg";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual(null, longestPalindromes[0]);
            Assert.AreEqual(null, longestPalindromes[1]);
            Assert.AreEqual(null, longestPalindromes[2]);
        }
        public IActionResult AllCalculations(string paragraph, char letter)
        {
            //not going to use a model since this is just aggregate data
            ViewData["numPalindrome"]   = PalindromeHelper.CountPalindromes(paragraph);
            ViewData["numPalSentence"]  = PalindromeHelper.CountPalindromeSentences(paragraph);
            ViewData["uniqueWords"]     = PalindromeHelper.UniqueWords(paragraph);
            ViewData["wordsWithLetter"] = PalindromeHelper.ContainsLetter(paragraph, letter);

            return(View());
        }
Exemplo n.º 6
0
        public void AnalyzeText_SortedCharacterCount_AreEqualTrue(string text)
        {
            var result = PalindromeHelper.AnalyzeText(text);

            var array = result.SortedCharacterCount.ToArray();

            Assert.AreEqual('a', array[0].Character);
            Assert.AreEqual(2, array[0].Count);
            Assert.AreEqual('d', array[1].Character);
            Assert.AreEqual(1, array[1].Count);
            Assert.AreEqual('m', array[2].Character);
            Assert.AreEqual(2, array[2].Count);
        }
Exemplo n.º 7
0
        public void GetLongestPalindromesFromStringFillsOutToNumberToProvideWithNulls()
        {
            int               numberToReport     = 3;
            string            inputString        = "abccba";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual(numberToReport, longestPalindromes.Count);
            Assert.AreEqual("abccba", longestPalindromes[0].Text);
            Assert.AreEqual(0, longestPalindromes[0].Index);
            Assert.AreEqual(6, longestPalindromes[0].Length);
            Assert.AreEqual(null, longestPalindromes[1]);
            Assert.AreEqual(null, longestPalindromes[2]);
        }
Exemplo n.º 8
0
        public void GetLongestEvenPalindromeFromInflectionPointReturnsNullWhenThereIsNoEvenPalindromeAtThatPoint()
        {
            string inputString     = "abbacdaba";
            int    inflectionPoint = 4;
            Dictionary <int, int> filteredToOriginal = new Dictionary <int, int>();

            for (int i = 0; i < inputString.Length; i++)
            {
                filteredToOriginal[i] = i;
            }
            Palindrome testPalindrome = PalindromeHelper.GetLongestEvenPalindromeFromInflectionPoint(inputString, inflectionPoint, filteredToOriginal);

            Assert.AreEqual(null, testPalindrome);
        }
Exemplo n.º 9
0
        public void GetLongestPalindromesFromStringChoosesBothOddAndEvenPalindromes()
        {
            int               numberToReport     = 3;
            string            inputString        = "abccbab";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual("abccba", longestPalindromes[0].Text);
            Assert.AreEqual(0, longestPalindromes[0].Index);
            Assert.AreEqual(6, longestPalindromes[0].Length);
            Assert.AreEqual("bab", longestPalindromes[1].Text);
            Assert.AreEqual(4, longestPalindromes[1].Index);
            Assert.AreEqual(3, longestPalindromes[1].Length);
            Assert.AreEqual(null, longestPalindromes[2]);
        }
Exemplo n.º 10
0
        public void GetLongestEvenPalindromeFromInflectionPointReturnsLongestPalindromeCenteredAtInflectionPoint()
        {
            string inputString     = "xabccbay";
            int    inflectionPoint = 4;
            Dictionary <int, int> filteredToOriginal = new Dictionary <int, int>();

            for (int i = 0; i < inputString.Length; i++)
            {
                filteredToOriginal[i] = i;
            }
            Palindrome testPalindrome = PalindromeHelper.GetLongestEvenPalindromeFromInflectionPoint(inputString, inflectionPoint, filteredToOriginal);

            Assert.AreEqual("abccba", testPalindrome.Text);
            Assert.AreEqual(6, testPalindrome.Length);
            Assert.AreEqual(1, testPalindrome.Index);
        }
Exemplo n.º 11
0
        public void GetLongestEvenPalindromeFromInflectionPointReturnsLongestPalindrome3FromAcceptanceCriteria()
        {
            string inputString     = "sqrrqabccbatudefggfedvwhijkllkjihxymnnmzpop";
            int    inflectionPoint = 8;
            Dictionary <int, int> filteredToOriginal = new Dictionary <int, int>();

            for (int i = 0; i < inputString.Length; i++)
            {
                filteredToOriginal[i] = i;
            }
            Palindrome testPalindrome = PalindromeHelper.GetLongestEvenPalindromeFromInflectionPoint(inputString, inflectionPoint, filteredToOriginal);

            Assert.AreEqual("abccba", testPalindrome.Text);
            Assert.AreEqual(6, testPalindrome.Length);
            Assert.AreEqual(5, testPalindrome.Index);
        }
Exemplo n.º 12
0
        public void GetLongestPalindromesFromStringRespectsIgnorableCharactersAtStartOfText()
        {
            int               numberToReport     = 3;
            string            inputString        = " abccb ab";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport, new HashSet <char> {
                ' '
            });

            Assert.AreEqual("abccba", longestPalindromes[0].Text);
            Assert.AreEqual(1, longestPalindromes[0].Index);
            Assert.AreEqual(6, longestPalindromes[0].Length);
            Assert.AreEqual("bab", longestPalindromes[1].Text);
            Assert.AreEqual(5, longestPalindromes[1].Index);
            Assert.AreEqual(3, longestPalindromes[1].Length);
            Assert.AreEqual(null, longestPalindromes[2]);
        }
Exemplo n.º 13
0
        public void GetLongestPalindromesFromStringReturnsAcceptancePalindromesWhenAcceptanceStringProvidedAndNumberOfPalindromesIs3()
        {
            int               numberToReport     = 3;
            string            inputString        = "sqrrqabccbatudefggfedvwhijkllkjihxymnnmzpop";
            List <Palindrome> longestPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, numberToReport);

            Assert.AreEqual("hijkllkjih", longestPalindromes[0].Text);
            Assert.AreEqual(23, longestPalindromes[0].Index);
            Assert.AreEqual(10, longestPalindromes[0].Length);
            Assert.AreEqual("defggfed", longestPalindromes[1].Text);
            Assert.AreEqual(13, longestPalindromes[1].Index);
            Assert.AreEqual(8, longestPalindromes[1].Length);
            Assert.AreEqual("abccba", longestPalindromes[2].Text);
            Assert.AreEqual(5, longestPalindromes[2].Index);
            Assert.AreEqual(6, longestPalindromes[2].Length);
        }
Exemplo n.º 14
0
        private static int GetLargestPalindromeOfProductOfTwoNumbersBelowUpperBound(int upperBound)
        {
            var largestPalindromeProductFound = 0;

            for (int i = 1; i < upperBound; i++)
            {
                for (int j = i; j < upperBound; j++)
                {
                    var product = i * j;
                    if (PalindromeHelper.IsPalindrome(product) && product > largestPalindromeProductFound)
                    {
                        largestPalindromeProductFound = product;
                    }
                }
            }
            return(largestPalindromeProductFound);
        }
Exemplo n.º 15
0
        /// <summary>
        /// A lychrel number is a number that, when reversed and added to itself repeatedly,
        /// never produces a palindrome.
        /// </summary>
        public bool IsLychrel(int n)
        {
            if (_dic.ContainsKey(n))
            {
                if (_dic[n] == -1)
                {
                    return(true);               // -1 means it doesn't become a palindrome
                }
                if (_dic[n] > 0)
                {
                    return(false);
                }
                // if the value > 0, then the count has been determined for that number
            }

            int        count = 0;
            BigInteger num   = n;

            for (int i = 0; i < 50; i++) // up to 50 iterations
            {
                var rev = DigitHelper.Reverse(num);
                num += rev;
                var split = DigitHelper.SplitDigits(num);
                if (!PalindromeHelper.IsPalindrome(split))
                {
                    // try again
                    count++;
                }
                else
                {
                    _dic[n] = count;
                    return(false);
                    // do something with dictionary
                }
            }

            _dic[n] = -1;
            return(true);
        }
Exemplo n.º 16
0
        public void AnalyzeText_IsPalindrome_ReturnFalse(string text)
        {
            var result = PalindromeHelper.AnalyzeText(text);

            Assert.IsFalse(result.IsPalindrome, $"{text} should not be a palindrome");
        }
Exemplo n.º 17
0
 public void IsPalindromeInBase2_ReturnsCorrectResult(int number, bool expectedResult)
 {
     PalindromeHelper.IsPalindromeInBase2(number).Should().Be(expectedResult);
 }
Exemplo n.º 18
0
 public void GetLongestPalindromesFromStringErrorsWhenInputLengthIsLessThanTwo()
 {
     string            inputString     = "a";
     List <Palindrome> testPalindromes = PalindromeHelper.GetLongestPalindromesFromString(inputString, 1);
 }