return the length of the shortest contiguous subarray in a list of numbers whose sum is at least target reference https stackoverflow comquestions8269916 minimumsubarraysum7 2 3 1 2 4 3 2 minimumsubarraysum7 2 3 1 2 4 3 4 minimumsubarraysum11 1 1 1 1 1 1 1 1 0 minimumsubarraysum10 1 2 3 4 5 6 7 2 minimumsubarraysum5 1 1 1 1 1 5 1 minimumsubarraysum0 0 minimumsubarraysum0 1 2 3 1 minimumsubarraysum10 10 20 30 1 minimumsubarraysum7 1 1 1 1 1 1 10 1 minimumsubarraysum6 0 minimumsubarraysum2 1 2 3 1 minimumsubarraysum6 0 minimumsubarraysum6 3 4 5 1 minimumsubarraysum8 none 0 minimumsubarraysum2 abc traceback most recent call last valueerror numbers must be an iterable of integers return the length of the shortest contiguous subarray in a list of numbers whose sum is at least target reference https stackoverflow com questions 8269916 minimum_subarray_sum 7 2 3 1 2 4 3 2 minimum_subarray_sum 7 2 3 1 2 4 3 4 minimum_subarray_sum 11 1 1 1 1 1 1 1 1 0 minimum_subarray_sum 10 1 2 3 4 5 6 7 2 minimum_subarray_sum 5 1 1 1 1 1 5 1 minimum_subarray_sum 0 0 minimum_subarray_sum 0 1 2 3 1 minimum_subarray_sum 10 10 20 30 1 minimum_subarray_sum 7 1 1 1 1 1 1 10 1 minimum_subarray_sum 6 0 minimum_subarray_sum 2 1 2 3 1 minimum_subarray_sum 6 0 minimum_subarray_sum 6 3 4 5 1 minimum_subarray_sum 8 none 0 minimum_subarray_sum 2 abc traceback most recent call last valueerror numbers must be an iterable of integers
import sys


def minimum_subarray_sum(target: int, numbers: list[int]) -> int:
    
    if not numbers:
        return 0
    if target == 0 and target in numbers:
        return 0
    if not isinstance(numbers, (list, tuple)) or not all(
        isinstance(number, int) for number in numbers
    ):
        raise ValueError("numbers must be an iterable of integers")

    left = right = curr_sum = 0
    min_len = sys.maxsize

    while right < len(numbers):
        curr_sum += numbers[right]
        while curr_sum >= target and left <= right:
            min_len = min(min_len, right - left + 1)
            curr_sum -= numbers[left]
            left += 1
        right += 1

    return 0 if min_len == sys.maxsize else min_len