Terinspirasi oleh We do tower hopping dan terkait dengan 2D Maze Minus 1D
pengantar
Tugas Anda adalah menemukan jalur terpendek untuk keluar dari labirin array mengikuti aturan yang ditentukan.
Tantangan
Array 1D a dengan n elemen dapat dianggap sebagai labirin yang terdiri dari n titik, di mana titik dengan indeks k terhubung ke titik-titik dengan k + a [ k ] dan k - a [ k ] dengan cara satu arah. Dengan kata lain, Anda dapat melompat maju atau mundur persis langkah [ k ] dari titik dengan indeks k . Poin dengan indeks di luar batas array dianggap di luar labirin.
Untuk menggambarkan ini, pertimbangkan array berikut,
[0,8,5,9,4,1,1,1,2,1,2]
Jika kita berada di elemen ke-5 sekarang, karena elemennya adalah 4, kita dapat melompat 4 langkah ke depan ke elemen 9, atau 4 langkah mundur ke elemen 1. Jika kita melakukan yang terakhir, kita berakhir dengan elemen 0, yang menunjukkan tidak ada gerakan lebih lanjut yang mungkin. Jika kita melakukan yang pertama, karena elemen ke-9 adalah 2, kita dapat memilih untuk melompat ke elemen ke-11, yang merupakan 2, dan kemudian kita dapat melompat lagi ke "elemen ke-13", yang berada di luar batas dari array dan dianggap sebagai jalan keluar ke labirin.
Jadi jika kita mulai dari elemen di tengah, salah satu cara untuk keluar dari labirin adalah melompat 1 langkah mundur, 4 langkah maju, 2 langkah maju dan 2 langkah maju, yang dapat dinyatakan sebagai array [-1,4,2,2]
. Atau Anda dapat mengekspresikannya dengan array [4,8,10,12]
yang mencatat indeks berbasis nol dari semua poin perantara dan akhir (indeks berbasis 1 juga baik-baik saja), atau hanya tanda-tanda [-1,1,1,1]
,.
Lolos dari labirin dari ujung indeks rendah juga OK.
Menggunakan notasi pertama dan mulai dari elemen yang sama, [1,1,1,2,2]
juga merupakan solusi tetapi tidak optimal karena ada 5 langkah, bukannya 4.
Tugasnya adalah untuk menemukan jalur terpendek untuk keluar dari labirin array dan menampilkan jalur. Jika ada lebih dari satu jalur optimal, Anda dapat menampilkan salah satu atau semuanya. Jika tidak ada solusi, Anda harus menampilkan nilai palsu yang dipilih oleh Anda yang dapat dilihat dari jalur yang valid (tidak menghasilkan keluaran sama sekali juga OK).
Untuk mempermudah, jumlah elemen dalam array selalu angka ganjil dan kami selalu mulai dari elemen di tengah.
Uji kasus
Kasing uji menggambarkan berbagai bentuk keluaran, tetapi Anda tidak terbatas pada ini.
Input
Output
[0,8,5,9,4,1,1,1,2,1,2]
[-1,4,2,2]
[2,3,7,1,2,0,2,8,9]
[2,9] (or [2,-5] or [[2,9],[2,-5]])
[0,1,2,2,3,4,4,4,3,2,2,3,0]
[1,-1,1,1]
[0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0]
[]
Spesifikasi
Anda dapat menulis fungsi atau program lengkap.
Array hanya berisi bilangan bulat tidak negatif.
Anda dapat mengambil input dan output melalui formulir standar apa pun , tetapi harap tentukan dalam jawaban Anda formulir mana yang Anda gunakan.
Ini adalah kode-golf , jumlah byte terendah yang menang.
Seperti biasa, celah default berlaku di sini.
[1,1,1,-1]
bukannya [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
, keluaran[[-1,4,2,2]]
)