예제 #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)
예제 #2
0
파일: p011.py 프로젝트: nonette/euler
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)
예제 #3
0
파일: p024.py 프로젝트: nonette/euler
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:])
예제 #4
0
파일: p033.py 프로젝트: nonette/euler
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
예제 #5
0
파일: p033.py 프로젝트: nonette/euler
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
예제 #6
0
def p040():
    return numty.prod(d(10**k) for k in range(0,7))
예제 #7
0
파일: p034.py 프로젝트: nonette/euler
#
# 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
예제 #8
0
파일: p020.py 프로젝트: nonette/euler
def p020(N=100):
    return sum(int(d) for d in str(numty.prod(range(1,N+1))))
예제 #9
0
파일: p015.py 프로젝트: nonette/euler
def choose(n,k):
    return int(numty.prod(Fraction(n-i,k-i) for i in range(k)))
예제 #10
0
def magic(n):
    return sum(numty.prod(range(1,int(d)+1)) for d in str(n))
예제 #11
0
파일: p069.py 프로젝트: nonette/euler
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())
예제 #12
0
파일: p040.py 프로젝트: nonette/euler
def p040():
    return numty.prod(d(10 ** k) for k in range(0, 7))
예제 #13
0
파일: p127.py 프로젝트: nonette/euler
def radtable(n):
    return [numty.prod(r.keys()) for r in utils.factortable(n)]
예제 #14
0
파일: p024.py 프로젝트: nonette/euler
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:])
예제 #15
0
def rad(n):
    return numty.prod(utils.factor(n).keys())
예제 #16
0
파일: p008.py 프로젝트: nonette/euler
def p008(N=13):
    return max(
        numty.prod(int(d) for d in number[i:i + N])
        for i in range(len(number) - 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
예제 #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())
예제 #19
0
파일: p020.py 프로젝트: nonette/euler
def p020(N=100):
    return sum(int(d) for d in str(numty.prod(range(1, N + 1))))
예제 #20
0
파일: p012.py 프로젝트: nonette/euler
def numdivs(factorization):
    return numty.prod((e+1) for e in factorization.values())
예제 #21
0
def radtable(n):
    return [numty.prod(r.keys()) for r in utils.factortable(n)]
예제 #22
0
파일: p008.py 프로젝트: nonette/euler
def p008(N=13):
    return max(numty.prod(int(d) for d in number[i:i+N])
            for i in range(len(number)-N))
예제 #23
0
def numdivs(factorization):
    return numty.prod((e + 1) for e in factorization.values())
예제 #24
0
파일: p127.py 프로젝트: nonette/euler
def rad(n):
    return numty.prod(utils.factor(n).keys())