Статья Автор: Лебедев Дмитрий

TUZ_3-04 Развертывание целочисленных интервалов

TUZ_3-04 Развертывание целочисленных интервалов

TUZ_3-04 Развертывание целочисленных интервалов
3.4. Развертывание целочисленных интервалов
Диапазон последовательных положительных целых чисел можно представить как строку,
включающую первое и последнее значения, разделенные дефисом (-).
Вот пример допустимого интервала: «1,17–21,43,44».
Ваша задача: написать функцию, которая развертывает подобные интервалы в списки отдельных чисел.
Функция должна принимать строку с числами и возвращать список чисел, разделенных запятыми.
Важное условие: числа во входной строке гарантированно располагаются в порядке возрастания.
В табл. 3.4 показаны ожидаемые результаты для некоторых входных данных.
Таблица 3.4. Некоторые ожидаемые результаты для задачи развертывания целочисленных интервалов
Intervals Ожидаемый результат
17 [17]
'1, 7 - 16, 120 - 124, 568' [1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 120, 121, 122, 123, 124, 568]
'2 - 10'  [2, 3, 4, 5, 6, 7, 8, 9, 10]
'2, 3 - 5, 19' [2, 3, 4, 5, 19]



 

Алгоритм
Сначала алгоритм должен разбить строку по символу запятой (,). Затем отделить отдельные числа от интервалов.
Отдельные числа сохраняются в списке, а интервалы развертываются с помощью цикла for,
который выполняет перебор от начала до конца интервала и включает в выходной список каждое следующее число.
Вот подробное описание шагов алгоритма.
1. Принимается строка intervals с интервалами.
2. Если строка intervals пустая, то возвращается пустой список.
3. Создается пустой список с именем result для хранения чисел, получающихся после развертывания интервалов.
4. Входная строка разбивается на отдельные интервалы по запятым (,), которые сохраняются в списке intervals_list.
5. Для каждого интервала в списке intervals_list проверяется, содержит ли он одно число (точнее, отсутствие дефиса «-»).
Если интервал – это одно число, то он преобразуется в целое число с помощью int () и добавляется в список result.
6. Если интервал содержит диапазон чисел (т. е. присутствует дефис «-»), то он разбивается на отдельные элементы по дефису, после чего элементы преобразуются в числа start и end с помощью int ().
7. Генерируются числа между start и end с помощью функции range () и добавляются в список result посредством метода extend ().
8. После обработки всех интервалов возвращается окончательный список result, содержащий все развернутые интервалы.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать