Вызов
Уплотните длинный список чисел, заменив последовательные прогоны диапазонами.
Пример
Ввод
1, 2, 3, 4, 7, 8, 10, 12, 13, 14, 15
Вход гарантированно будет в порядке возрастания и не будет содержать дубликатов.
Выход
1 - 4, 7, 8, 10, 12 - 15
Обратите внимание, что диапазоны двух чисел должны быть оставлены как есть. (7, 8
; not 7 - 8
)
Правила
Вы можете принять отсортированный список целых чисел (или эквивалентный тип данных) в качестве параметра метода, из командной строки или из стандартного. (выберите вариант, который имеет более короткий код)
Вы можете вывести список строк, распечатав их или вернув либо одну строку, либо набор строк.
Справочная реализация
(С#)
IEnumerable<string> Sample(IList<int> input) {
for (int i = 0; i < input.Count; ) {
var start = input[i];
int size = 1;
while (++i < input.Count && input[i] == start + size)
size++;
if (size == 1)
yield return start.ToString();
else if (size == 2) {
yield return start.ToString();
yield return (start + 1).ToString();
} else if (size > 2)
yield return start + " - " + (start + size - 1);
}
}