From 5cee1f79983caf4005e843a6ef4f6a4ea8a5d3de Mon Sep 17 00:00:00 2001 From: daviddoji Date: Mon, 6 Apr 2026 15:35:20 +0200 Subject: [PATCH] Refactor problem --- .../problems_001_050/Problem008.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/project_euler_python/problems_001_050/Problem008.py b/src/project_euler_python/problems_001_050/Problem008.py index 93e2f6d..55c62f6 100644 --- a/src/project_euler_python/problems_001_050/Problem008.py +++ b/src/project_euler_python/problems_001_050/Problem008.py @@ -9,8 +9,9 @@ Solution for problem 008 of Project Euler https://projecteuler.net/problem=8 """ -import collections +from collections import deque from itertools import islice +from math import prod from project_euler_python.utils import timeit @@ -19,7 +20,7 @@ from project_euler_python.utils import timeit def sliding_window(iterable, n): # sliding_window('ABCDEFG', 4) -> ABCD BCDE CDEF DEFG it = iter(iterable) - window = collections.deque(islice(it, n), maxlen=n) + window = deque(islice(it, n), maxlen=n) if len(window) == n: yield tuple(window) for x in it: @@ -65,12 +66,10 @@ def compute(): num = NUM.replace("\n", "").replace(" ", "") adjacent_digits = 13 ans = 0 - for nums in sliding_window(num, adjacent_digits): - prod = 1 - for num in nums: - prod *= int(num) - if prod > ans: - ans = prod + + for digits in sliding_window(num, adjacent_digits): + window_product = prod(int(digit) for digit in digits) + ans = max(ans, window_product) return ans