text = """Текст слово Текст
Новая строка
Ещё новее строка"""
N = 12
start, rest = text[:N], text[N:] # отделяем ту часть текста, где мы ищем перевод строки, от остатка
first, _, second = text.rpartition('\n') # ищем последний перевод строки в этой части - до него "начало"
last = (second + rest) if second else rest # "конец" собираем из того что после перевода строки и остатка
print('-'*10)
print(first)
print('-'*10)
print(last)
print('-'*10)
if k == 10:
continue
def compose_sum(numbers: list[int], total: int) -> list[int] | None:
# ищем индексы потенциальных слагаемых
indices = [i for i in range(len(numbers)) if numbers[i] <= total]
# сортируем по убыванию слагаемых, потом по порядку в списке
indices.sort(key = lambda i: (numbers[i], i), reverse=True)
# если нулевой элемент совпадает - мы нашли точную сумму. Прерываем рекурсию.
if numbers[indices[0]] == total:
return [indices[0]]
for index in indices: # иначе перебираем слагаемые
numcopy = numbers.copy()
# копия списка без рассматриваемого слагаемого
current = numpcopy.pop(index)
next_indices = compose_sum(numcopy, total - current)
if next_indices: # нашли решение, корректируем индексы (так как мы удалили один элемент)
for i in range(len(next_indices)):
if next_indices[i] >= index:
next_indices[i] += 1
return [index] + next_indices # отдаём наше решение "наверх"
# next_indices пуст/None - решения не нашли, пробуем другой index
return None # не нашли решения ни для одного index