Pengantar:
Saya mengumpulkan teka-teki berliku. Sebagian besar teka-teki berliku diproduksi dan dijual oleh perusahaan Cina. Sebagian besar perusahaan terkenal meminta izin dari perancang puzzle untuk menghasilkan desain mereka dan bekerja bersama menuju suatu produk di pasar. Dalam hal ini, perancang puzzle tentu saja sangat senang dan bangga bahwa salah satu teka-teki mereka menghantam pasar.
Namun ada juga perusahaan China yang membuat puzzle knock-off. Tiruan-tiruan ini adalah desain yang digunakan tanpa izin dari pencipta asli, atau merupakan salinan dengan kualitas lebih rendah dan lebih murah dari teka-teki yang sudah ada.
Tantangan:
Kita akan menentukan orisinalitas angka yang 'dirilis' dalam urutan tertentu (dari kiri ke kanan † ).
Diberikan daftar bilangan bulat, kelompokkan dan hasilkan menurut orisinalitasnya.
Bagaimana keaslian angka ditentukan?
- Apakah angka merupakan duplikat tepat dari angka sebelumnya? Grup (paling tidak orisinal), di mana grup tertinggal, setelah semua grup lainnya.
- Apakah angka merupakan duplikat dari angka sebelumnya, tetapi sebaliknya negatif (yaitu angka asli adalah , tetapi sekarang ; atau sebaliknya)? Kelompok .
- Bisakah nilai absolut dari angka tersebut dibentuk dengan menggabungkan satu atau lebih angka absolut sebelumnya, dan bukankah itu bagian dari kelompok yang disebutkan sebelumnya atau ? Grup , di mana adalah jumlah angka berbeda yang digunakan dalam rangkaian (dan ).
- Apakah jumlahnya tidak cocok dengan salah satu grup di atas, sehingga sejauh ini benar-benar unik? Grup (paling orisinal), yang memimpin sebelum semua grup lain.
Ini mungkin terdengar agak kabur, jadi di sini contoh langkah demi langkah :
Input-daftar: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
34
adalah angka pertama, yang selalu asli dan di grup . Output sejauh ini:[[34]]
9
juga asli:[[34,9]]
4
juga asli:[[34,9,4]]
-34
adalah negatif dari angka sebelumnya34
, jadi itu dalam grup :[[34,9,4],[-34]]
19
asli:[[34,9,4,19],[-34]]
-199
dapat dibentuk oleh dua angka sebelumnya19
dan9
, jadi itu dalam grup :[[34,9,4,19],[-199],[-34]]
34
adalah salinan persis dari nomor sebelumnya, jadi itu dalam grup :[[34,9,4,19],[-199],[-34],[34]]
-213
asli:[[34,9,4,19,-213],[-199],[-34],[34]]
94
dapat dibentuk oleh dua angka sebelumnya9
dan4
, jadi itu dalam grup :[[34,9,4,19,-213],[-199,94],[-34],[34]]
1934499
dapat dibentuk oleh empat angka sebelumnya19
,34
,4
, dan dua kali9
, sehingga dalam kelompok :[[34,9,4,19,-213],[19499],[-199,94],[-34],[34]]
213
adalah negatif dari angka sebelumnya-213
, jadi itu dalam grup :[[34,9,4,19,-213],[1934499],[-199,94],[-34,213],[34]]
3
asli:[[34,9,4,19,-213,3],[1934499],[-199,94],[-34,213],[34]]
21
asli:[[34,9,4,19,-213,3,21],[1934499],[-199,94],[-34,213],[34]]
-2134
dapat dibentuk oleh dua angka sebelumnya213
dan4
(atau tiga nomor sebelumnya21
,3
dan4
, tetapi kita selalu menggunakan paling sedikit concatenating nomor untuk menentukan orisinalitas), sehingga dalam kelompok :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134],[-34,213],[34]]
44449
dapat dibentuk oleh dua angka sebelumnya empat kali4
dan9
, jadi itu dalam grup :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[-34,213],[34]]
44
dapat dibentuk oleh satu angka sebelumnya4
, diulang dua kali, jadi dalam grup :[[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Jadi untuk input [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
outputnya [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
.
Aturan tantangan:
- I / O fleksibel. Anda dapat memasukkan sebagai daftar / larik / aliran bilangan bulat atau string, masukan satu per satu melalui STDIN, dll. Keluaran dapat berupa peta dengan grup sebagai kunci, daftar bersarang sebagai contoh dan uji kasus dalam tantangan ini, dicetak baris baru dipisahkan, dll.
- Anda diizinkan untuk mengambil daftar input dalam urutan terbalik (mungkin berguna untuk bahasa berbasis stack). † Dalam hal ini dari kiri ke kanan tentu saja dari kanan ke kiri.
- Seperti yang anda lihat di contoh untuk integer
-2134
, kami selalu kelompok angka yang merupakan gabungan dari nomor lain dengan sesedikit mungkin (yang dibentuk oleh213
dan4
- dua nomor, dan bukan dengan21
,3
, dan4
- tiga angka). - Seperti yang Anda lihat pada contoh untuk bilangan bulat
1934499
, Anda dapat menggunakan angka sebelumnya (9
dalam kasus ini) beberapa kali (mirip dengan44449
menggunakan empat4
dan9
dalam contoh). Namun mereka hanya dihitung satu kali untuk menentukan grup. - Anda tidak diizinkan memiliki daftar dalam kosong di output untuk grup kosong. Jadi, test case
[1,58,85,-8,5,8585,5885,518]
mungkin tidak menghasilkan[[1,58,85,8,5],[518],[5885],[8585],[],[]]
sebaliknya, di mana grup kosong adalah dan , dan contoh di atas mungkin tidak menghasilkan sebaliknya, di mana grup kosong adalah .X - 3[[34,9,4,19,-213,3,21],[1934499],[],[-199,94,-2134,44449],[44],[-34,213],[34]]
- Urutan grup ketat (kecuali Anda menggunakan peta, karena grup kemudian dapat dikurangkan dari tombol), tetapi urutan angka dalam grup dapat dalam urutan apa pun. Jadi
[34,9,4,19,-213,3,21]
untuk grup pada contoh di atas juga bisa atau .[21,3,-213,19,4,9,34]
[-213,4,34,19,9,21,3]
- Anda dijamin bahwa tidak akan pernah ada angka yang dapat dibentuk oleh lebih dari sembilan angka sebelumnya. Jadi, Anda tidak akan pernah memiliki grup , dan jumlah grup terbesar yang mungkin adalah 12:
- Anda dapat mengasumsikan bilangan bulat akan maksimal 32 bit, jadi dalam jangkauan
[−2147483648,2147483647]
.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: [34,9,4,-34,19,-199,34,-213,94,1934499,213,3,21,-2134,44449,44]
Output: [[34,9,4,19,-213,3,21],[1934499],[-199,94,-2134,44449],[44],[-34,213],[34]]
Input: [17,21,3,-317,317,2,3,117,14,-4,-232,-43,317]
Output: [[17,21,3,2,117,14,-4],[-317,-232,-43],[317],[3,317]]
Input: [2,4,8,10,12,-12,-102,488,10824]
Output: [[2,4,8,10,12],[10824],[-102,488],[-12]]
Input: [0,100,-100,10000,-100,1001000]
Output: [[0,100],[10000,1001000],[-100],[-100]]
Input: [1,58,85,-8,5,8585,5885,518]
Output: [[1,58,85,-8,5],[518],[5885],[8585]]
Input: [4,-4,44,5,54]
Output: [[4,5],[54],[44],[-4]]
X + 1
apakah grup khusus untuk salinan yang tepat, danX
apakah grup untuk nomor lain yang dapat dibentuk dari salinan nomor tunggal, seperti negasinya?