Dalam tantangan ini kami mencoba menyelesaikan dua masalah penting sekaligus. Mereka:
- Diberikan bilangan bulat a dan b , beri tahu apakah b -1 adalah bilangan prima.
- Dengan bilangan bulat a dan b , kembalikan nCr (a, b).
Secara khusus, Anda harus menulis dua program, satu yang melakukan tugas pertama dan satu yang melakukan yang lain. Karena kami ingin menyelesaikan kedua masalah sekaligus, disarankan untuk menggunakan kode yang sama di kedua program.
Mencetak gol
Skor jawaban adalah jarak Levenshtein antara kedua program. Skor yang lebih rendah lebih baik. Dalam hal seri, jawaban dengan kode gabungan terpendek dari kedua program akan menang. Anda dapat menggunakan skrip ini untuk menghitung skor solusi Anda.
Aturan
- Anda harus menulis dua program dalam bahasa yang sama yang menyelesaikan tugas yang dijelaskan di atas. Anda dapat menggunakan metode I / O yang Anda inginkan. Untuk tugas 1, Anda dapat mengembalikan nilai kebenaran / kepalsuan atau memilih dua nilai yang berarti benar dan salah dan mengembalikannya sesuai. Misalnya. Anda dapat memilih itu
"prime"
berarti benar dan"not prime"
berarti salah. - Algoritma yang Anda gunakan harus bekerja untuk semua input yang mungkin, tetapi tidak apa-apa jika kode gagal untuk angka besar karena keterbatasan tipe nomor yang digunakan. Anda dapat mengasumsikan bahwa input tersebut valid.
Tidak ada subset dari program yang harus menyelesaikan masalah, yaitu. kode tidak boleh berfungsi jika ada karakter yang dihapus. Misalnya, kode berikut ini tidak valid, karena dimungkinkan untuk menghapus blok-blok yang tidak digunakan tanpa merusak program:
if (1) { /* change to 0 to get the second program*/ ... } else { ... }
Tidak ada celah standar.
Uji kasus
a b -1 adalah prime?
a b
1 1 false
2 3 true
5 2 false
2 5 true
4 3 false
2 7 true
nCr
a b nCr(a,b)
1 1 1
5 2 10
4 3 4
10 7 120
12 5 792
Jawaban:
MATLAB, jarak 10
Primality:
nCr:
sumber
PHP, jarak 29
a^b-1
mencetak 0 untuk true dan semua nilai integer> 0 untuk falsenCr(a,b)
PHP, jarak 36
a^b-1
mencetak 1 untuk true nothing for falsenCr(a,b)
sumber
Ruby, Jarak 1, Panjang Gabungan 194
Cek perdana:
Cobalah online!
nCr:
Cobalah online!
Seperti yang diperkirakan dalam komentar, beberapa brengsek selalu harus melawan semangat masalah. Sungguh menyenangkan menemukan cara untuk mengatasinya! Begini cara kerjanya: Kami memiliki dua solusi terpisah untuk masalah tersebut. Kami menjalankan keduanya, memasukkannya ke dalam array, dan kemudian memilih elemen ke-0 atau ke-1, untuk jarak sunting 1. Ini biasanya ilegal, karena Anda bisa menghapus semuanya kecuali perhitungan yang Anda inginkan dan masih berfungsi . Namun, setiap potongan kode ditulis mengandalkan pemuatan perpustakaan standar yang sama,
'mathn'
:prime?
mathn
mengubah cara kerja divisi - sebelum memuatnya,3/4
mengevaluasi0
, sementara kemudian mengevaluasi ke fraksi(3/4)
. Karena hasil antara(a+1-i)/i
tidak selalu angka keseluruhan, hasil keseluruhan salah tanpa perpustakaan.Sekarang kita hanya perlu membuat memuat pustaka bergantung pada sisa kode yang tidak dimodifikasi. Kami melakukan ini dengan menghasilkan nama mathn menggunakan panjang karakter dari sisa kode utama: perhitungan gabungan memiliki panjang 55, yang dua kali lipat menjadi 110 adalah nilai ASCII dari 'n'. Jadi menggabungkan ini ke string 'matematika' memberikan perpustakaan yang diinginkan.
Sebagai bonus, memperkenalkan dependensi perpustakaan juga membuat kode berjalan dalam jumlah waktu yang wajar. Secara khusus, pendekatan naif terhadap nCr tidak akan menghasilkan hasil antara fraksional.
sumber
05AB1E , jarak 3
nCr
Cobalah online!
isPrime (a ^ b-1)
Cobalah online!
sumber
Ditumpuk , jarak 13
Cobalah online! Yang pertama menghitung nCr, keutamaan kedua, menggunakan teorema Wilson.
(f g h) fork!
munculN
argumen dari stack (panggil merekaa0 ... aN
) dan berlakua0 ... aN f a0 ... aN h g
.Untuk program pertama:
Dan untuk yang kedua:
sumber
Python 2 , jarak 15 , panjang 172
Tugas 1
Tugas 2
Cobalah online!
sumber
Mathematica, jarak 10
Tugas 1:
PrimeQ[#2^#-1]&
Tugas 2:
Binomial[#2,#]&
Kedua fungsi mengambil input dalam urutan
b,a
.sumber
Javascript ES7, jarak 14
Terima kasih @Conor O'Brien untuk mengurangi jarak sebesar 7
Primality:
Mengembalikan 1 jika prime mengembalikan 0 jika tidak prime.
Pemeriksaan prima yang sangat tidak efisien, memeriksa modulo setiap nomor lebih kecil dari itu dan lebih besar dari ...
nCr:
Kalikan 1 dengan setiap angka dari y + 1 hingga x dan bagilah dengan setiap angka dari 1 hingga xy (x! / Y!) / (Xy)!
sumber
f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}
memberi jarak sunting 14. Coba online!Oktaf, jarak
171615nCr
Cobalah online!
isprime(a^b-1)
Cobalah online!
Saya tidak terlalu lancar menggunakan Octave, jadi saya tidak tahu apakah ada builtin untuk menghitung nCr.
sumber
MATL , jarak 4, panjang 6
Katakan apakah
a^b-1
prima:Cobalah online!
Hitung
nCr(a,b)
:Cobalah online!
Bagaimana itu bekerja
Katakan apakah
a^b-1
prima:Hitung
nCr(a,b)
:sumber
Pyth, jarak 4, total panjang 8
Primality dari
a^b-1
Cobalah online!
nCr (a, b)
Cobalah online!
Keduanya mengambil input sebagai tupel / daftar bilangan bulat (misalnya
(1,2)
).sumber
PHP, jarak 14
Menulis program dengan dua fungsi dan hanya memanggil salah satu dari mereka akan mengarah ke jarak 1, tetapi terlalu timpang.
Tes Perdana, 100 byte:
nCr, 98 byte:
sumber
Jelly , jarak 4, panjang 5
Tugas 1
Tugas 2
Cobalah online!
Bagaimana itu bekerja
Tugas 1
Tugas 2
sumber
JavaScript, Nilai: 1, Panjang:
144142126117fungsi (a, b) {s = "a = Math.pow (a, b) -s.length + 79; untuk (b = 2; a% b ++;); b> a1for (t = s.length-79 ; b;) t = t * a - / b - "; return eval (s.split (1) [1])}Kedua subrutin menggunakan panjang yang lain untuk menghitung konstanta sendiri, sehingga tidak ada char yang dapat dihapussumber