고정 된 범위 내에서 숫자의 1 차원 시퀀스를 고려하십시오.
[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]
해당 그래프는 다음과 같이 표시됩니다. 더 나은보기를 위해 축을 확장 한 경우 : 필요한 출력은 계속 증가하는 그래프의 일부를 형성하는 하위 시퀀스 목록입니다. 줄거리를 만들 필요는 없지만 보너스 포인트가 적립됩니다.). 결과는 어떤 식 으로든 하위 시퀀스를 명확하게 분리해야합니다.
노트
- 범위는 항상 왼쪽 (포함) 경계로 0이되고 오른쪽 경계는 정수 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]
채점
이것은 바이트 단위의 가장 짧은 코드가이기는 코드 골프입니다.
* 실제 전문 용어 아님 ** @ ngm이 지적한 것처럼 실제로는 항상 비 감소 그래프라고해야하지만 그다지 인상적이지 않습니다.