Sebuah diagram Muda adalah susunan kotak di baris kiri-dibenarkan dan top-dibenarkan kolom. Untuk setiap kotak, semua ruang di atasnya dan di sebelah kirinya ditempati.
XXXXX
XXX
XXX
X
The Panjang kail dari kotak adalah jumlah kotak ke kanan berturut-turut, serta di bawahnya dalam kolomnya, juga menghitung sendiri sekali. Misalnya, kotak kedua memiliki panjang kait 6:
X****
X*X
X*X
X
Berikut ini semua panjang kaitnya:
86521
532
421
1
Tujuan Anda adalah menghitung produk dari panjang kait, di sini 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Baca tentang rumus panjang kait jika Anda tertarik mengapa ungkapan ini penting.)
Input: Kumpulan ukuran baris sebagai angka seperti [5,3,3,1]
atau sebagai simbol unary berulang seperti [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
atau "XXXXX XXX XXX X"
. Anda dapat mengharapkan daftar diurutkan naik atau turun, seperti yang Anda inginkan. Daftar ini akan kosong dan hanya berisi bilangan bulat positif.
Output: Produk dari panjang kait, yang merupakan bilangan bulat positif. Jangan khawatir tentang integer overflow atau runtime.
Built-in yang khusus menangani diagram Young atau partisi integer tidak diperbolehkan.
Kasus uji:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 byte) Format input:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 byte
25 byte (dengan penjelasan):
Mengambil input sebagai daftar daftar naik dari angka-angka unary mirip dengan contoh
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Pemakaian:
metode
Hasil antara ditunjukkan pada input
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( ini untuk versi sebelumnya dengan panjang menurun tetapi menggunakan metode yang sama ):Versi eksplisit dengan panjang yang sama:
Cobalah online di sini.
sumber
Pyth - 21 byte
Saya kehilangan banyak byte dalam perhitungan vertikal. Akan fokus pada bermain golf itu.
Mengambil input seperti
[5, 3, 3, 1]
.Coba di sini online .
sumber
Pyth, 18 byte
Mengambil input dalam urutan menaik, seperti
[1, 3, 3, 5]
.Demonstrasi.
Solusi alternatif, 19 byte
sumber
Python 2,
8988 byte(Terima kasih kepada @xnor untuk satu byte penyimpanan yang gila dengan menggabungkan
p
danj
)The
d.get
terlihat sedikit mencurigakan kepada saya, tetapi sebaliknya aku relatif senang dengan hal ini. Saya mencoba beberapa pendekatan lain, seperti rekursi dan zipping, tetapi ini adalah satu-satunya yang berhasil saya dapatkan di bawah 100.Mengambil input dari STDIN sebagai daftar dalam urutan menaik, mis
[1, 3, 3, 5]
.sumber
Haskell, 68 byte
Contoh penggunaan:
p [5,4,3,2,1]
->4465125
f
memindai dari kiri ke kanan dengan mengalikan panjang kait terluar dengan panggilan rekursif ke dirinya sendiri di mana setiap elemen dari daftar input dikurangi dengan1
(menjatuhkannya saat mencapai0
).p
memindai dari atas ke bawah dengan mengalikanf
seluruh daftar denganp
ekor.sumber
R, 174 byte
Jadi ... Solusi ini cukup panjang dan mungkin bisa lebih golf. Saya akan berpikir tentang hal ini !
Tidak Terkumpul:
sumber
Python 2,
135128 byteIni mengambil daftar jenis Python dari stdin:
Ini adalah implementasi yang sangat kanonik, tetapi saya belum menemukan sesuatu yang jauh lebih pintar sejauh ini. Saya merasa bahwa akan ada solusi yang jauh lebih pendek bahkan dengan bahasa pemrograman "nyata".
Kami mendapatkan jumlah kotak di setiap baris sebagai input. Solusi ini pertama-tama menghitung jumlah kotak di setiap kolom, yang disimpan dalam
c
(sebenarnya jumlah minus 1 untuk menyederhanakan penggunaannya dalam perhitungan nanti). Kemudian ia beralih ke semua kotak, dan mengalikan panjang kait. Panjang kait itu sendiri sepele untuk dihitung setelah Anda memiliki jumlah kotak di setiap baris dan kolom.sumber
m
?JavaScript ( ES6 ) 69
Suatu fungsi mengambil array bilangan bulat dalam urutan menaik .
Jalankan cuplikan untuk menguji (khusus Firefox)
sumber
Python,
9591 byteIni adalah implementasi Python dari jawaban Hasimi nimi . Saran bermain golf diterima.
sumber
z and _ or 1
sepertiz==[]or _
saatz
ini daftar, menggunakan fakta bahwaTrue==1
. Deklarasi fungsi Python lebih banyak daripada Haskell, sehingga sering memberikan hasil yang baik untuk mendefinisikan fungsi rekursif tunggal yang melakukan loop rekursif dalam dan luar, meskipun saya tidak tahu seberapa layak yang ada di sini.