Рассмотрим одномерную последовательность чисел в фиксированном диапазоне, т.е.
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
Постоянно увеличивающийся график * ** - это линия, которая соединяет все точки в этой последовательности слева направо и всегда идет вверх или остается на одном уровне. Если необходимо, линия оборачивается сверху вниз и продолжает идти оттуда, чтобы встретить следующую точку.
Цель этой задачи состоит в том, чтобы разбить последовательность на разные подпоследовательности, которые все не уменьшаются, чтобы при построении графика вместе с ограниченной вертикальной осью они образовали постоянно увеличивающийся график. Это делается путем добавления точки в конец одной подпоследовательности и в начало следующей подпоследовательности, чтобы угол линии, пересекающей верхнюю границу, совпадал с линией, пересекающей нижнюю границу, и двумя точками пересечения имеют одинаковую горизонтальную координату. Приведенный выше пример даст следующий результат:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
И соответствующий график будет выглядеть следующим образом: И с осью, расширенной для лучшего обзора: Требуемый вывод - это список подпоследовательностей, которые образуют части постоянно увеличивающегося графика. Создание сюжета не обязательно, но вы заработаете бонусные баллы;). Выходные данные должны каким-то образом четко отделять подпоследовательности.
Заметки
- Диапазон всегда будет иметь ноль в качестве левой (включительно) границы, а правой границей будет некоторое целое число N.
- Последовательность никогда не будет содержать значений, которые не находятся в пределах диапазона.
- Первая подпоследовательность не имеет дополнительной точки в начале.
- Последняя подпоследовательность не имеет дополнительной точки в конце.
- Не требуется указывать начальные индексы, которые потребуются для построения подпоследовательностей.
Контрольные примеры
Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]
счет
Это код-гольф, выигрывает самый короткий код в байтах.
* Не фактический жаргон ** На самом деле должен называться Ever Non-Decreasing Graph, как указал @ngm, но это звучит менее впечатляюще.