40 lines
883 B
Python
40 lines
883 B
Python
from functools import lru_cache
|
|
|
|
|
|
@lru_cache
|
|
def combs(xs, first=False):
|
|
if xs == (0, 0, 0, 0):
|
|
return 1
|
|
|
|
c = 0
|
|
z, o, a, r = xs
|
|
|
|
if (not first) and z > 0:
|
|
c += combs((z - 1, o, a, r))
|
|
if o > 0:
|
|
c += combs((z, o - 1, a, r))
|
|
if a > 0:
|
|
c += combs((z, o, a - 1, r))
|
|
if r > 0:
|
|
c += 13 * combs((z, o, a, r - 1))
|
|
return c
|
|
|
|
|
|
def euler_162():
|
|
t = 0
|
|
for n in range(17):
|
|
for z in range(1, n + 1):
|
|
for o in range(1, n + 1):
|
|
for a in range(1, n + 1):
|
|
r = n - z - o - a
|
|
if not r >= 0:
|
|
continue
|
|
t += combs((z, o, a, r), True)
|
|
return hex(t)[2:].upper()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
solution = euler_162()
|
|
print("e162.py: " + str(solution))
|
|
assert(solution == "3D58725572C62302")
|