Поиск в сломанном массиве. Яндекс Контест

Подскажите пожалуйста есть такое замечание по коду, строка

def binary_search(arr: list, x: int, left: int, right: int) -> int:

""функции внутри функций не стоит делать если в этом нет необходимости. Лучше вынести их на уровень модуля"" Как это правильно сделать?

Сам код:

def broken_search(nums: list, x: int) -> int:
 
    left: int = 0
    right: int = len(nums)
 
    def binary_search(arr: list, x: int, left: int, right: int) -> int:
        if left >= right:
            return -1
        mid = (left + right) // 2
        if arr[mid] == x:
            return mid
        elif x < arr[mid]:
            return binary_search(arr, x, left, mid)
        else:
            return binary_search(arr, x, mid + 1, right)
 
    def divide_search(arr: list, x: int, left: int, right: int) -> list:
        if right - left == 1:
            return [left, right]
        mid = (left + right) // 2
        if arr[left] <= arr[mid]:
            return [left, mid + 1] if arr[left] <= x <= arr[mid] else divide_search(nums, x, mid, right)
        else:
            return [mid, right] if arr[mid] <= x <= arr[-1] else divide_search(arr, x, left, mid)
 
    left_divide, right_divide = divide_search(nums, x, left, right)
    return binary_search(nums, x, left_divide, right_divide)
 
 
def test():
    arr = [19, 21, 100, 101, 1, 4, 5, 7, 12]
    assert broken_search(arr, 5) == 6

Ответы (1 шт):

Автор решения: MBo
def binary_search(arr: list, x: int, left: int, right: int) -> int:
    if left >= right:
        return -1
    mid = (left + right) // 2
    if arr[mid] == x:
        return mid
    elif x < arr[mid]:
        return binary_search(arr, x, left, mid)
    else:
        return binary_search(arr, x, mid + 1, right)

def divide_search(arr: list, x: int, left: int, right: int) -> list:
    if right - left == 1:
        return [left, right]
    mid = (left + right) // 2
    if arr[left] <= arr[mid]:
        return [left, mid + 1] if arr[left] <= x <= arr[mid] else divide_search(nums, x, mid, right)
    else:
        return [mid, right] if arr[mid] <= x <= arr[-1] else divide_search(arr, x, left, mid)

def broken_search(nums: list, x: int) -> int:

    left: int = 0
    right: int = len(nums)


    left_divide, right_divide = divide_search(nums, x, left, right)
    return binary_search(nums, x, left_divide, right_divide)


def test():
    arr = [19, 21, 100, 101, 1, 4, 5, 7, 12]
    assert broken_search(arr, 5) == 6
→ Ссылка