Solve problem 104 in Python
This commit is contained in:
37
python/e104.py
Normal file
37
python/e104.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import math
|
||||
from itertools import permutations
|
||||
|
||||
|
||||
def first_n_digits(num, n):
|
||||
# https://stackoverflow.com/questions/41271299/how-can-i-get-the-first-two-digits-of-a-number
|
||||
p = int(math.log(num, 10)) - n + 1
|
||||
if p < 0:
|
||||
return num
|
||||
return num // 10 ** (int(math.log(num, 10)) - n + 1)
|
||||
|
||||
|
||||
def is_end_pandigital(n, ps):
|
||||
return (n % 10**9) in ps
|
||||
|
||||
|
||||
def is_start_pandigital(n, ps):
|
||||
start = first_n_digits(n, 9)
|
||||
return start in ps
|
||||
|
||||
|
||||
def euler_104():
|
||||
a, b = 1, 1
|
||||
ps = set([int("".join(map(str, p))) for p in permutations(range(1, 10))])
|
||||
k = 3
|
||||
while True:
|
||||
a, b = b, a + b
|
||||
if is_end_pandigital(b, ps) and is_start_pandigital(b, ps):
|
||||
return k
|
||||
k += 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
solution = euler_104()
|
||||
print("e104.py: " + str(solution))
|
||||
assert(solution == 329468)
|
||||
|
||||
Reference in New Issue
Block a user