Beispiel #1
0
        protected override void Solve(out string answer)
        {
            PalindromeManipulator       manipulator = new PalindromeManipulator();
            List <NumberRepresentation> list        = new List <NumberRepresentation>();
            int counter = 0;
            int sum     = 0;

            //Create Parallel stuff
            var parallels = Parallelization.GetParallelRanges(1, 999_999, 32);

            //var ranges = Enumerable.Range(1, 999_999).AsParallel();
            //foreach (var i in range)
            //ranges.ForAll(i =>
            parallels.ForAll(intrange =>
            {
                foreach (int i in intrange)
                {
                    if (i < 1_000_000)
                    {
                        NumberRepresentation number = new NumberRepresentation(i);
                        if (number.IsPalindrome)
                        {
                            lock (this)
                            {
                                list.Add(number);
                                counter++;
                                sum += number.Value;
                            }
                        }
                    }
                }
            }
                             );

            answer = $"Computing... Sum = {sum}. Count = {counter}.";
        }
        public void Test_GetSumOfDigitsUntilNine(int input, int expected)
        {
            int result = new NumberRepresentation(input, new LessThanNineCondition()).GetSumOfDigits();

            Assert.That(result, Is.EqualTo(expected));
        }
        public void Test_GetSumOfDigits(int input, int expected)
        {
            int result = new NumberRepresentation(input).GetSumOfDigits();

            Assert.That(result, Is.EqualTo(expected));
        }
Beispiel #4
0
        private string RepeatNumberRepresent(int repeatTimes, NumberRepresentation numberType)
        {
            System.Text.StringBuilder returnStr = new System.Text.StringBuilder();

            int temp = repeatTimes;
            string repeatStr = String.Empty;

            switch (numberType)
            {
                case NumberRepresentation.Dots: repeatStr = ". ";
                    break;
                case NumberRepresentation.Dashes: repeatStr = "| ";
                    break;
                case NumberRepresentation.Squares: repeatStr = "[] ";
                    break;
            }
            if (temp > 0)
            {
                while ((temp - 10) > 0)
                {
                    returnStr.AppendLine(String.Concat(Enumerable.Repeat(repeatStr, 10)));
                    temp -= 10;
                }

                returnStr.Append(String.Concat(Enumerable.Repeat(repeatStr, temp)));
                returnStr.AppendFormat("={0}\n", repeatTimes * (int)numberType);
            }

            return (returnStr.ToString());
        }
Beispiel #5
0
        protected override void Solve(out string answer)
        {
            Pandigits pandigitizer = new Pandigits('0', 10);
            List <NumberRepresentation> pandigitNumbersWithProperty = new List <NumberRepresentation>();

            #region Fast - permutation based approach
            Permutations <char> permutations = new Permutations <char>();
            var list = permutations.GeneratePermutations(new List <char> {
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
            });
            list.AsParallel().ForAll(item =>
            {
                var numRep = new NumberRepresentation(MoreMath.IntFromDigits(item));
                if (pandigitizer.IsPandigital(numRep))
                {
                    if (numRep.IsSubstringDivisible())
                    {
                        lock (pandigitNumbersWithProperty)
                        {
                            pandigitNumbersWithProperty.Add(numRep);
                        }
                    }
                }
            }
                                     );
            #endregion

            #region Slow - brute force approach
            //long start = 0_000_000_000;
            //long count = 9_999_999_999;
            //long progressDone = 0;
            //Parallelization.GetParallelRanges(start, count, 200).ForAll(sequence =>
            //{
            //    var repSequence = sequence.Select(v => new NumberRepresentation(v));
            //    foreach (var rep in repSequence)
            //    {
            //        if (pandigitizer.IsPandigital(rep))
            //        {
            //            if (rep.IsSubstringDivisible())
            //            {
            //                lock (pandigitNumbersWithProperty)
            //                {
            //                    pandigitNumbersWithProperty.Add(rep);
            //                }
            //            }
            //        }
            //        #region Update progress
            //        lock (this)
            //        {
            //            progressDone++;
            //            if (progressDone % 1_000_000 == 0)
            //            {
            //                var percent = progressDone * 100.0 / count;
            //                UpdateProgress($"Range {start}-{start + count}: Done {percent}%. Hits: {pandigitNumbersWithProperty.Count}...");
            //            }
            //        }
            //        #endregion
            //    }
            //});
            #endregion
            var sum = pandigitNumbersWithProperty.Select(rep => rep.Value).Aggregate((total, num) => total + num);
            answer = $"Count = {pandigitNumbersWithProperty.Count}, Sum = {sum}";
        }