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)); }
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()); }
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}"; }