Tujuan dari tantangan ini adalah untuk mengumpulkan item yang dipilih dalam daftar dan memindahkannya ke lokasi tertentu dalam daftar.
Sebagai contoh visual, ambil nilai input (diwakili oleh bilangan bulat kotak hitam) dan daftar nilai kebenaran yang sesuai di mana true menunjukkan item dipilih (diwakili oleh kotak biru, di mana T
benar dan F
salah):
Langkah logis pertama adalah untuk memisahkan item yang bertanda benar dan tidak benar ke dalam daftar yang sesuai. Perhatikan bahwa urutan relatif dalam setiap daftar harus dipertahankan (mis. Urutan item yang dipilih harus 1,4,5
, dan urutan item yang tidak dipilih harus 2,3,6,7
)!
Langkah logis kedua diberikan indeks dalam daftar item yang tidak dipilih yang tersisa, masukkan semua item yang dipilih sebelum item pada indeks yang diberikan. Dengan asumsi pengindeksan dimulai pada 0, misalkan Anda ingin memasukkan seleksi pada indeks 3. Ini sesuai dengan tempat sebelum 7
kotak, sehingga item yang dipilih harus dimasukkan sebelum 7
.
Solusi akhirnya adalah 2,3,6,1,4,5,7
.
Perhatikan bahwa diagram logis ini menggambarkan satu cara ini bisa dilakukan; program Anda tidak perlu mengambil langkah logis yang sama selama output selalu menghasilkan hasil yang dapat diamati.
Memasukkan
Program Anda diberi 3 input:
- Daftar bilangan bulat yang mewakili item. Ini mungkin daftar kosong. Daftar ini akan selalu terdiri dari bilangan bulat positif unik, tidak harus dalam urutan (misalnya 5 tidak akan ada dalam daftar dua kali).
- Daftar nilai kebenaran / kepalsuan dengan panjang yang sama dengan daftar item, di mana nilai kebenaran menyatakan bahwa item pada indeks yang sama telah dipilih.
- Integer yang mewakili tempat untuk memasukkan pilihan. Anda dapat memilih apa indeks item pertama dari daftar selama itu konstan dalam setiap program Anda (misalnya item pertama bisa menjadi indeks 0 atau indeks 1). Silakan tentukan konvensi mana yang dipatuhi oleh program Anda. Indeks ini harus berada dalam kisaran
[starting_idx, ending_idx+1]
, yaitu indeks akan selalu menjadi indeks yang valid. Untuk indeks kasusending_idx+1
, pemilihan harus dimasukkan di akhir daftar. Anda dapat menganggap bilangan bulat ini akan cocok dengan jenis bilangan bulat asli bahasa Anda.
Input dapat berasal dari sumber yang diinginkan (stdio, parameter fungsi, dll.)
Keluaran
Outputnya adalah daftar yang mewakili urutan akhir item. Ini bisa ke sumber mana saja yang diinginkan (stdio, nilai balik, parameter keluaran fungsi, dll.). Anda diizinkan untuk memodifikasi input apa pun di tempat (misalnya, diberi daftar yang dapat dimodifikasi sebagai parameter fungsi, dan membiarkan fungsi Anda beroperasi di tempat pada daftar itu).
Uji kasus
Semua kasus uji berikut mengasumsikan pengindeksan berbasis 0. Saya telah menggunakan 0 dan 1 untuk menunjukkan nilai falsy / truthy masing-masing untuk mask seleksi.
Kasing uji kebetulan memiliki daftar yang diformat [a,b,c]
, tetapi selama daftar input Anda menunjukkan urutan berurutan yang terbatas, itu bagus.
Memasukkan:
[]
[]
0
Keluaran:
[]
Memasukkan:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
Keluaran:
[2,3,6,1,4,5,7]
Memasukkan:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
Keluaran:
[1,4,5,2,3,6,7]
Memasukkan:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
Keluaran:
[2,3,6,7,1,4,5]
Memasukkan:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
Keluaran:
[1,2,3,4,5,6,7]
Memasukkan:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
Keluaran:
[1,2,3,4,5,6,7]
Memasukkan:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
Keluaran:
[3,2,6,1,5,4]
Mencetak gol
Ini adalah kode golf; jawaban terpendek dalam byte menang. Celah standar dilarang. Anda diizinkan menggunakan bawaan apa pun yang diinginkan.