Kredit untuk Geobits di TNB untuk ide itu
Sebuah posting tanpa detail yang cukup baru-baru ini mengemukakan permainan yang menarik:
2 anak duduk di depan sederet permen. Setiap potongan permen diberi nomor 1 x
, dengan x
jumlah total permen yang ada. Ada persis 1 kemunculan setiap angka.
Tujuan permainan ini adalah agar anak-anak makan permen dan melipatgandakan nilai permen yang mereka makan untuk mencapai skor akhir, dengan skor yang lebih tinggi menang.
Namun posting asli melewatkan informasi penting, seperti bagaimana permen dipilih, sehingga anak-anak dalam cerita kami memutuskan bahwa anak yang lebih tua harus pergi duluan, dan dapat memakan hingga setengah permen, namun begitu ia mengumumkan akhir gilirannya, dia tidak bisa mengubah pikirannya.
Salah satu anak dalam permainan ini tidak suka permen, jadi dia ingin makan sesedikit mungkin, dan dia pernah melihat ayahnya menulis beberapa kode sekali, dan angka dia bisa menggunakan keterampilan yang diperoleh dari itu untuk mengetahui berapa banyak permen dia perlu makan untuk memastikan kemenangan, sementara masih makan sesedikit mungkin.
Tantangan
Mengingat jumlah total permen x
, program atau fungsi Anda harus menghasilkan jumlah permen terkecil yang harus ia makan untuk memastikan kemenangan n
,, bahkan jika lawannya memakan semua sisa permen.
Secara alami jumlah yang lebih besar menghasilkan angka yang lebih besar, jadi berapa pun jumlah yang akan Anda berikan kepadanya, ia akan memakan jumlah n
terbesar.
Aturan
x
akan selalu menjadi bilangan bulat positif dalam rentang di0 < x! <= l
manal
batas atas kemampuan penanganan angka bahasa Anda- Dijamin bahwa anak akan selalu makan jumlah
n
terbesar, misalnya untukx = 5
dann = 2
, dia akan makan4
dan5
Uji kasus
x = 1
n = 1
(1 > 0)
x = 2
n = 1
(2 > 1)
x = 4
n = 2
(3 * 4 == 12 > 1 * 2 == 2)
x = 5
n = 2
(4 * 5 == 20 > 1 * 2 * 3 == 6)
x = 100
n = 42
(product([59..100]) > product([1..58]))
x = 500
n = 220
(product([281..500]) > product([1..280]))
Mencetak gol
Sayangnya, kontestan pemberani kami tidak memiliki apa pun untuk menulis kodenya, jadi ia harus mengatur potongan-potongan permen ke dalam karakter kode, sebagai akibatnya, kode Anda harus sekecil mungkin, kode terkecil dalam byte menang!
sumber
x = 0
Juga harus ditangani, karena0! = 1
? (Mungkinx
juga harus ditetapkan sebagaiJawaban:
Python 3 , 76 byte
Cobalah online!
Bergantung pada fakta bahwa untuk memakann permen tetap menang dan jumlah total permen menjadi x , x!(x−n)!>(x−n)! pasti benar, yang berartix!>((x−n)!)2 .
-1 dari Skidsdev
-3-6 dari BMO-3 dari Sparr
+6 untuk memperbaikinya
x = 1
sumber
from math import factorial as F
n*(F(x)>F(x-n)**2)or f(x,n+1)
. Demikian pulax<2or x*F(x-1)
untuk yang pertama yang lebih pendek dari impor.import math;F=math.factorial
yang saya mungkin harus mencari meta tips python menyebutkan ...F=lambda x:x<2or x*F(x-1)
apakah tiga byte lebih sedikit?JavaScript (ES6), 53 byte
Cobalah online!
Jarak kerja
Menariknya, perbedaan antara produk anak-anak selalu cukup besar sehingga hilangnya presisi yang melekat pada pengkodean IEEE 754 tidak menjadi masalah.
Sebagai hasilnya, ia bekerja untuk0≤n≤170 . Di luar itu, mantissa dan eksponen berlebih (menghasilkan + Infinity ) dan kami membutuhkan BigInts (+1 byte).
Bagaimana?
Biarkanp menjadi produk permen anak lain dan biarkan q menjadi produk permen kami sendiri.
Kita mulai denganp=n! (semua permen untuk anak lain) dan q=1 (tidak ada untuk kita).
Kami ulangi operasi berikut sampaiq≥p :
Hasilnya adalah jumlah iterasi yang diperlukan. (Pada setiap iterasi, kami 'mengambil permen tertinggi berikutnya dari anak lain'.)
Berkomentar
Ini diimplementasikan sebagai fungsi rekursif tunggal yang menghitungn! dan kemudian memasuki loop yang dijelaskan di atas.
sumber
Jelly , 9 byte
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
R ,
704138 byte-29 karena Dennis tahu semua fungsi internal
-3 Berpindah untuk memindai input ()
Cobalah online!
Implementasi R dari jawaban Python3 nedla2004 yang cukup sederhana .
Saya merasa ada implementasi yang lebih bersih dari penanganan 1, dan saya ingin kehilangan kurung kurawal.Aku marah, aku tidak kembali menggunakan pendekatan mana, lebih marah yang aku gunakan kurang ketat, tapi bahkan lebih marah lagi aku tidak tahu ada
cumprod()
fungsi. Optimasi hebat oleh Dennis.sumber
APL (Dyalog Unicode) , 10 byte
Cobalah online!
Jawaban Port of Dennis . Terima kasih, well, Dennis untuk itu.
Bagaimana:
Karena jawaban ini tidak sepenuhnya dibuat oleh saya, saya akan menyimpan jawaban asli saya di bawah.
APL (Dyalog Unicode) ,
14 1211 byteCobalah online!
Awalan fungsi diam-diam. Pada dasarnya port Dyalog dari jawaban Jonathan .
Terima kasih kepada ngn dan H.PWiz untuk bantuan dalam obrolan. Terima kasih kepada ngn juga karena telah menyelamatkan saya satu byte.
Terima kasih kepada Dennis karena menunjukkan bahwa kode asli saya salah. Ternyata itu menyelamatkan saya 2 byte.
Penggunaan
⎕IO←0
.Bagaimana:
sumber
+/
masuk ke dalam tanda kurung, satu komposisi dapat dihilangkan:(+/!>×\)⌽∘⍳
Haskell ,
5251 byteCobalah online!
sumber
Jelly , 7 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3 ,
183176149 byteCobalah online!
Ini jauh lebih cepat daripada beberapa solusi lain - 0 (N) perkalian bukan O (N²) - tapi saya tidak bisa mengurangi ukuran kode.
-27 dari Jo King
sumber
Bersih , 57 byte
Cobalah online!
Solusi lurus ke depan.
sumber
05AB1E ,
1511 byteCobalah online!
Menggunakan pendekatan yang sama dengan Python saya pengiriman . Sangat baru untuk 05AB1E sehingga tips tentang kode atau penjelasan sangat dihargai.
-4 byte terima kasih kepada Kevin Cruijssen
sumber
1
. Jika pernyataan if benar, itu akan mendorong indeksN
ke stack dan keluar dari program (mengeluarkan indeks itu secara implisit). Untuk input1
, if-statement akan menjadi falsey, tetapi akan mengeluarkan inputnya1
secara implisit setelah loop iterasi tunggal.!
, karena stack kosong karena kami tidak lagi menggandakan / melipatgandakan hasil jika.1
menghasilkan input secara implisit saat tumpukan kosong. :)Jelly , 14 byte
Cobalah online!
Menangani 1 dengan benar.
sumber
Arang , 20 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Product
pada daftar kosong di Arang mengembalikanNone
daripada1
, jadi saya harus secara logisOr
.sumber
PHP , 107 byte
Cobalah online!
Menggunakan hal yang samax2> ( ( x - 1 ) ! )2 metode seperti yang lain telah digunakan.
Menggunakan fungsi faktorial dari pengiriman PHP untuk tantangan ini (terima kasih kepada @ donutdan4114)
sumber
Bahasa Wolfram (Mathematica) , 43 byte
Cobalah online!
sumber
05AB1E , 7 byte
Port of Dennis ♦ Jelly menjawab , jadi pastikan untuk membesarkan hatinya jika Anda suka jawaban ini!
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Japt
-x
, 7 byteSolusi Port of Dennis 'Jelly.
Hanya bekerja dalam praktik hingga
n=4
saat kita masuk ke notasi ilmiah di atas itu.Cobalah
sumber
C # (.NET Core) , 93 byte
Cobalah online!
Didasarkan atas jawaban javascript @ Arnauld.
sumber
C (gcc) , 68 byte
Cobalah online!
Sunting: memperdagangkan byte terhadap mult, tidak melakukan 2 * x mult, bukan x + n
Sunting: kembali ke int alih-alih melalui makro. Akan gagal di 34 dengan lama.
Yah saya punya ini di C. Gagal di 21.
Ada kemungkinan ambiguitas, apakah anak yang baik ingin selalu menang atau tidak pernah kalah ... bagaimana menurut Anda?
sumber
Python 3 , 75 byte
Cobalah online!
Versi 74 byte
tetapi versi ini meluap selama 500 ...
sumber