Esinlenen kule atlama ve 2D Labirent Eksi 1D ile ilgili
Giriş
Göreviniz, belirtilen kurallara uyarak bir dizi labirentinden çıkmak için en kısa yolu bulmaktır.
Meydan okuma
1D bir dizi , bir ile N unsurlardan oluşan bir labirent olarak kabul edilebilir N göstergesi olan nokta nokta, k sahip noktalara bağlı k + bir [ k ] ve k - bir [ k tek yönlü bir şekilde]. Başka bir deyişle, ileri veya geri tam olarak atlayabilir bir [ k indeksi ile noktadan] adımlar k . Dizinin sınırları dışında dizini olan noktalar labirent dışında değerlendirilir.
Bunu göstermek için aşağıdaki diziyi göz önünde bulundurun,
[0,8,5,9,4,1,1,1,2,1,2]
Şu anda 5. öğedeysek, öğe 4 olduğu için, 9. öğeye 4 adım veya 1. öğeye 4 adım geriye atlayabiliriz. İkincisini yaparsak, başka hareketin mümkün olmadığını gösteren 0 elementiyle sonuçlanırız. Birincisini yaparsak, 9. element 2 olduğu için, yine 2 olan 11. elemente atlamayı seçebiliriz ve sonra tekrar "13. element" e atlayabiliriz. ve labirente çıkış olarak kabul edilir.
Ortadaki elemandan başlayalım, labirentten çıkmanın bir yolu 1 adım geri, 4 adım ileri, 2 adım ileri ve tekrar 2 adım ileri atlamaktır, bu da dizi olarak ifade edilebilir [-1,4,2,2]
. Alternatif olarak [4,8,10,12]
, tüm ara ve son noktaların sıfır temelli dizinini (1 temelli dizin de iyidir) veya sadece işaretlerini kaydeden dizi ile ifade edebilirsiniz [-1,1,1,1]
.
Labirent düşük dizin ucundan kaçmak da sorun yok.
İlk gösterimi kullanmak ve aynı öğeden başlamak [1,1,1,2,2]
da bir çözümdür, ancak 4 yerine 5 adım olduğundan optimal değildir.
Görev, dizi labirentinden çıkmak ve yolu çıkarmak için en kısa yolu bulmaktır. Birden fazla optimal yol varsa, bunların herhangi birini veya tümünü çıktısını alabilirsiniz. Çözüm yoksa, sizin tarafınızdan seçilen geçerli bir yoldan fark edilebilecek bir falsy değeri çıkarmalısınız (hiç çıktı üretmemek de sorun değildir).
Basit olması için, dizideki öğelerin sayısı her zaman tek bir sayıdır ve her zaman ortadaki öğeden başlarız.
Test senaryoları
Test senaryoları çeşitli çıktı biçimlerini gösterir, ancak bunlarla sınırlı değilsiniz.
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]
[]
gözlük
Bir işlev veya tam bir program yazabilirsiniz.
Dizi yalnızca negatif olmayan tamsayılar içerir.
Herhangi bir standart formdan girdi ve çıktı alabilirsiniz , ancak cevabınızda hangi formu kullandığınızı belirtiniz.
Bu kod golf , en düşük bayt sayısı kazanır.
Her zamanki gibi, burada varsayılan boşluklar uygulanır.
[1,1,1,-1]
yerine [-1,1,1,1]
?
[0,8,5,9,4,1,1,1,2,1,2]
, çıkış[[-1,4,2,2]]
)