public double GetDivisiblePanDigitalNumberSum(string digits = "9876543210") { var results = StringPermutations.Permute(digits).Select(Convert.ToDouble) .Where(d => TestValue(d.ToString())).ToList(); return(results.Sum()); }
//would probably work but not enough memory not to mention rather inefficient //public int GetLargestPandigitalPrimeBelowNumber(int number = 987654322) //{ // var primes = PrimeNumberHelper.GetPrimeNumbersBelowNumber(number); // Func<int, bool> isPandigital = i => // { // var digits = new Dictionary<string, int>(); // Enumerable.Range(1, 9) // .Select(e => new KeyValuePair<string, int>(e.ToString(), 0)) // .ToList().ForEach(e => digits.Add(e.Key, e.Value)); // i.ToString().ToCharArray().ToList().ForEach(c => digits[c.ToString()] = digits[c.ToString()] + 1); // return digits.All(d => d.Value < 2); // }; // return primes.Where(isPandigital).Max(); //} public int GetLargestPandigitalPrimeForDigits(string digits = "987654321") { var primes = new List <int>(); while (primes.Count == 0) { var results = StringPermutations.Permute(digits).Select(r => Convert.ToInt32(r)).ToList(); primes = results.Where(r => PrimeNumberHelper.IsPrime(r)).ToList(); digits = digits.Substring(1); } return(primes.Max()); }