固定範囲内の数値の1次元シーケンスを考えます。つまり、
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
Ever-Increasing Graph * **は、このシーケンス内のすべてのポイントを左から右につないだ線であり、常に上向きになるか、水平になります。必要に応じて、線は上から下に折り返され、そこから上に向かって次のポイントに到達します。
この課題の目標は、シーケンスをすべて非減少の異なるサブシーケンスに分割することです。これにより、限られた垂直軸と一緒にプロットすると、増加するグラフが形成されます。これは、1つのサブシーケンスの終了点と次のサブシーケンスの開始点にポイントを追加することで行われます。これにより、上部の境界線を横切る線の角度が下部の境界線を横切る線と一致し、2つの交差点同じ水平座標を持ちます。上記の例では、次の出力が得られます。
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
そして、対応するグラフは次のようになります。さらに、 見やすくするために軸を拡張します。 必要な出力は、Ever-Increeasing Graphの部分を形成するサブシーケンスのリストです。プロットの作成は必須ではありませんが、ボーナスポイントを獲得できます;)。出力では、何らかの方法でサブシーケンスを明確に分離する必要があります。
ノート
- 範囲の左(両端を含む)境界は常にゼロになり、右の境界は整数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]
得点
これはcode-golfで、バイト単位の最短コードが勝ちです。
*実際の専門用語ではない