def test(number, end=2): number_digits = set(num2digits(number)) for x in range(2, end + 1): multiplied = number * x multiplied_digits = set(num2digits(multiplied)) if not number_digits == multiplied_digits: return False return True
def is_palindrome(number): digits = num2digits(number) size = len(digits) for i in range(size // 2): if digits[i] != digits[size - i - 1]: return False return True
def pandigital(num, digitsNumber=9): digits = [] multiplier = 1 while len(digits) < digitsNumber: multiplied = num * multiplier digits.extend(num2digits(multiplied)) multiplier += 1 return digits
def permute(seed): seedDigits = num2digits(seed) legalDigits = list(set(range(1, 10)).difference(seedDigits)) legalDigits.sort(reverse=True) for i in legalDigits: yield seed * 10 + i
''' A googol (10100) is a massive number: one followed by one-hundred zeros; 100100 is almost unimaginably large: one followed by two-hundred zeros. Despite their size, the sum of the digits in each number is only 1. Considering natural numbers of the form, ab, where a, b < 100, what is the maximum digital sum? ''' from src.utils.digits import num2digits max_sum = -1 for i in reversed(range(100)): if i % 10 == 0: continue for j in reversed(range(100)): digits_sum = sum(map(int, num2digits(i**j))) if digits_sum > max_sum: max_sum = digits_sum print(max_sum)
def reverse_add(number): digits = num2digits(number) digits.reverse() reversed_number = digits2num(digits) return number + reversed_number
def digit_gen(): current = 1 while True: for digit in num2digits(current): yield digit current += 1