Kami memiliki 40 batang dengan lebar yang sama tetapi ketinggian berbeda. Berapa banyak pengaturan yang mungkin untuk menempatkan mereka di sebelah satu sama lain sehingga ketika kita melihat dari kanan kita melihat 10 batang dan ketika kita melihat dari kiri kita kembali melihat persis 10 batang?
Misalnya pemesanan seperti itu adalah:
Tongkat hitam disembunyikan, tongkat merah adalah yang dapat Anda lihat ketika Anda melihat dari kiri, tongkat biru adalah yang dapat Anda lihat ketika Anda melihat dari kanan dan ungu (yaitu yang terpanjang) adalah yang dapat dilihat. dari kedua sisi.
Sebagai kasus uji:
- Jika kita memiliki 3 batang jumlah pemesanan untuk melihat 2 dari kiri dan 2 dari kanan adalah 2
- Jika kita memiliki 5 batang jumlah pemesanan untuk melihat 3 dari kiri dan 3 dari kanan adalah 6
- Jika kita memiliki 10 batang jumlah pemesanan untuk melihat 4 dari kiri dan 4 dari kanan adalah 90720
10!/40 = 90720
... apakah itu kebetulan?Jawaban:
PARI / GP, 80
Jumlah tongkat yang terlihat juga disebut Angka Pencakar Langit , setelah permainan pensil / kotak. Kode ini didasarkan pada (hanya sedikit diubah) rumus dari OEIS A218531 . Saya tidak tahu banyak PARI, tapi saya benar-benar tidak berpikir ada banyak golf di sini.
Semua test case ditampilkan di ideone.com . Hasilnya
f(40,10)
adalah:sumber
v
tongkat yang terlihat kiri adalah angka Stirlings(n,v)
. Jika stik tertinggi berada pada posisik
, maka stik yang terlihat kiri adalah stik itu dan stik yang terlihat di sub-permutasi di sebelah kiri darik-1
nilai di kiri posisik
. Jadi, untuk memilikiv
stik yang dapat terlihat kiri dan stik yangv
dapat terlihat, seseorang memilikis(k,v-1)
pilihan untuk mengubah bagian kiri,s(n-k-1,v-1)
untuk mengubah bagian kanan, danbinomial(n-1,k)
pilihan untuk membagi stik menjadi dua bagian.f(n,v,s=stirling)=abs(sum(k=1,n--,binomial(n,k)*s(k,v-1)*s(n-k,v-1)))
. Ini menyimpansterling
ke variabel untuk digunakan kembali, meninggalkan argumen terakhirnya, karena 1 adalah default, dan mengurangi 1 dari n satu kali, bukan tiga kali.Python 3, 259 byte
Tidak terlalu senang dengan ini.
Contoh input dan output:
Ini menghasilkan semua kombinasi yang mungkin dari rentang yang disediakan, dan kemudian loop melalui mereka, memeriksa setiap angka di dalamnya untuk melihat apakah itu sama dengan maksimum angka-angka sebelumnya. Kemudian melakukan hal yang sama mundur, dan jika hitung maju (t) = hitung mundur (d) = jumlah tampilan yang diberikan (k) itu adalah yang valid. Ia menambahkan ini ke penghitung (c) dan mencetaknya di akhir.
sumber
R, 104
De-golfed sedikit:
sumber
Pyth -
3836 bytePada dasarnya port jawaban R. Cukup lambat, bahkan tidak bisa selesai
10, 4
online.Satu-satunya hal yang tidak dimiliki Pyth adalah cummax dan
==
vektor-vektor berlebih, tetapi hanya membutuhkan beberapa byte untuk diimplementasikan.Penjelasan dan golf lebih lanjut segera hadir.
Coba di sini online .
sumber