Esempio n. 1
0
def cancelling_fractions():
    res = []
    for n in range(10, 99):
        for d in range(n + 1, 100):
            if d % 10 == 0 or not _has_common_digit(n, d):
                continue

            n_digits = number_as_digits(n)
            d_digits = number_as_digits(d)
            common_digits = set(n_digits) & set(d_digits)
            for common_digit in common_digits:
                n_digits_except_common = list_except(n_digits, n_digits.index(common_digit))
                d_digits_except_common = list_except(d_digits, d_digits.index(common_digit))
                reduced_val = float(next(iter(n_digits_except_common))) / float(next(iter(d_digits_except_common)))
                val = float(n) / float(d)
                if fabs(reduced_val - val) < 0.00000001:
                    res += [(n, d)]
    return res
Esempio n. 2
0
 def test_digit_powers(self):
     for num in digit_powers():
         digits = number_as_digits(num)
         root = int(round(pow(num, 1.0 / len(digits))))
         self.assertEqual(num, root ** len(digits))
Esempio n. 3
0
def digit_factorial():
    res = []
    for i in range(3, 100000):
        if i == sum(map(factorial, number_as_digits(i))):
            res += [i]
    return res
Esempio n. 4
0
def _has_common_digit(number_a, number_b):
    number_a_digits = set(number_as_digits(number_a))
    number_b_digits = set(number_as_digits(number_b))
    return len(number_a_digits & number_b_digits) > 0
Esempio n. 5
0
def powers(a, b):
    res = 1
    for i in range(1, a + 1):
        for j in range(1, b + 1):
            res = max(res, sum(number_as_digits(i ** j)))
    return res