Dalam tugas ini Anda diberi jumlah bola putih ganjil dan jumlah bola hitam yang sama. Tugasnya adalah menghitung semua cara memasukkan bola ke dalam tong sehingga di setiap nampan ada jumlah ganjil dari setiap warna.
Misalnya, kita memiliki 3 bola putih. Cara yang berbeda adalah:
(wwwbbb)
(wb)(wb)(wb)
untuk dua kemungkinan berbeda.
Jika kita memiliki 5 bola putih, caranya adalah:
(wwwwwbbbbb)
(wwwbbb)(wb)(wb)
(wwwb)(wbbb)(wb)
(wb)(wb)(wb)(wb)(wb)
Anda dapat mengambil input, yang merupakan bilangan bulat tunggal, dengan cara apa pun yang Anda suka. Outputnya hanya satu bilangan bulat.
Kode Anda harus cukup cepat sehingga Anda telah melihatnya lengkap untuk 11 bola putih.
Anda dapat menggunakan bahasa atau perpustakaan apa saja yang Anda suka.
:)
Jawaban:
Pari / GP, 81 byte
Untuk lebih efisien, ganti
1+
dengan1+O(x^(n+1))+O(y^(n+1))+
(O
istilah pertama saja sudah banyak membantu).Cobalah online! (versi 86 byte sebelumnya dengan sepasang parens yang tidak dibutuhkan dan tanpa
p=
singkatan)Versi lama, 90 byte
Komputasi
f(11)
membutuhkan ukuran tumpukan yang lebih besar, pesan kesalahan akan memberi tahu Anda cara meningkatkannya. Ini lebih efisien (tapi kurang Golfy) untuk menggantikan duan
yang muncul sebagai argumen keduaprod
dengan(n-1)/2
.sumber
(n-1)/2
?Python 3, 108 byte
Secara berulang menyebutkan semua set, memastikan untuk tidak mendapatkan duplikat dengan selalu menghasilkan set secara berurutan. Cukup cepat saat menggunakan memoized
C = functoools.lru_cache(None)(C)
, tetapi ini tidak perlu dilakukann = 11
.Telepon
C(num_white, num_black)
untuk mendapatkan hasil Anda. Pasangan pertaman
:Untuk menghasilkan hasil:
Misalnya untuk (7, 7):
sumber
Python 3 ,
180172 byteCobalah online!
Implementasi langsung dari fungsi pembangkit. Panjang tapi (agak) efisien. O (n 4 ) waktu, O (n 2 ) memori.
Array yang dihasilkan
a
berisi semua hasil dari semua ukuran hinggan
, meskipun hanyaa[n][n]
dikembalikan.sumber
Python 2 ,
168181 byteCobalah online!
sumber
n
berisi input) Anda harus menambahkandef f(n):
ataun=input()
(menjadikannya fungsi / program penuh resp.)a
bisaeval(`[[0]*n]*n`)
(di mana`
singkatanrepr
).