Inspirasi untuk ini teka-teki kode golf adalah Jembatan dan Torch masalah , di mana d orang pada awal jembatan semua harus menyeberang dalam jumlah sedikit waktu.
Tangkapannya adalah bahwa paling banyak dua orang dapat menyeberang sekaligus, jika tidak jembatan akan hancur karena beratnya, dan kelompok hanya memiliki akses ke satu obor, yang harus dibawa untuk menyeberangi jembatan.
Setiap orang di seluruh teka-teki memiliki waktu yang ditentukan untuk berjalan melintasi jembatan. Jika dua orang saling bersilangan, pasangan berjalan selambat orang paling lambat.
Tidak ada jumlah orang yang harus menyeberangi jembatan; solusi Anda HARUS bekerja untuk nilai d .
Anda tidak perlu menggunakan input standar untuk masalah ini, tetapi demi menjelaskan masalah, saya akan menggunakan format input dan output berikut untuk penjelasan. Angka pertama, d , adalah jumlah orang di awal jembatan. Kemudian, kode akan memindai angka d , masing-masing mewakili kecepatan seseorang.
Output kode akan menjadi jumlah waktu TERAKHIR yang diperlukan untuk melintasi semua orang dari awal jembatan ke ujung jembatan, sementara memenuhi kriteria yang dijelaskan sebelumnya.
Berikut adalah beberapa kasus input dan kasus output dan penjelasan untuk kasus input pertama. Terserah kepada Anda untuk memperoleh algoritma dari informasi ini untuk menyelesaikan masalah dalam byte kode sesedikit mungkin.
memasukkan
4
1 2 5 8
keluaran
15
Untuk mencapai hasil ini, orang-orang harus menyeberang dengan cara berikut.
A and B cross forward (2 minutes)
A returns (1 minute)
C and D cross forward (8 minutes)
B returns (2 minutes)
A and B cross forward (2 minutes)
Berikut ini adalah test case lain untuk memandu Anda.
memasukkan
5
3 1 6 8 12
keluaran
29
Aturan:
- Asumsikan bahwa input tidak akan diurutkan, dan Anda harus melakukannya sendiri (jika perlu)
- Jumlah orang dalam puzzle tidak tetap pada 4 (N> = 1)
- Setiap kelompok dan persilangan individu harus memiliki obor. Hanya ada satu obor.
- Setiap grup harus terdiri dari maksimal hanya 2 orang!
- Tidak, Anda tidak boleh melompat dari jembatan dan berenang ke sisi lain. Tidak ada trik lain seperti ini;).
1 3 4 5
, yang seharusnya mengembalikan 14 bukan 15.1 4 5 6 7
memiliki masalah serupa. 25 vs 26N >= 2
orang (artinya, anehnya itu pekerjaan ekstra untuk menangani kasus sepele "1 orang perlu menyeberang"), sehingga beberapa klarifikasi tentang hal ini akan menjadi besar. Terima kasih sebelumnya.Jawaban:
Python 3,
10099 bytesolusi rekursif
Terima kasih kepada @xnor untuk makalah ini
Terima kasih kepada @ lirtosiast simpan 2 byte, @movatica simpan 1 byte dan @gladed menunjukkan bahwa solusi saya sebelumnya tidak berfungsi
gunakan trik berikut untuk mengevaluasi sesuatu dalam fungsi lambda di
s.sort() or s
sini kita menghitung sort dan mengembalikan hasil tess.sort()or len(s)>3
Tidak disatukan
Hasil
sumber
len(s)==2
kelen(s)<3
s[0]*(len(s)==2)
bukan(s[0]*len(s)==2)
dengan bugf([1]) -> 0
itu sebabnya kami tidak bisa menggantinya dengan<3
terima kasihA5:22
Python 2,
11911411211911010095 byteSaya disarankan untuk memisahkan jawaban saya.
Solusi penggunaan
Theorem 1, A2:09
makalah ini xnatau ditautkan . Mengutip makalah (mengubahnya menjadi pengindeksan-nol):The difference between C_{k-1} and C_k is 2*t_1 - t_0 - t_{N-2k}.
Tidak melakukan pelanggaran:
sumber
Ruby,
9413397961019699 byteSaya disarankan untuk memisahkan jawaban saya.
Ini adalah solusi yang didasarkan pada algoritma yang dijelaskan dalam
A6:06-10
dari makalah ini di Jembatan dan Torch Masalah .Sunting: Memperbaiki bug
a=s[0]
yang belum didefinisikan saata
dipanggil di akhir jikas.size <= 3
.Tidak melakukan pelanggaran:
sumber
Scala,
113135 (darnit)Agak tidak disatukan:
Penguji:
Tidak hebat secara umum, tapi mungkin tidak buruk untuk bahasa yang sangat diketik. Dan bersyukur kepada xnor karena telah menemukan case yang tidak saya tangkap.
sumber
Ruby,
1049593 byteSaya disarankan untuk memisahkan jawaban saya.
Ini adalah solusi berdasarkan saya solusi Python 2 dan
Theorem 1, A2:09
dari makalah ini di Jembatan dan Torch Masalah .Tidak melakukan pelanggaran:
sumber