Python 3 , 113 62 byte
for i in[1]*3:x|={a+b for a in x for b in x}
while{i+1}&x:i+=1
Berikut x
adalah input sebagai seperangkat int, dan i
merupakan output.
(Terima kasih: Erik the Outgolfer, Mr. Xcoder, Lynn)
Menandai
sumber
sumber
x=0,*x
menghemat 1 byte. Lebih baik lagi,x+=0,
hemat 2.Jawaban:
Jelly , 12 byte
Cobalah online!
Diperlukan waktu rata-rata ~ 3,7 detik untuk menjalankan semua kasus uji pada TIO di ponsel saya, sehingga sangat cepat.
Penjelasan
sumber
Haskell,
5650 byteCobalah online!
Pendekatan brute force. Tambahkan
0
ke daftar koin dan coba semua kombinasi 8 pilihan. Temukan nomor pertaman
yang tidak sama dengan jumlah dari setiap pengambilan dan pengembaliann-1
.Memakan waktu sekitar 5m30 untuk
[1, 2, 5, 13, 34, 89, 233, 610]
perangkat keras laptop saya yang berusia 7 tahun.Edit: -6 byte terima kasih kepada @ Ørjan Johansen
Versi yang lebih pendek (-2 byte, sekali lagi terima kasih kepada @ Ørjan Johansen)
Haskell, 48 byte
tetapi secara signifikan menggunakan lebih banyak memori dan menjalankan paging yang berat pada mesin saya dan tidak selesai "dalam beberapa menit".
sumber
mapM(0:)$c<$c
. (SebenarnyamapM(:0:c)c
seharusnya bekerja, tetapi time out pada TIO untuk test case yang diberikan.)Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Żṗ8§ḟ’$Ṃ
menghemat satu byte, tetapi saya tidak yakin apakah 8,5 menit dihitung sebagai beberapa .Bahasa Wolfram (Mathematica) , 53 byte
Cobalah online!
sumber
JavaScript (ES6),
100 88 8076 byteIni pada dasarnya adalah pencarian kasar, tetapi ditingkatkan dengan pemangkasan untuk mempercepatnya. Waktu eksekusi rata-rata untuk kasus uji hampir 1 detik pada TIO.
Mengasumsikan bahwa array input diurutkan dari tertinggi ke terendah.
Cobalah online!
Berkomentar
sumber
Python 2 , 145 byte
Cobalah online!
sumber
Pari / GP , 57 byte
Cobalah online!
sumber
Python 2 ,
125115111 byteCobalah online!
Mengharapkan daftar bilangan bulat sebagai input.
Penjelasan:
sumber
Perl6,
656341 byte (3937 karakter)Cobalah online!
Ini adalah blok anonim yang melewati data sebagai array. Ini
(0,|@_)
adalah cara cepat untuk menambahkan0
ke@_
, dan meskipun itu dilakukan dua kali, itu masih sedikit lebih pendek daripada@_.push: 0;
yang kemudian membutuhkan ruang setelah_
. Ini adalah pendekatan brute force yang sedikit menonjolkan fakta bahwa itu adalah 8 kombinasi. Setelah menambahkan silang, daftar anonim dibuat untuk nilai berurutan. Dengan operator matematika, daftar mengevaluasi panjangnya, sehingga -1 menarik tugas ganda: menghitung 0 dan memaksa ke Int.Ini dapat mengambil waktu manis, tapi dengan mengubah salah satu atau kedua
(0,|@_)
untuk(0,|@_.unique)
sebelum pertamafor
itu dapat dipercepat jauh. Itu menambah +7 (runtime <60s) atau +14 (runtime <10s) ke skor jika Anda merasa yang pertama terlalu lambat (saya melakukan ini untuk kode tertaut untuk menghindari waktu habis setelah 60 detik).Sunting: Bergabung dalam komentar meningkatkannya (ide yang sama, menambahkan silang, lalu mengembalikan hasil berturut-turut terakhir) ke 39 karakter yang menakjubkan (41 byte):
Cobalah online!
Tabulasi terakhir tidak membutuhkan 0, menyimpan beberapa byte dengan hanya perlu menambahkan 0 sekaligus. The
xx 3
meniru untuk loop (masih keju pada koin menjadi kekuatan 2). Thefirst
sub mengembalikan nomor pertama dalam daftar tak terbatas0..*
(^Inf
mungkin juga, tapi tidak menghemat ruang) yang+1
bukan anggota dari daftar ditambahkan lintas. Seperti milik saya, ini lambat, jadi tambahkan +7 untukunique
setelah yang pertama sama dengan jika Anda merasa itu terlalu lambat untuk pedoman.sumber
unique
ini tidak diperlukan, tetapi mempercepatnyaxx
. Saya tahu harus ada cara untuk melakukan tabulasi akhir dengan cara yang jauh lebih pendek menggunakan fungsi yang ditetapkan, tetapi otak saya tidak berfungsi.xx 1
harusxx 3
^∞
(1...*∉@_)-1
daripada menggunakanfirst
, (yang saya sadari adalah metode yang sama yang saya gunakan di sini )JavaScript (Node.js) ,
171145115 byteCobalah online! Port of @ Mark's Python 3 menjawab. 108 byte di Firefox 30-57:
sumber
Bahasa Wolfram (Mathematica) , 46 byte
Cobalah online!
Pendekatan brute force: memeriksa bilangan bulat yang menghitung ke atas hingga mencapai nilai yang tidak dapat dibayar dalam 8 koin. Sangat, sangat lambat (tio times out), tapi saya cukup yakin kondisinya benar.
sumber
Bersih , 161 byte
Cobalah online!
sumber