Tulis program yang mengambil input seperti:
n,k
yang kemudian menghitung:
dan kemudian mencetak hasilnya.
Contoh numerik:
Memasukkan:
5,2
Perhitungan internal:
Hasil cetak:
10
Saya ingin melihat jawaban yang mengalahkan solusi python saya dengan 65 karakter, tetapi semua bahasa jelas diterima.
Inilah solusi saya:
n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))
Edit:
Saya akui bahwa pertanyaan ini berasal dari teka-teki kombinasi matematis situs web codegolf . Saya tahu bahwa jawaban saya mungkin terlihat seperti tidak banyak kemajuan dapat dibuat di atasnya, tetapi para pemimpin teka-teki ini telah memecahkannya dalam hampir setengah karakter.
Jumlah karakter terendah saat ini menurut bahasa adalah:
Perl: 35
Ruby: 36
Python: 39
PHP: 62
code-golf
combinatorics
backus
sumber
sumber
Jawaban:
APL, 3 byte
Atau bagi mereka yang browsernya tidak merender hal di atas, dalam rendering ASCII:
sumber
n,k
input, Anda harus melakukannya!/⌽⎕
.R (11 Karakter)
sumber
C 96
Dengan I / O (yang membutuhkan waktu sekitar 34 karakter). Menambahkan beberapa baris baru agar dapat dibaca.
Sekarang jika Anda permisi, saya punya ASCII dan memilih roket untuk ditangkap.
sumber
GolfScript, 17 karakter
Solusi ini menangani kasus seperti k = 0 atau k = 1 dengan benar.
Bagian seperti faktorial didasarkan pada jawaban sebelumnya .
sumber
GolfScript 21
Tidak terlalu pendek, GolfScript tidak memiliki fungsi faktorial yang nyata, namun ini harus menjadi manipulasi data paling jahat yang pernah saya lakukan, ini membutuhkan jejak stack:
"5,2" Data pada stack dari input.
~
Perintah Eval, perhatikan bahwa, adalah operator yang mengubah angka menjadi array.[0 1 2 3 4] 2
~
Biner tidak.[0 1 2 3 4] -3
)
Selisih.[0 1 2 3 4] -2
>
Ambil akhir array, -2 sebagai parameter untuk mendapatkan 2 elemen terakhir.[3 4]
.
Elemen rangkap.[3 4] [3 4]
,
Panjang array.[3 4] 2
,
Ubah nomor menjadi array.[3 4] [0 1]
]
Buat array.[[3 4] [0 1]]
{{)}%{*}*}
Blok kode.[[3 4] [0 1]] {{)}% {*} *}
%
Eksekusi blok satu kali untuk setiap elemen array. Bagian berikut hanya menunjukkan loop pertama.[3 4]
{)}%
Setiap elemen array bertambah.[4 5]
{*}
Blok yang berisi perintah gandakan.[4 5] {*}
*
"Lipat" array menggunakan perintah blok, yang dalam hal ini membuat produk dari semua elemen.20
Setelah loop besar selesai, ia mengembalikan array dengan hasilnya.
[20 2]
~
Dekonstruksi array.20 2
/
Divisi.10
sumber
Ruby 1.9,
5246 (42) karakterJika stderr diabaikan:
Ruby 1.8, 43 karakter, tidak ada output tambahan untuk stderr:
Suntingan:
sumber
Python (56)
Kode tidak dikelompokkan dan beberapa penjelasan tentang cara pintas untuk menghitung koefisien binomial. (Catatan: Ada beberapa wawasan yang saya belum tahu untuk turun ke versi char 39; Saya tidak berpikir pendekatan ini akan membawa Anda ke sana.)
sumber
*
untuk mem-parsing input formulir4545 78
?*
itu masalahnya.4545 78
bukan ekspresi Python yang valid, jadiinput()
akan memunculkan aSyntaxError
. Trik ini sepenuhnya tergantung pada masalah yang dimintax,y
. Jika Anda memiliki fungsi yang membacax y
dan mengembalikan tuple, maka Anda dapat menggunakannya*
dengan baik.RPL (4)
(menggunakan fungsi bawaan)
sumber
Windows PowerShell, 57
sumber
J,
333635 karakter adalah input, parsing dan output. Karakter lainnya
!
,, adalah n pilih k.Saya tidak memiliki Windows di sekitar untuk pengujian ini saat ini, tetapi saya percaya itu harus bekerja di sana.
sumber
Q, 32 karakter
sumber
Perl 6 (55)
sumber
RPL (22)
(tidak menggunakan fungsi COMB bawaan)
sumber
Q (
5045)Anda dapat mencukur beberapa karakter dari yang di atas dengan menghapus tanda kurung yang berlebihan dan menggunakan 1 * / bukannya prd.
sumber
Mathematica 12
Langsung, fungsi bawaan.
sumber
Perl 6 ,
2516 byte-9 byte terima kasih kepada nwellnhof
Cobalah online!
Fungsi anonim yang mengambil dua angka dan mengembalikan int. Ini menggunakan bawaan
combinations
dan mengonversi daftar yang dikembalikan ke int.sumber
combinations
bisa mengambil nomor alih-alih daftarPHP (71
79)sumber
Python (54)
Pada dasarnya sama dengan yang Python di atas, tapi saya mencukur empat byte dengan menjatuhkan
dari definisi fungsi. Namun, ini menghasilkan fungsi mengembalikan Benar bukan 1 jika k = 0, tetapi ini dapat diperbaiki dengan mengalikan dengan 1 sebelum mencetak, karena 1 * Benar = 1, sehingga menambahkan dua byte.
sumber
J, 11 karakter
Mengambil input dari keyboard.
sumber
Haskell (80)
Tetapi, jika input dalam format
x y
diperbolehkan dan bukan dalam formatx,y
, itu 74 karakter:sumber
Scala 54
sumber
Python (52)
Ditingkatkan dari dua lainnya dengan menggunakan
print+
untuk mengkonversi hasilf
dariboolean
keint
dalam kasusk==0
.Masih tidak tahu bagaimana cara mengecilkannya menjadi 39, saya bertanya-tanya apakah mereka menggunakan lambda sama sekali.
sumber
(OP hanya secara spesifik menentukan metode / format input & output, sehingga yang berikut tampaknya dapat diterima.)
Sage Notebook (
39 4140)Di sel saat ini,
di mana input dalam formulir
n,k
dimasukkan & dievaluasi dalam sel sebelumnya. Ini mensimulasikan "input baris perintah" dengan menetapkannya_
(mirip dengan argumen baris perintah).Sage Notebook (
42 4443)Atau, menggunakan "input sumber" (dengan hanya
x=
karakter baris baru dan ditambahkan ke skor), misalnya,Kedua pendekatan ini jelas merupakan spin-off dari jawaban sebelumnya oleh orang lain.
sumber
Tcl , 80 byte
Cobalah online!
sumber
Javascript, 27 byte
Pertama solusi 35-byte saya sendiri:
Atau, sebagai alternatif,
Yang pertama bekerja secara rekursif, dengan
(n,k) = (n-1,k) + (n-1,k-1)
aturan sederhana . Yang kedua menggunakan itu(n,k) = (n-1,k-1) * n/k
.EDIT
Saya hanya memperhatikan solusi dari Arnould dalam duplikatnya:
Yang merupakan 8 byte kurang dari (27 byte)
sumber
TI-BASIC, 16 karakter (8 byte)
Input adalah daftar panjang 2 in
Ans
.Output adalah hasil dari rumus yang didefinisikan di sini .
Jika solusi di atas tidak cukup, maka solusi 35 karakter (24 byte) berikut ini juga berfungsi:
Catatan: TI-BASIC adalah bahasa tokenized. Jumlah karakter tidak sama dengan jumlah byte.
sumber