Pertanyaan pertama di sini, jangan meneriaki saya apakah ini duplikat atau tantangan yang buruk.
pengantar
Saya memikirkan tantangan ini sendiri, dan itu tampaknya menjadi teka-teki dasar yang bagus untuk pegolf kode pemula. Ini juga dapat membantu saya memutuskan bahasa golf kode mana yang akan saya pelajari.
Tantangan
Diberikan array bilangan bulat yang kurang dari atau sama dengan n
, menghasilkan atau mengembalikan jumlah angka minimum dari array yang dijumlahkan dengan tepat n
.
Anda dapat memilih untuk menulis fungsi atau program lengkap.
Memasukkan
Anda bisa berasumsi dengan aman 0 <= n < 2^31
.
Ambil array atau daftar apa pun ( vector
untuk C ++ atau Java LinkedList
diizinkan), beserta n
parameter opsional length
, yang menentukan panjang array.
Anda juga dapat mengambil input sebagai string yang dipisahkan spasi, dipisahkan n
oleh koma atau spasi:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
jika lebih mudah.
Keluaran
Keluaran, atau kembalikan jumlah angka minimum dari array yang jumlahnya tepat n
. Menggunakan contoh di atas:
1 5 7 3 7 3 6 3 2 6 3,10
Program Anda harus mencetak:
2
karena jumlah minimum angka yang dijumlahkan 10
adalah 2
( 7
dan 3
).
Dalam hal tidak ada solusi, cetak atau kembalikan negatif,, 0
"Tidak ada solusi" (meskipun itu tidak akan pintar), ∞
(seperti yang disarankan), atau nilai palsu lainnya, dengan pengecualian string kosong.
Contoh Input dan Output
Memasukkan:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Keluaran:
2
3
-1
Mencetak gol
Ini adalah kode-golf, jadi kode terpendek dalam byte menang.
Jawaban teratas akan diterima pada Natal.
sumber
false
untuk kasus tanpa solusi?Jawaban:
Pyth,
1211 byteIni diambil
n
sebagai baris input pertama dan daftar pada baris kedua.Coba di sini .
sumber
Japt ,
302118 byteTernyata ada metode yang jauh lebih efisien. ;)
Uji secara online! (Catatan:
n-
telah diubah menjadin@X-Y}
karena alasan kompatibilitas)Ini mengambil input sebagai array yang dipisahkan oleh spasi atau koma, diikuti oleh angka. Output
undefined
untuk kasus uji tanpa solusi.Saya tidak percaya saya tidak memikirkan versi ini ketika saya awalnya menulis ini ...
Beberapa optimasi telah dilakukan sejak saat itu yang berguna di sini:
U
pada awal program biasanya dapat ditinggalkan.Ã
adalah jalan pintas untuk}
.n
sekarang mengurutkan angka dengan benar secara default.Masing-masing membutuhkan satu byte, dengan total 15:
Uji secara online!
sumber
Mathematica,
7365 byteFungsi murni, kembali
∞
jika tidak ada solusi.sumber
Python 3, 128 byte
Ini tidak golf seperti yang saya inginkan, tapi saya akan mengerjakannya nanti.
sumber
Mathematica, 45 byte
sumber
CJam, 34 byte
Cobalah online . Format input adalah jumlah yang diikuti oleh daftar nilai, misalnya:
Perhatikan bahwa ini akan menimbulkan pengecualian jika tidak ada solusi yang ditemukan. Pengecualian pergi ke stderr ketika CJam dijalankan dari baris perintah, dan hasil yang benar (
0
) masih dicetak ke stdout. Jadi ini memenuhi konsensus yang ditetapkan di Haruskah pengajuan diizinkan untuk keluar dengan kesalahan?Kode mungkin terlihat lebih panjang dari yang Anda harapkan. Alasan utama adalah bahwa CJam tidak memiliki built-in untuk menghasilkan kombinasi. Atau setidaknya itu alasan saya, dan saya berpegang teguh pada itu.
Penjelasan:
sumber
JavaScript (ES6), 84 byte
Penjelasan
Mengambil
Array
dariNumber
s danNumber
sebagai argumen. Mengembalikan sejumlahInfinity
jika tidak ada hasil. Ini adalah fungsi rekursif yang mengurangin
dan menghapus setiap elemen dari array satu per satu hinggan == 0
.Uji
Tes ini set
m
untukInfinity
kemudian bukan sebagai argumen default untuk membuatnya bekerja di Chrome (bukan hanya Firefox).Tampilkan cuplikan kode
sumber
Haskell, 72 byte
Kembali
0
jika tidak ada solusi.Contoh penggunaan:
10 # [1,5,7,3,7,3,6,3,2,6,3]
->2
.Temukan semua sub-daftar dari daftar input
l
yang memiliki jumlahn
. Ambil panjang masing-masing sub-daftar tersebut dan urutkan. Tambahkan0
dan ambil elemen pertama.Jika daftar tunggal diperbolehkan untuk output, misalnya
[2]
, kita bisa menghemat 7 bytes:n#l=minimum[length x|x<-subsequences l,sum x==n]
. Jika tidak ada solusi, daftar kosong[]
dikembalikan.sumber