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

TUZ_3-05 Свертывание целочисленных интервалов

TUZ_3-05 Свертывание целочисленных интервалов

TUZ_3-05 Свертывание целочисленных интервалов
3.5. Свертывание целочисленных интервалов
Эта задача является обратной к предыдущей задаче.
Напишите функцию, которая принимает список чисел и возвращает строку интервалов
в форме «первый–последний», разделенных запятыми.
В табл. 3.5 показаны ожидаемые результаты для некоторых входных данных.
Таблица 3.5. Некоторые ожидаемые результаты для задачи свертывания целочисленных интервалов
Items Ожидаемый результат
[1, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 120, 121, 122, 123, 124, 568] '1, 7–16, 120–124, 568'
[2, 3, 4, 5, 6, 7, 8, 9, 10] '2–10'
[2, 3, 4, 5, 19] '2, 3–5, 19'
[17] 17

Алгоритм
Алгоритм решения этой задачи основан на правилах. Фактически он перебирает список целых чисел
и определяет диапазоны последовательных целых чисел.
1. Принимается список положительных целых чисел.
2. Инициализируются переменные start и end значением None.
3. Для каждого целочисленного элемента item во входном списке items выполняются следующие действия:
а) если start имеет значение None, то обеим переменным, start и end, присваивается значение item;
б) если item равен end + 1, то переменной end присваивается значение item;
в) иначе текущий получившийся диапазон добавляется в список ranges, причем если значение start равно значению end,
то добавляется str (start), иначе добавляется str (start) + '.' + str (end);
г) затем начинается свертывание нового диапазона, для чего обеим переменным, start и end, присваивается значение item.
4. Если переменная start имеет значение, отличное от None, то заключительный диапазон добавляется в ranges
с использованием той же логики, что и на предыдущем шаге.
5. Диапазоны объединяются через запятую, и полученная строка возвращается.


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