Teorema bilangan poligon Fermat menyatakan bahwa setiap bilangan bulat positif dapat dinyatakan sebagai jumlah paling banyak -gonal. Ini berarti bahwa setiap bilangan bulat positif dapat dinyatakan sebagai jumlah hingga tiga angka segitiga, empat angka persegi, lima angka pentagonal, dll. Tugas Anda adalah mengambil bilangan bulat positif , dan bilangan bulat , dan untuk menghasilkan - bilangan bulat global yang berjumlah .
The th bilangan bulat -gonal, di mana dan , dapat didefinisikan dalam beberapa cara. Cara non-matematika-y adalah bahwa th jumlah -gonal dapat dibangun sebagai poligon dengan sisi, masing-masing panjang . Misalnya, untuk (angka segitiga):
Lihat di sini untuk contoh dengan huruf lebih besar .
Definisi matematika-y adalah dengan menggunakan rumus untuk , yang menghasilkan ke- ke- :
yang diberikan di halaman Wikipedia di sini .
Memasukkan
Dua bilangan bulat positif, dan , dengan kondisi . Anda dapat memasukkan bilangan bulat ini dalam representasi paling alami dalam bahasa Anda (angka desimal, angka unaris, angka angka mengambang bilangan bulat, dll.).
Keluaran
Daftar bilangan bulat, , dengan panjang maksimum , di mana jumlah sama dengan dan semua bilangan bulat di adalah bilangan bulat -gonal. Sekali lagi, bilangan bulat dapat ditampilkan dalam representasi alami dalam bahasa Anda, dengan pemisah yang berbeda dan konsisten (jadi karakter non-desimal untuk output desimal, karakter yang berbeda dari yang digunakan untuk output unary, dll.)
Aturan
- Input atau output tidak akan pernah melebihi batas integer untuk bahasa Anda
- tidak harus dipesan
- Dalam hal beberapa kemungkinan keluaran, salah satu atau semua dapat diterima
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang
Uji kasus
x, s => L
1, s => 1
2, s => 1, 1
5, 6 => 1, 1, 1, 1, 1
17, 3 => 1, 6, 10
17, 4 => 1, 16
17, 5 => 5, 12
36, 3 => 36
43, 6 => 15, 28
879, 17 => 17, 48, 155, 231, 428
4856, 23 => 130, 448, 955, 1398, 1925
sumber
x=17, s=5
dapatkah kita menghasilkan5,12,0,0,0
bukan hanya5,12
?Q
ke kiriman saya?Jawaban:
Haskell ,
78 8077 byteKami menghitung produk Cartesian dari pertaman nomor-Gonal s, dan kemudian menemukan entri pertama yang jumlah ke n .
Cobalah online!
sumber
JavaScript (ES6),
8380 bytePencarian rekursif cepat yang memaksimalkan istilah terkecil dari output.
Mengambil input sebagai
(s)(x)
.Cobalah online!
Rumus
Ternyata menjadi lebih pendek untuk menggunakan rumus berbasis 0 untuk menghitung angkas -gonal di JS, yaitu mulai dengan n = 0 dan untuk menghitung P( N + 1 , s ) :
yang dapat ditulis dalam 14 byte:
Berkomentar
sumber
05AB1E ,
1413 bytePort of Jonathan Jonathan menjawab Jelly .
Cobalah online!
sumber
Haskell , 55 byte
Cobalah online!
Keluarkan semua solusi yang mungkin. Mendefinisikan angka s-gonal sebagai jumlah kumulatif dari perkembangan aritmatika
sumber
Jelly , 17 byte
Tautan diad (sangat sangat tidak efisien) menerima
s
di sebelah kiri danx
di sebelah kanan yang menghasilkan jawaban sesingkat mungkin sebagai daftar bilangan bulat (diurutkan naik).Cobalah online! - tidak banyak gunanya mencobanya untuk nilai yang jauh lebih tinggi!
Bagaimana?
sumber
⁸
Ruby , 79 byte
Cobalah online!
sumber
Python 3 , 105 byte
Cobalah online!
Jawaban Port of Arnauld tentang JavaScript , jadi pastikan untuk membatalkannya!
sumber
Retina , 111 byte
Cobalah online! Tautan termasuk kasus uji. Mengambil input dalam urutan
s n
. Penjelasan:Konversikan ke unary.
Setelah memproses tahapan yang tersisa, perlakukan sebagai program Retina dan jalankan pada input yang sama.
Gandakan garis.
Ganti salinan pertama dengan ekspresi reguler yang melompati angka pertama dan kemudian cocok dengan
s
s
angka -gonal. Angka-angka itu sendiri ditangkap dalam kelompok penangkap aneh dan kelompok penangkap genap digunakan untuk memastikan bahwa semua angka-angka tersebut adalahs
-gonal.Ganti salinan kedua dengan daftar yang dipisahkan oleh ruang dari kelompok-kelompok tangkapan aneh.
Sebagai contoh, kode yang dihasilkan untuk input
5 17
adalah sebagai berikut:sumber
APL (NARS), 149 karakter, 298 byte
jika tidak menemukan solusi "0 = ≢b" daripada pengembalian untuk input (ns), n kali 1; selain itu akan mengembalikan jumlah angka yang memiliki sedikit penambahan ...
uji:
Masalahnya: Ini tidak menemukan beberapa solusi memiliki beberapa angka yang diulang ...
sumber
C ++ (dentang) , 198 byte
Cobalah online!
sumber