Tulis program yang menghitung jika nilai moneter yang dimasukkan, sebagai bilangan bulat, dapat diwakili oleh kombinasi unik koin dan / atau catatan, yang berarti koin / catatan yang sama tidak dapat digunakan lebih dari satu kali.
Program Anda harus mengambil nilai sebagai input, dan dapat mengambil daftar nilai koin / catatan baik melalui input atau melalui bahasa yang setara dengan array. Daftar koin / catatan harus dapat diubah, jadi pastikan sudah jelas di mana ini didefinisikan jika Anda menggunakan konstanta.
Program Anda harus menampilkan nilai kebenaran / kepalsuan masing-masing.
Harap dicatat bahwa mengeluarkan daftar koin / catatan yang membentuk nilai tidak diperlukan.
CONTOH
Menggunakan pound Inggris, (£ 1,00 = 100 dan £ 420,69 = 42069)
coins = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]
Berikut ini akan menampilkan true:
6 (1, 5)
15 (10, 5)
88 (1, 2, 5, 10, 20, 50)
512 (500, 10, 2)
7003 (5000, 2000, 2, 1)
Berikut ini akan menampilkan false:
4
209
8889
4242424242
[ANYTHING ABOVE 8888]
DATA UJI ALTERNATIF (Dolar AS)
coins = [1, 5, 10, 25, 50, 100, 200, 500, 1000, 2000, 5000, 10000]
Semoga berhasil!
Jawaban:
Brachylog 2 (TIO Nexus), 2 byte
Cobalah online!
Mengambil daftar koin baik melalui input standar atau melalui menambahkannya ke awal program sebagai array literal (keduanya akan bekerja, jadi terserah Anda yang Anda rasa "lebih sah"; yang pertama diizinkan secara default Aturan PPCG, yang terakhir secara khusus diizinkan oleh pertanyaan); dan mengambil nilai untuk menghasilkan sebagai argumen baris perintah.
Penjelasan
Program ini memanfaatkan detail implementasi dari cara pembungkus TIO Nexus untuk fungsi Brachylog; khusus, ini memungkinkan Anda memberikan argumen baris perintah untuk memberikan input melalui Output. (Ini tidak dipertimbangkan dalam desain asli untuk Brachylog; namun, bahasa didefinisikan oleh implementasinya di PPCG, dan jika implementasi muncul yang terjadi untuk melakukan apa yang saya butuhkan, maka saya dapat mengambil keuntungan darinya.) Itu berarti Program terlihat seperti ini:
Sebagai program penuh, ia mengembalikan nilai boolean;
true.
jika semua asersi dalam program dapat secara bersamaan dipenuhi, ataufalse.
jika tidak bisa.(Pengingat, atau untuk orang yang belum tahu: Brachylog 2 menggunakan pengkodean karakter sendiri yang
⊇
panjangnya satu byte.)sumber
08
2B
(Anda dapat melihat pengkodean di sini ). Alasan saya tidak mencantumkan pengkodean spesifik adalah bahwa itu tidak relevan; yang paling penting adalah bahwa Brachylog menggunakan tidak lebih dari 256 karakter unik, sehingga masing-masing dapat direpresentasikan dalam satu byte tunggal. Ini biasanya dilakukan oleh bahasa golf untuk membuat kode lebih mudah dibaca; mereka bisa menggunakan pengkodean seperti kode halaman 437 sebagai gantinya, tetapi jika Anda melakukannya tidak ada yang bisa membacanya .05AB1E , 4 byte
Penjelasan:
Cobalah online!
sumber
Mathematica, 25 byte
Fungsi murni mengambil array nilai koin sebagai argumen pertama dan integer target sebagai argumen kedua, dan mengembalikan
True
atauFalse
.sumber
Jelly, 6 byte
Cobalah online!
-2 bytes berkat Leaky Nun
-13 bytes berkat Leaky Nun (cerita panjang)
sumber
Retina ,
5231 byteCobalah online! Mengambil input sebagai daftar koin dan catatan yang dipisahkan ruang diikuti oleh nilai yang diinginkan. Sunting: Disimpan 18 byte berkat @Kobi yang mendebug kode saya. Penjelasan: Dua baris pertama cukup mengkonversi dari desimal ke unary. Baris ketiga kemudian menangkap daftar koin dan catatan. Pergantian ini memungkinkan engine untuk mundur dan memilih untuk tidak menangkap koin / catatan tertentu. Kelompok penyeimbang kemudian mencocokkan nilai dengan semua sufiks dari daftar tangkap (tidak perlu tetapi pegolf).
sumber
^((1+) )+(\2?(?<-2>)|){99}$
(34 byte, dengan batasan jumlah koin), atau^((1+) |1+ )+(\2?(?<-2>))+$
(juga 34 byte).(?<-2>\2?)
berfungsi, ditambah byte lebih lanjut dari jawaban kedua Anda karena?
tidak lagi diperlukan.Brachylog , 7 byte
Cobalah online!
Bagaimana itu bekerja
Termasuk kombinasinya, 9 byte
Cobalah online!
sumber
Java (OpenJDK 8) , 125 byte
Cobalah online!
sumber
boolean f(int[]c,int n){for(int l=c.length;l-->0;n-=n<c[l]?0:c[l]);return n<1;}
(79 byte). Dengan Java 8 dan lambda-nya, dapat dikurangi menjadi 62 byte. Mengenai jawaban Anda seperti saat ini,int l=c.length-1
maka menggunakanl
bukanl-1
juga lebih pendek.Prolog (SWI) , 46 byte
Cobalah online!
Garpu jawaban Python saya .
sumber
is
sebagai#=
, yang akan memungkinkan Anda menghapus beberapa spasi putih).JavaScript (ES6),
81696764 byteMengambil daftar koin
c
dan jumlah targeta
dalam sintaks currying(c)(a)
. Pengembalian0
atautrue
.Uji kasus
Tampilkan cuplikan kode
sumber
Haskell , 28 byte
Fungsi operator
(#)
mengambil bilangan bulat dan daftar bilangan bulat (atau, lebih umum,Traversable
wadah angka apa saja) dan mengembalikan aBool
.Gunakan sebagai
6#[1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000]
.Cobalah online!
Bagaimana itu bekerja
c
adalah nilai yang diinginkan danl
daftar nilai koin.mapM(:[0])l
memetakan(:[0])
lebih daril
, memasangkan setiap nilai dengan 0, dan kemudian membangun produk kartesius, memberikan daftar di mana setiap elemen baik nilai yang sesuai di dalaml
, atau 0.sum<$>
jumlah setiap kombinasi, danelem c$
periksa apakahc
ada dalam daftar yang dihasilkan.sumber
R,
8883 byte-5 byte terima kasih kepada @Jarko Dubbeldam
mengembalikan fungsi anonim. Ini menghasilkan semua kemungkinan kombinasi koin (menggunakan
expand.grid
pasanganT,F
) dan memeriksa apakah nilainya ada.k
adalah koin karenac
merupakan kata yang dilindungi undang-undang di R. Dapat memeriksa beberapa nilai sekaligus.Cobalah online!
sumber
c(T,F)
dengan!0:1
, danrep(list(!0:1),length(k))
olehlapply(k,function(x)!0:1)
Map(function(x)!0:1,k)
Japt , 7 byte
Cobalah online! Keluaran
0
untuk falsy, bilangan bulat positif untuk kebenaran.Penjelasan
sumber
Python 3 , 52 byte
5 byte berkat ovs.
Cobalah online!
sumber
Ruby , 39 byte
Mengembalikan
nil
sebagai nilai falsy, dan nilai koin terkecil dalam daftar yang menjadikan angka sebagai benar (semua angka benar di Ruby).Berhati-hatilah, bagaimanapun, bahwa algoritma ini sangat lambat, dengan
O(C!)
kompleksitas waktu, di manaC
panjang daftar koin. Ini akhirnya selesai, tetapi sebagian besar kasus uji akan time out pada sebagian besar penerjemah onlinef(UK_POUND, 5)
.Ini adalah versi 41-byte yang selesai jauh lebih cepat dengan menambahkan kondisi akhir tambahan, dan jauh lebih sulit untuk benar-benar kehabisan waktu
Cobalah online!
sumber
Utilitas Bash + GNU,
5639Daftar denominasi input (tidak disortir) diberikan sebagai daftar yang dipisahkan koma. Daftar input dan nilai diberikan sebagai parameter baris perintah.
Output yang diberikan dalam bentuk kode pengembalian shell. Periksa dengan
echo $?
setelah menjalankan skrip.0
berarti jujur,1
berarti palsu.Cobalah online .
printf %$2s
menghasilkan serangkaianvalue
spasi"^ {${1//,/\}? {}}?$"
adalah ekspansi shell yang memperluas daftar denominasi ke seperti regex^ {1}? {2}? {5}? {10}? ... $
. Ternyataegrep
mesin regex cukup pintar untuk mencocokkan dengan benar, terlepas dari apa urutan denominasiegrep
memeriksa apakah string spasi cocok dengan regexsumber
C, 66 byte
Lihat berhasil di sini .
C, 53 byte
Varian ini menggunakan larik koin, yang mengalahkan tujuan dari masalah ini, karena turun ke pengurangan sederhana.
Argumen pertama adalah susunan koin, yang kedua adalah jumlah koin, dan yang ketiga adalah nilainya.
C, 48 byte
Alternatif untuk varian sebelumnya. Diasumsikan bahwa susunan koin dapat dibalik dan nol diakhiri.
sumber
Pyth , 6 byte
Suite uji.
sumber
CJam ,
1817 byteCobalah online!
Penjelasan
sumber
C (gcc) , 91 byte
Cobalah online!
sumber
PHP, 70 Bytes
mencetak 1 untuk true dan nothing for false
Cobalah online!
sumber
Oktaf, 39 byte
Fungsi anonim yang mengambil array nilai koin sebagai argumen pertama dan integer target sebagai argumen kedua, dan mengembalikan benar atau salah.
Cobalah online!
sumber
Mathematica, 42 byte
memasukkan
sumber