Ejemplo n.º 1
0
def muls(n):
    d = set([0])
    dig = []
    for mul in count(1):
        t = to_digits(mul * n)
        if len(t) != len(set(t)):
            return False

        if set(t) & d:
            return False
        else:
            d |= set(t)
            dig += t

        if len(d) == 10:
            return dig
        elif len(d) > 10:
            raise Exception
Ejemplo n.º 2
0
#!/usr/bin/env python

from itertools import count
from common import to_digits

powers = [n**5 for n in range(0, 10)]

t = 0
for a in count(10):
    if a > 1000000:
        break

    s = sum([powers[d] for d in to_digits(a)])
    if a == s:
        t += a

print(t)
Ejemplo n.º 3
0
#!/usr/bin/env python

from common import to_digits

MAX = 9


def is_n_pandigital(digits, end=MAX):
    ds = sorted(range(1, end + 1))
    di = sorted(digits)

    return ds == di


found = set()
for m1 in range(1, 10000):
    for m2 in range(1, 10000):
        mult = m1 * m2

        if mult > 98765:
            # Naive way of making it faster
            break

        digits = to_digits(m1) + to_digits(m2) + to_digits(mult)
        if is_n_pandigital(digits):
            found.add(mult)

print(sum(found))
Ejemplo n.º 4
0
#!/usr/bin/env python

from common import factorial, to_digits
from itertools import count

fs = list(factorial(n) for n in range(0, 10))

S = 0
for i in count(10):
    if i > 100000:
        break
    s = sum(fs[d] for d in to_digits(i))
    if s == i:
        S += i

print(S)
Ejemplo n.º 5
0
#!/usr/bin/env python

from common import is_prime, to_digits

for n1 in range(1000, 10000 - (3330 * 2)):
    n2 = n1 + 3330
    n3 = n2 + 3330
    d1 = to_digits(n1)
    d2 = to_digits(n2)
    d3 = to_digits(n3)

    if not (sorted(d1) == sorted(d2)):
        continue

    if not (sorted(d1) == sorted(d3)):
        continue

    if not is_prime(n1):
        continue

    if not is_prime(n2):
        continue

    if not is_prime(n3):
        continue

    s = sum([a * 10**k for k, a in enumerate(reversed(d1 + d2 + d3))])
    print(s)
Ejemplo n.º 6
0
from common import to_digits
from fractions import Fraction


def remove_digit(d, l):
    if l[0] == d:
        return l[1]
    else:
        return l[0]

nprod = 1
dprod = 1
for d in range(11, 100):
    for n in range(10, d):
        dd = to_digits(d)
        dn = to_digits(n)

        common = set(dd) & set(dn)
        if len(common) != 1:
            # We don't want empty sets or bigger than one (to avoid /0)
            continue

        digit = common.pop()

        if not digit:
            # Remove trivial examples
            continue

        n2 = remove_digit(digit, dn)
        d2 = remove_digit(digit, dd)
Ejemplo n.º 7
0
def dig(n):
    return sorted(to_digits(n))