Exemplo n.º 1
0
def p011(N=4):
    besth = max(
        numty.prod(grid[i][j + k] for k in range(N)) for i in range(len(grid))
        for j in range(len(grid[0]) - N))
    bestv = max(
        numty.prod(grid[i + k][j] for k in range(N))
        for i in range(len(grid) - N) for j in range(len(grid[0])))
    bestd = max(
        numty.prod(grid[i + k][j + k] for k in range(N))
        for i in range(len(grid) - N) for j in range(len(grid[0]) - N))
    bestu = max(
        numty.prod(grid[i - k][j + k] for k in range(N))
        for i in range(N, len(grid)) for j in range(len(grid[0]) - N))
    return max(besth, bestv, bestd, bestu)
Exemplo n.º 2
0
def p011(N=4):
    besth = max(numty.prod(grid[i][j+k] for k in range(N))
            for i in range(len(grid))
            for j in range(len(grid[0])-N))
    bestv = max(numty.prod(grid[i+k][j] for k in range(N))
            for i in range(len(grid)-N)
            for j in range(len(grid[0])))
    bestd = max(numty.prod(grid[i+k][j+k] for k in range(N))
            for i in range(len(grid)-N)
            for j in range(len(grid[0])-N))
    bestu = max(numty.prod(grid[i-k][j+k] for k in range(N))
            for i in range(N,len(grid))
            for j in range(len(grid[0])-N))
    return max(besth, bestv, bestd, bestu)
Exemplo n.º 3
0
def nthperm(N, l):
    if len(l) == 1:
        return l
    lminus1fact = numty.prod(range(1, len(l)))
    firstelt = N / lminus1fact
    return [l[firstelt]] + nthperm(N % lminus1fact,
                                   l[:firstelt] + l[firstelt + 1:])
Exemplo n.º 4
0
def p033():
    acc = set([])
    for a in range(1, 10):
        for b in range(1, 10):
            for c in range(1, 10):
                ab = 10 * a + b
                ac = 10 * a + c
                ca = 10 * c + a
                bc = 10 * b + c
                cb = 10 * c + b
                acc.add(check(ab, ac, b, c))
                acc.add(check(ab, ca, b, c))
                acc.add(check(ab, bc, a, c))
                acc.add(check(ab, cb, a, c))
    product = numty.prod(acc)
    return product.denominator
Exemplo n.º 5
0
def p033():
    acc = set([])
    for a in range(1,10):
        for b in range(1, 10):
            for c in range(1, 10):
                ab = 10*a+b
                ac = 10*a+c
                ca = 10*c+a
                bc = 10*b+c
                cb = 10*c+b
                acc.add(check(ab, ac, b, c))
                acc.add(check(ab, ca, b, c))
                acc.add(check(ab, bc, a, c))
                acc.add(check(ab, cb, a, c))
    product = numty.prod(acc)
    return product.denominator
Exemplo n.º 6
0
def p040():
    return numty.prod(d(10**k) for k in range(0,7))
Exemplo n.º 7
0
#
# How to bound this?
# We don't need to check over 2! + 5*8! if only using digits 1..8.
# 9 is tricky because it's so big.
# The answer will need to be at least 6 digits long.
# If there is only one 9, we only need to check between 9! and 9!+5*8!
# If there are two 9s, 2*9! to 2*9!+4*8!
# A couple million things to check?

import logging

import lib.numty as numty

logger = logging.getLogger(__name__)

fact = [numty.prod(range(1,n+1)) for n in range(10)]

def p034():
    acc = 0
    ranges = [(10, fact[2] + 5 * fact[8])]
    for n in range(1,7):
        lower = n*fact[9]
        upper = lower + fact[8]*(len(str(lower))-n)
        ranges.append((lower, upper))
    for l, u in ranges:
        for n in range(l, u):
            if sum(fact[int(d)] for d in str(n)) == n:
                acc += n
                logger.debug(n)
            n += 1
    return acc
Exemplo n.º 8
0
def p020(N=100):
    return sum(int(d) for d in str(numty.prod(range(1,N+1))))
Exemplo n.º 9
0
def choose(n,k):
    return int(numty.prod(Fraction(n-i,k-i) for i in range(k)))
Exemplo n.º 10
0
def magic(n):
    return sum(numty.prod(range(1,int(d)+1)) for d in str(n))
Exemplo n.º 11
0
def phi(n, factoredn=None):
    if not factoredn:
        factoredn = numty.factor(n)
    return numty.prod(p**(e-1)*(p-1) for p,e in factoredn.items())
Exemplo n.º 12
0
def p040():
    return numty.prod(d(10 ** k) for k in range(0, 7))
Exemplo n.º 13
0
def radtable(n):
    return [numty.prod(r.keys()) for r in utils.factortable(n)]
Exemplo n.º 14
0
def nthperm(N, l):
    if len(l) == 1:
        return l
    lminus1fact = numty.prod(range(1,len(l)))
    firstelt = N/lminus1fact
    return [l[firstelt]] + nthperm(N % lminus1fact, l[:firstelt]+l[firstelt+1:])
Exemplo n.º 15
0
def rad(n):
    return numty.prod(utils.factor(n).keys())
Exemplo n.º 16
0
def p008(N=13):
    return max(
        numty.prod(int(d) for d in number[i:i + N])
        for i in range(len(number) - N))
Exemplo n.º 17
0
#
# How to bound this?
# We don't need to check over 2! + 5*8! if only using digits 1..8.
# 9 is tricky because it's so big.
# The answer will need to be at least 6 digits long.
# If there is only one 9, we only need to check between 9! and 9!+5*8!
# If there are two 9s, 2*9! to 2*9!+4*8!
# A couple million things to check?

import logging

import lib.numty as numty

logger = logging.getLogger(__name__)

fact = [numty.prod(range(1, n + 1)) for n in range(10)]


def p034():
    acc = 0
    ranges = [(10, fact[2] + 5 * fact[8])]
    for n in range(1, 7):
        lower = n * fact[9]
        upper = lower + fact[8] * (len(str(lower)) - n)
        ranges.append((lower, upper))
    for l, u in ranges:
        for n in range(l, u):
            if sum(fact[int(d)] for d in str(n)) == n:
                acc += n
                logger.debug(n)
            n += 1
Exemplo n.º 18
0
def phi(n, factoredn=None):
    if not factoredn:
        factoredn = numty.factor(n)
    return numty.prod(p**(e - 1) * (p - 1) for p, e in factoredn.items())
Exemplo n.º 19
0
def p020(N=100):
    return sum(int(d) for d in str(numty.prod(range(1, N + 1))))
Exemplo n.º 20
0
def numdivs(factorization):
    return numty.prod((e+1) for e in factorization.values())
Exemplo n.º 21
0
def radtable(n):
    return [numty.prod(r.keys()) for r in utils.factortable(n)]
Exemplo n.º 22
0
def p008(N=13):
    return max(numty.prod(int(d) for d in number[i:i+N])
            for i in range(len(number)-N))
Exemplo n.º 23
0
def numdivs(factorization):
    return numty.prod((e + 1) for e in factorization.values())
Exemplo n.º 24
0
def rad(n):
    return numty.prod(utils.factor(n).keys())