From 71cd98670d9a765be9c537267e37eee7d7577bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 15 Jul 2022 16:02:52 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BD=D0=B5=D1=82=D1=80=D0=B2=D0=B0=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.org | 2 ++ task_3.py | 41 +++++++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/readme.org b/readme.org index 0f97c2e..d8549ad 100644 --- a/readme.org +++ b/readme.org @@ -1,6 +1,8 @@ #+title: Тестовое задание #+date: [2022-07-12 вт 17:54] +https://docs.google.com/document/d/1Y_JYZmbKUmJEkGp9bdJz6SjtaFXuJNrRrxHN1dXnPzY/edit + * Задача №1 Дан массив чисел, состоящий из некоторого количества подряд идущих единиц, за которыми следует какое-то количество подряд идущих нулей: 111111111111111111111111100000000. diff --git a/task_3.py b/task_3.py index 802e1cc..295dd58 100644 --- a/task_3.py +++ b/task_3.py @@ -69,18 +69,43 @@ tests = [ ] +def get_smaller_interval(interval_A, interval_B) -> list: + """Если один из интервалов включает в себя другой, возвращаем + меньший. Если интервалы не входят друг в дргуа, возвращаем пустой + интервал.""" + if interval_A[0] <= interval_B[0] and interval_A[1] >= interval_B[1]: + return interval_B + + if interval_B[0] <= interval_A[0] and interval_B[1] >= interval_A[1]: + return interval_A + + return [] + + def absorb_small_included_intervals(intervals: list) -> list: - # задача -- поглотить маленькие интервалы, входящие в большие, - # чтобы не было полностю пересекающихся интервалов - pass + """Если в списке есть вложенные интервалы (интревал меньшего + размера, полностью входящий в больший), то убирает их и возвращает + список без них. + Стоит учитывать, что функция работает только если интервалы + совпадают по началу или концу, если интервалы входят друг в друга + частично -- мы их не обрабатываем. -def remove_small_intervals_in_bigger_intervals(interval_A, interval_B) -> list: - if interval_A[0] < interval_B[0] and interval_A[1] > interval_B[1]: - return interval_A + """ - if interval_B[0] < interval_A[0] and interval_B[1] > interval_A[1]: - return interval_B + small_intervals = [ + get_smaller_interval(interval, intervals[k]) + for i, interval in enumerate(intervals) + for k in range(i + 1, len(intervals)) + if get_smaller_interval(interval, intervals[k]) + ] + + print(f"{small_intervals=}") + result = [i for i in intervals if i not in small_intervals] + print(f"{result=}") + print(f"{intervals=}") + + return result def find_inner_sum_of_intersections(interval_A, interval_B) -> list: