protected override void Solve(out string answer) { //Start with largest numbers to smallest. var left = Enumerable.Range(100, 900).Reverse().AsParallel(); var right = Enumerable.Range(100, 900).Reverse(); var palindromeCandidates = new SortedSet <NumericPalindrome>(); PalindromeManipulator palindromeManipulator = new PalindromeManipulator(); left.ForAll(a => { //foreach (var a in left) //{ foreach (var b in right) { var candidate = new NumericPalindrome(a * b); if (palindromeManipulator.IsPalindrome(candidate._numberString)) { palindromeCandidates.Add(candidate); } } }); var result = palindromeCandidates.Last().Number; answer = string.Format("The largest palindrome made from the product of two 3-digit numbers is: {0}.", result); }
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 NumberRepresentation(int value) { Number = value; ConvertToStrings(); manipulator = new PalindromeManipulator(); }