Tugas
Tulis program atau fungsi yang inputnya adalah daftar / larik X bilangan bulat, dan yang keluarannya adalah daftar himpunan bilangan bulat Y , sedemikian rupa sehingga untuk setiap elemen e dalam setiap set Y [ i ], X [ e ] = i , dan sehingga jumlah elemen dalam set di Y sama dengan jumlah elemen dalam X .
(Ini pada dasarnya operasi yang sama dengan membalik hashtable / kamus, kecuali diterapkan pada array sebagai gantinya.)
Contohnya
Contoh-contoh ini mengasumsikan pengindeksan berbasis 1, tetapi Anda dapat menggunakan pengindeksan berbasis 0 jika Anda mau.
X Y
[4] [{},{},{},{1}]
[1,2,3] [{1},{2},{3}]
[2,2,2] [{},{1,2,3}]
[5,5,6,6] [{},{},{},{},{1,2},{3,4}]
[6,6,5,5] [{},{},{},{},{3,4},{1,2}]
Klarifikasi
- Anda dapat mewakili satu set sebagai daftar, jika diinginkan. Jika Anda melakukannya, urutan elemen-elemennya tidak masalah, tetapi Anda mungkin tidak mengulangi elemen-elemen itu.
- Anda dapat menggunakan format I / O yang tidak ambigu; misalnya, Anda dapat memisahkan elemen dari himpunan dengan spasi, dan himpunan itu sendiri dengan baris baru.
- Y harus panjang, dan setidaknya cukup lama untuk memiliki semua elemen X sebagai indeks array. Namun, mungkin lebih lama dari elemen maksimal X (elemen tambahan akan menjadi set kosong).
- Elemen X semua akan menjadi indeks array yang valid, yaitu bilangan bulat non-negatif jika Anda menggunakan pengindeksan berbasis 0, atau bilangan bulat positif jika Anda menggunakan pengindeksan berbasis 1.
Kondisi kemenangan
Sebagai tantangan kode-golf , lebih pendek lebih baik.
[5,5,6,6]
dan [6,6,5,5]
dapat identik?
[5,5,6,6]
dan [6,6,5,5]
tidak dapat memiliki output yang identik, tetapi output untuk [5,5,6,6]
bisa juga bisa, mis [{},{},{},{},{2,1},{4,3}]
.
[{0},{0},{0},{0},{1,2},{3,4}]
output yang valid untuk [5,5,6,6]
?