Tugas
Diberikan array bilangan bulat non-negatif a
, tentukan jumlah minimum lompatan ke kanan yang diperlukan untuk melompat "di luar" larik, mulai dari posisi 0, atau kembalikan nol / nol jika tidak memungkinkan untuk melakukannya.
Sebuah lompatan dari indeks i
didefinisikan sebagai peningkatan indeks array oleh paling a[i]
.
Sebuah luar melompat adalah lompatan di mana indeks yang dihasilkan dari melompat i
keluar-of-batas untuk array, sehingga untuk mengindeks berbasis 1 i>length(a)
, dan untuk mengindeks 0 berbasis, i>=length(a)
.
Contoh 1
Pertimbangkan Array = [4,0,2,0,2,0]
:
Array[0] = 4 -> You can jump 4 field
Array[1] = 0 -> You can jump 0 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 0 -> You can jump 0 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 0 -> You can jump 0 field
Jalur terpendek dengan "melompat" untuk keluar batas memiliki panjang 2
:
Kita bisa melompat dari 0->2->4->outside
yang memiliki panjang 3
tetapi 0->4->outside
memiliki panjang 2
sehingga kita kembali 2
.
Contoh 2
Misalkan Array=[0,1,2,3,2,1]
:
Array[0] = 0 -> You can jump 0 fields
Array[1] = 1 -> You can jump 1 field
Array[2] = 2 -> You can jump 2 field
Array[3] = 3 -> You can jump 3 field
Array[4] = 2 -> You can jump 2 field
Array[5] = 1 -> You can jump 1 field
Dalam kasus ini, tidak mungkin untuk melompat keluar dari array, jadi kita harus mengembalikan nilai nol / null atau non deterministik seperti apa ∞
.
Contoh 3
Misalkan Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Kami dapat langsung melompat dari indeks 0 di luar array, hanya dengan satu lompatan, jadi kami kembali 1
.
Edit:
Karena beberapa pertanyaan tentang nilai pengembalian: Pengembalian ∞
benar-benar valid, jika tidak ada kesempatan untuk melarikan diri. Karena, jika ada kesempatan, kita bisa mendefinisikan angka itu.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang!
[2, 3, 1, 1]
.Jawaban:
Sekam , 9 byte
Kembali
Inf
ketika tidak ada solusi. Cobalah online!Penjelasan
Nilai pengembalian default Hus sangat berguna di sini.
Jika daftar input kosong, maka
Γ
tidak dapat mendekonstruksi, sehingga mengembalikan nilai integer default, 0. Jika elemen pertama adalah 0, maka hasilnyaMo₀↓ŀ
adalah daftar kosong, yang▼
mengembalikan infinity.sumber
Haskell ,
7058 byteCobalah online!
EDIT: -12 byte terima kasih kepada @Esolanging Fruit dan OP yang telah memutuskan untuk memungkinkan tak terbatas!
Kembali
Infinity
ketika tidak ada solusi yang membuat solusi jauh lebih sederhana. Karena kita hanya bisa bergerak maju, lihatf
saja kepala daftar dan jatuhkan1<=k<=x
item dari daftar dan berulang. Kemudian kami hanya menambahkan 1 untuk setiap solusi panggilan rekursif yang ditemukan dan mengambil minimum. Jika head adalah 0, hasilnya akan menjadi tak terbatas (karena kita tidak bisa bergerak tidak ada solusi). Karena1+Infinity==Infinity
hasil ini akan dibawa kembali ke penelepon. Jika daftar kosong itu berarti kami telah meninggalkan array sehingga kami mengembalikan biaya 0.sumber
Infinity
sebagai nilai nol (yang belum diklarifikasi oleh OP).Python 2 , 124 byte
Cobalah online!
-11 byte terima kasih kepada Tn. Xcoder
-12 byte terima kasih kepada Tn. Xcoder dan Rod
sumber
print(f([4,1,0,4,1,1,1]))
Anda kembali3
, tetapi harus2
Suka[0] -> [3] -> outside
-~
triknya, lupakan yang itu.APL (Dyalog Classic)ngn / apl , 18 byteEDIT: beralih ke penerapan APL saya sendiri karena Dyalog tidak mendukung ketidakterbatasan dan pembuat tantangan tidak mengizinkan angka terbatas untuk bertindak sebagai "nol"
Cobalah online!coba di halaman demo ngn / aplkembali tanpa solusi
⌊/⍬
∞
sumber
?
?2 3 1 1
harus dipetakan ke2
0N
yang merupakan bilangan bulat k's; jika Anda tertarik, saya dapat menjelaskan lebih lanjut di ruang aplHaskell , 45 byte
Cobalah online!
Output
Infinity
ketika tidak mungkin. Argumen bantu tambahan untuk%
melacak berapa banyak ruang yang dapat kita pindahkan dalam hop kita saat ini.sumber
Perl 5 ,
5653 byteTermasuk
+1
untuka
Hanya kode:
Cobalah online!
sumber
Perl 5 , 80 byte
Cobalah online!
sumber
Jelly , 32 byte
Cobalah online!
Ini terlalu lama ...
sumber
Jelly ,
1918 byteCobalah online!
Penjelasan
sumber
JavaScript ES6 , 118 byte
Cobalah online!
Melakukan pencarian luas pertama array untuk menemukan jalur terpendek.
sumber
C (gcc) , 80 byte
Cobalah online!
sumber
Julia 0,6 , 79 byte
Mengembalikan jumlah lompatan atau
Inf
jika Anda tidak dapat melarikan diri. Secara rekursif lihat elemen pertama dan kembaliInf
atau1
tergantung pada apakah Anda dapat melarikan diri, jika tidak tambahkan1
ke solusi terpendek untuk array terpotong yang mewakili setiap lompatan yang valid. Aliran kontrol dilakukan dengan dua pernyataan ternary sepertitest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Cobalah online!
sumber
C # (.NET Core) , 97 byte
Cobalah online!
Mengembalikan 0 jika tidak ada jalur yang ditemukan.
Penjelasan
sumber
Python 2 ,
837372 byte-10 Terima kasih kepada @ user202729
-1 berkat @JonathanFrech
Cobalah online! Mengembalikan tak terhingga untuk nilai nol.
sumber
and min(...)+1for
bisaand-~min(...)for
.