Mari kita bayangkan kita memiliki satu set bilangan bulat positif yang terbatas. Set ini dapat direpresentasikan sebagai garis titik di mana setiap bilangan bulat yang ada di set diisi seperti scantron atau kartu punch . Misalnya set {1,3,4,6}
dapat direpresentasikan sebagai:
*.**.*
*
mewakili anggota himpunan kami dan .
mewakili bilangan bulat yang bukan merupakan anggota yang ia tetapkan.
Set ini memiliki "faktor". Longgar x adalah faktor y jika y dapat dibangun dari salinan x. Lebih tepatnya definisi faktor kita adalah sebagai berikut:
- x adalah faktor y jika dan hanya jika y adalah gabungan dari sejumlah set yang terpisah , yang semuanya x dengan offset.
Kami akan memanggil *.*
sebuah faktor dari *.**.*
karena cukup jelas terdiri dari dua salinan *.*
put ujung ke ujung.
*.**.*
------
*.*...
...*.*
Faktor tidak harus ujung ke ujung, kami juga akan mengatakan itu *.*
adalah faktor*.*.*.*
*.*.*.*
-------
*.*....
....*.*
Faktor-faktor juga bisa tumpang tindih. Ini berarti *.*
juga merupakan faktor****
****
----
*.*.
.*.*
Namun angka tidak dapat ditutupi oleh faktor lebih dari sekali. Sebagai contoh *.*
adalah bukan faktor *.*.*
.
Berikut ini contoh yang lebih rumit:
*..*.**..***.*.*
Ini *..*.*
sebagai faktor. Anda dapat melihat di bawah di mana saya telah berbaris tiga contoh *..*.*
.
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
Tugas
Diberikan satu set oleh keluaran representasi yang masuk akal semua set yang merupakan faktor input.
Anda dapat mengindeks dengan nilai apa pun, (yaitu Anda dapat memilih angka terkecil yang dapat hadir dalam input). Anda juga dapat mengasumsikan bahwa set input akan selalu mengandung nilai sekecil itu.
Ini adalah pertanyaan kode-golf sehingga Anda harus berusaha melakukan ini dalam sesedikit mungkin byte.
Uji Kasus
Kasus uji ini dilakukan dengan tangan, mungkin ada satu atau dua kesalahan pada kasus yang lebih besar
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
sumber
[1,3,5,7]
Untuk*.*.*.*
) dapatkah kita menganggapnya diurutkan?*.*.*
=x+x^2+x^4
, maka1+x+x^2
=***
akan menjadi pembagi, kan?x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
*
tercantum sebagai faktor yang mewakili subset yang sama dengan*.
atau*..
.Jawaban:
Mathematica,
7168 byteInput sebagai
{1,3,5,7}
(diurutkan) dan output sebagai{{1, 3, 5, 7}, {1, 3}, {1, 5}, {1}}
. Fungsi ini akan membuang banyak pesan.Ini adalah O (2 2 Tidak ) (di mana N adalah panjang input dan o = p = e = 1 ...). Ini menghasilkan semua himpunan bagian dari himpunan bagian, kemudian memilih orang-orang yang menghasilkan pengiriman input ketika bergabung bersama (memastikan kami hanya mempertimbangkan partisi) dan di mana semua elemen adalah sama jika kita mengurangi nilai terkecil dari setiap subset).
sumber
Jelly , 12 byte
Input dan output digunakan
1
dan0
bukannya*
dan.
.Cobalah online!
Bagaimana itu bekerja
sumber