このチャレンジの目標は、リスト内の選択されたアイテムを収集し、それらをリスト内の特定の場所に移動することです。
視覚的な例として、入力値を取る(ブラックボックス化整数で表される)と(青色のボックスで表される、項目が選択され、真の意味がtruthy値の対応するリストT
truthyとF
falsyあります)。
最初の論理ステップは、真実ではなくマークされたアイテムを対応するリストに分けることです。各リストの相対的な順序を維持する必要があることに注意してください(つまり、選択したアイテムの順序はでなければならず1,4,5
、選択していないアイテムの順序はでなければなりません2,3,6,7
)。
2番目の論理ステップには、選択されていないアイテムの残りのリストにインデックスが与えられ、指定されたインデックスのアイテムの前にすべての選択されたアイテムを挿入します。インデックス作成が0から始まると仮定して、インデックス3に選択範囲を挿入するとします。これは、7
ボックスの前のスポットに対応するため、選択したアイテムはの前に挿入する必要があり7
ます。
最終的なソリューションは2,3,6,1,4,5,7
です。
この論理図は、これを行う方法の1つを示していることに注意してください。出力が常に同じ観測可能な結果を生成する限り、プログラムは同じ論理手順を実行する必要はありません。
入力
プログラムには3つの入力が与えられます。
- アイテムを表す整数のリスト。これは空のリストである可能性があります。このリストは常に一意の正の整数で構成され、必ずしもソート順ではありません(つまり、5はリストに2回含まれません)。
- アイテムのリストと同じ長さの真実/偽の値のリスト。真実の値は、同じインデックスのアイテムが選択されたことを表します。
- 選択を挿入する場所を表す整数。リストの最初の項目のインデックスは、プログラムの実行ごとに一定である限り選択できます(たとえば、最初の項目はインデックス0またはインデックス1です)。プログラムが準拠している規則を指定してください。このインデックスは範囲内にある必要があります
[starting_idx, ending_idx+1]
。つまり、常に有効なインデックスになります。ケースインデックスがの場合ending_idx+1
、選択はリストの最後に挿入する必要があります。この整数は、言語のネイティブ整数型に適合すると仮定できます。
入力は、任意のソース(stdio、関数パラメーターなど)から取得できます。
出力
出力は、アイテムの最終シーケンスを表すリストです。これは、任意のソース(stdio、戻り値、関数出力パラメーターなど)に対して行うことができます。任意の入力をインプレースで変更できます(たとえば、変更可能なリストを関数パラメーターとして指定し、そのリストで関数をインプレースで動作させる)。
テストケース
以下のテストケースはすべて、0ベースのインデックス付けを前提としています。0と1を使用して、それぞれセレクションマスクの偽/真の値を示しました。
テストケースのリストはたまたまフォーマットされています[a,b,c]
が、入力リストが有限の順序のシーケンスを表している限りは問題ありません。
入力:
[]
[]
0
出力:
[]
入力:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
出力:
[2,3,6,1,4,5,7]
入力:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
出力:
[1,4,5,2,3,6,7]
入力:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
出力:
[2,3,6,7,1,4,5]
入力:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
出力:
[1,2,3,4,5,6,7]
入力:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
出力:
[1,2,3,4,5,6,7]
入力:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
出力:
[3,2,6,1,5,4]
得点
これはコードゴルフです。バイト単位の最短回答が優先されます。標準的な抜け穴は禁止されています。必要なビルトインを使用できます。