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.
Jawaban:
MATL, 9 byte
Solusi ini menerima array nilai
T
(benar) danF
(salah) sebagai input kedua. Juga untuk kasus uji pertama, dengan array kosong, tidak menghasilkan output.Cobalah secara Online! dan versi yang sedikit dimodifikasi untuk semua kasus uji.
Penjelasan
sumber
Mathematica,
6662 byteDisimpan 4 byte dari @MartinEnder .
Fungsi anonim. Mengambil indeks berbasis 1, daftar, dan spidol sebagai input dan mengembalikan daftar disusun ulang sebagai output.
sumber
Haskell, 70 byte
Contoh penggunaan:
([1,2,3,4,5,6,7]#[True,False,False,True,True,False,False]) 3
->[2,3,6,1,4,5,7]
.Bagaimana itu bekerja:
sumber
JavaScript (ES6), 76 byte
sumber
Jelly , 10 byte
Cobalah online!
Bagaimana itu bekerja
sumber
C #, 132 byte
ungolfed:
ide perbaikan dihargai.
sumber
Python 3, 91 byte
di mana
a
daftar elemen / angka,x
adalahTrue/False
daftar dani
indeks.Versi multiline untuk meningkatkan keterbacaan:
Bagaimana cara kerjanya?
Panggilan untuk
zip(a,x)
hasil dalam daftar tupel di mana masing-masing berisi info:(element,0|1)
. Kemudian pemahaman daftar digunakan untuk menentukan elemen yang memiliki0/False
nilai terkait dan menyimpannya dalam variabelb
.Jadi
[c for c,z in zip(a,x)if z<1]
buat daftar yang berisi semua elemen yang memiliki0
(False
) nilai yang terkait.Setelah itu, daftar unsur-unsur yang memiliki
True|1
nilai yang terkait (yang ditentukan oleh pemeriksaan yang unsura
tidak hadir dalamb
:[c for c in a if(c in b)<1]
) dimasukkan dalam daftar dengan semua elemen yang memiliki0
(False
) nilai yang terkait (daftarb
) pada indeks tertentui
dan daftar yang dihasilkan dikembalikan.sumber
Python 3,
10693 byteVersi yang lebih lama:
sumber