Deskripsi Masalah
Kita semua suka Twix (karena ini adalah permen terbaik), tapi ini Halloween pertama anak-anak --- kita harus mengambil setidaknya satu dari setiap jenis permen untuk mereka. Setiap Halloween, semua penghuni Numberline avenue mengirimkan email yang mengatakan jenis permen apa yang akan mereka bagikan tahun ini.
Oh! Dan kita hidup di dunia 1D.
Menjadi sangat malas dalam beberapa hal dan tidak dalam hal lain, kami telah membuat peta rumah-rumah yang memberikan posisi mereka di sepanjang jalan. Kami juga mencatat jenis permen yang mereka miliki. Inilah peta yang kami buat untuk tahun ini:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Demi kaki kecil anak-anak, kita perlu mencari jalan kaki paling pendek mulai dari rumah mana pun di lingkungan itu untuk mengumpulkan setidaknya satu dari setiap jenis permen.
Contohnya
Atas permintaan beberapa pengguna (termasuk Shaggy), saya akan memberikan beberapa contoh yang berhasil. Semoga ini jelas. :) Masukan:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Keluaran:
[1, 2, 3]
Peta dan solusi lain ...
Memasukkan:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
Keluaran :
[0, 1, 2]
Kita bisa mulai di rumah koordinasi 9 rumah mengumpulkan permen di rumah 6 dan 1. Itu memenuhi kuota permen dengan berjalan 8 unit, tetapi apakah itu solusi terpendek?
Aturan
Entri harus mengambil argumen tunggal terstruktur yang sama dengan contoh dan menampilkan indeks rumah untuk dikunjungi dalam solusi terpendek.
Aturan golf khas kode berlaku: solusi terpendek yang benar dalam bytes menang!
PS Ini adalah pertanyaan wawancara yang diberikan kepada saya oleh salah satu perusahaan teknologi terbesar di dunia. Jika Anda tidak suka golf, coba temukan solusi waktu O (k * n) di mana k adalah jumlah jenis permen dan n adalah jumlah rumah.
Edit
Seperti yang ditunjukkan Jonathon Allan, ada beberapa kebingungan di sekitar apa yang dimaksud dengan "indeks" dalam kasus ini. Kami ingin menampilkan posisi rumah dalam daftar argumen dan bukan koordinatnya di jalur.
Jawaban:
Jelly , 16 byte
Tautan monadik yang menerima input seperti yang dijelaskan dalam daftar yang diurutkan dari rumah Numberline Avenue tertinggi (jika kita perlu menerima pemesanan apa pun, kita dapat menambahkan
Ṣ
) yang menghasilkan jalur terpendek mulai dari rumah bernomor terendah dan perjalanan menyusuri Avenue.Cobalah online!
Jika kita ingin menemukan semua jalur terpendek seperti itu, ganti byte trailing
ÞḢ
,, denganÐṂ
; ini juga 16 byte.Bagaimana?
sumber
Python 2 ,
133130127 byteCobalah online!
sumber
05AB1E , 22 byte
Mengasumsikan angka-angka dalam daftar input disortir dari yang terendah ke yang tertinggi.
Jika lebih dari satu solusi ditemukan, itu akan menampilkan semuanya.
Cobalah online.
Penjelasan:
sumber
Perl 6 , 70 byte
Cobalah online!
sumber
Haskell ,
343372 byteBerkat @ ASCII-only untuk peningkatan, ada juga varian 271 byte yang ia usulkan di komentar :)
Cobalah online!
Tidak disatukan
Percobaan pertama
sumber
Solusi waktu O (k * n), dengan ruang O (k * n)
Dengan demikian, algoritma kami adalah:
sumber