from typing import NamedTuple
class Result(NamedTuple):
"""Stores the result of the search."""
max_sum: int
numbers: list[int]
def find_max_sum_of_three(
numbers: list[int],
window_size: int
) -> Result:
"""
Find the consecutive numbers with the largest sum.
Args:
numbers: Input list of integers.
window_size: Number of consecutive elements to examine.
Returns:
Result containing:
- max_sum: largest sum found
- numbers: matching consecutive numbers
Raises:
ValueError: If window_size is invalid.
"""
if window_size <= 0:
raise ValueError("window_size must be greater than 0")
if len(numbers) < window_size:
raise ValueError(
"List must contain at least window_size elements"
)
# Calculate the first window sum.
current_sum = sum(numbers[:window_size])
max_sum = current_sum
best_index = 0
# Slide the window through the list.
for i in range(window_size, len(numbers)):
current_sum += numbers[i]
current_sum -= numbers[i - window_size]
if current_sum > max_sum:
max_sum = current_sum
best_index = i - window_size + 1
return Result(
max_sum = max_sum,
numbers = numbers[best_index:best_index + window_size]
)
# Example usage
numbers = [4, 2, 0, 8, 7, 5, 1, 3, 9, 6]
result = find_max_sum_of_three(numbers, 3)
print(f"Largest sum: {result.max_sum}")
print("Numbers:", *result.numbers)
'''
run:
Largest sum: 20
Numbers: 8 7 5
'''