Saya bekerja di toko roti yang menyajikan roti gandum, gandum hitam, gandum, gandum, dan Perancis, tetapi tukang roti itu agak aneh - ia menumpuk roti secara acak, dan kadang-kadang hanya meninggalkan beberapa rak di ujung kosong.
Setiap hari, pelanggan yang sama masuk dan meminta satu roti untuk setiap roti, tetapi masalahnya adalah, dia germophobe, jadi ketika saya mengisi tasnya, saya tidak bisa mengambil roti dari dua rak yang berdekatan dalam pemilihan berurutan.
Dibutuhkan satu detik untuk berjalan di antara rak-rak yang berdekatan. Ini toko yang sibuk; untuk setiap konfigurasi acak roti, saya ingin meminimalkan waktu yang diperlukan untuk mendapatkan satu dari setiap roti yang unik. Saya bisa mulai dan berakhir di rak mana pun.
Jika pemesanan hari ini adalah W B W G F R W
, jalur yang mungkin adalah 0, 3, 5, 1, 4
, selama total 12 detik:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12
( 1, 2, 3, 4, 5
Tidak berfungsi, karena roti diambil secara berurutan dari rak yang berdekatan.)
Jika itu B W B G B F B R B W B F
, jalan yang mungkin adalah 1, 3, 5, 7, 10
, untuk total 9 detik.
Manajer selalu memastikan ada solusi yang memungkinkan, jadi saya tidak perlu khawatir tentang mendapatkan input yang buruk. Dia biasanya mengirim saya pesanan dalam file, tetapi jika saya mau, saya bisa mengetiknya ke STDIN atau membacanya dengan cara yang berbeda. Saya ingin program untuk mencetak indeks jalur terbaik, serta waktunya, sesuai dengan aturan I / O default .
Pendeknya:
- 5 jenis roti.
- Pesanan roti muncul sebagai string pesanan acak dan panjang.
- Harus memilih salah satu dari setiap roti unik.
- Tidak dapat membuat pilihan berurutan yang berdekatan.
- Minimalkan jarak antara indeks pemilihan.
- Tidak perlu khawatir tentang input yang tidak valid.
- Aturan I / O standar berlaku.
Ini adalah kode-golf , kemenangan jumlah byte terpendek.
0+3+5+1+4=13
tapi1+3+5+7+10=26
tidak9
.'WBWG FRW'
input yang valid juga?Jawaban:
JavaScript (ES6), 114 byte
Disimpan 1 byte berkat @Oliver
Mengambil input sebagai array karakter. Menghasilkan string yang dipisahkan koma di mana nilai pertama adalah total waktu dan yang berikutnya menggambarkan path.
Cobalah online!
Berkomentar
sumber
Python 2 ,
212210 byteCobalah online!
2 byte thx ke Jonathan Frech .
sumber
if len(...)==5and all(...)
bisaif(len(...)==5)&all(...)
untuk menyimpan dua byte.