Refactor problem

This commit is contained in:
2026-04-06 15:35:20 +02:00
parent b485914e01
commit 5cee1f7998

View File

@@ -9,8 +9,9 @@ Solution for problem 008 of Project Euler
https://projecteuler.net/problem=8 https://projecteuler.net/problem=8
""" """
import collections from collections import deque
from itertools import islice from itertools import islice
from math import prod
from project_euler_python.utils import timeit from project_euler_python.utils import timeit
@@ -19,7 +20,7 @@ from project_euler_python.utils import timeit
def sliding_window(iterable, n): def sliding_window(iterable, n):
# sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG # sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG
it = iter(iterable) it = iter(iterable)
window = collections.deque(islice(it, n), maxlen=n) window = deque(islice(it, n), maxlen=n)
if len(window) == n: if len(window) == n:
yield tuple(window) yield tuple(window)
for x in it: for x in it:
@@ -65,12 +66,10 @@ def compute():
num = NUM.replace("\n", "").replace(" ", "") num = NUM.replace("\n", "").replace(" ", "")
adjacent_digits = 13 adjacent_digits = 13
ans = 0 ans = 0
for nums in sliding_window(num, adjacent_digits):
prod = 1 for digits in sliding_window(num, adjacent_digits):
for num in nums: window_product = prod(int(digit) for digit in digits)
prod *= int(num) ans = max(ans, window_product)
if prod > ans:
ans = prod
return ans return ans