Zadanie
Biorąc pod uwagę tablicę liczb całkowitych nieujemnych a
, określ minimalną liczbę skoków w prawo wymaganych do przeskoku „poza” tablicę, zaczynając od pozycji 0, lub zwróć zero / null, jeśli nie jest to możliwe.
Skok z indeksu i
określa się zwiększenie indeksu tablicy co najwyżej a[i]
.
Skoku na zewnątrz jest skok gdzie indeks wynikające ze skokiem i
znajduje się aut do tablicy, to do indeksowania 1 opartej na i>length(a)
i do indeksowania 0 opartym i>=length(a)
.
Przykład 1
Zastanów się 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
Najkrótsza ścieżka „skakania”, by wyjść poza boisko, ma długość 2
:
Możemy skakać z 0->2->4->outside
której ma długość, 3
ale 0->4->outside
ma długość, 2
więc wracamy 2
.
Przykład 2
Załóżmy 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
W takim przypadku nie można wyskoczyć poza tablicę, dlatego powinniśmy zwrócić zero / null lub dowolną niedeterministyczną wartość jak ∞
.
Przykład 3
Załóżmy Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Możemy bezpośrednio skoczyć z indeksu 0 poza tablicę za pomocą jednego skoku, więc wracamy 1
.
Edytować:
Ze względu na wiele pytań dotyczących wartości zwracanej: Zwrot ∞
jest całkowicie ważny, jeśli nie ma szans na ucieczkę. Ponieważ, jeśli istnieje szansa, możemy zdefiniować tę liczbę.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach!
[2, 3, 1, 1]
.Odpowiedzi:
Łuska , 9 bajtów
Zwraca,
Inf
gdy nie ma rozwiązania. Wypróbuj online!Wyjaśnienie
Przydają się tutaj domyślne wartości powrotu Husky.
Jeśli lista wejściowa jest pusta,
Γ
nie można jej zdekonstruować, więc zwraca domyślną wartość całkowitą, 0. Jeśli pierwszym elementem jest 0, wynikiemMo₀↓ŀ
jest pusta lista, na której▼
zwraca nieskończoność.źródło
Haskell ,
7058 bajtówWypróbuj online!
EDYCJA: -12 bajtów dzięki @Esolanging Fruit i OP za decyzję o zezwoleniu na nieskończoność!
Zwraca,
Infinity
gdy nie ma rozwiązania, które znacznie upraszcza rozwiązanie. Ponieważ możemy poruszać się tylko do przodu,f
wystarczy spojrzeć na nagłówek listy, upuścić1<=k<=x
elementy z listy i powtórzyć. Następnie dodajemy po 1 do każdego rozwiązania znalezione połączenia rekurencyjne i przyjmujemy minimum. Jeśli głowa ma wartość 0, wynikiem będzie nieskończoność (ponieważ nie możemy się ruszyć, nie ma rozwiązania). Ponieważ1+Infinity==Infinity
ten wynik zostanie przeniesiony z powrotem do dzwoniących. Jeśli lista jest pusta, oznacza to, że opuściliśmy tablicę, więc zwracamy koszt 0.źródło
Infinity
jako wartość zerowa (czego OP jeszcze nie wyjaśnił).Python 2 , 124 bajty
Wypróbuj online!
-11 bajtów dzięki Mr. Xcoder
-12 bajtów dzięki Mr. Xcoder i Rod
źródło
print(f([4,1,0,4,1,1,1]))
Ci się wrócić3
, ale powinno być2
jak[0] -> [3] -> outside
-~
podstęp, zapomniałem o tym.APL (Dyalog Classic)ngn / apl , 18 bajtówEDYCJA: przełączono na moją własną implementację APL, ponieważ Dyalog nie obsługuje nieskończoności, a autor wyzwania nie pozwala, by skończone liczby działały jako „zerowe”
Wypróbuj online!spróbuj na stronie demo ngn / aplzwraca brak rozwiązania
⌊/⍬
∞
źródło
?
?2 3 1 1
powinno być mapowane na2
0N
który jest liczbą całkowitą k null; jeśli jesteś zainteresowany, mogę wyjaśnić dalej w pokoju aplHaskell , 45 bajtów
Wypróbuj online!
Wysyła,
Infinity
gdy jest to niemożliwe. Pomocniczy lewy argument do%
śledzenia, o ile więcej przestrzeni możemy przesunąć w naszym bieżącym przeskoku.źródło
Perl 5 ,
5653 bajtówObejmuje
+1
dlaa
Tylko kod:
Wypróbuj online!
źródło
Perl 5 , 80 bajtów
Wypróbuj online!
źródło
Galaretka , 32 bajty
Wypróbuj online!
To jest po prostu za długo ...
źródło
Galaretka ,
1918 bajtówWypróbuj online!
Wyjaśnienie
źródło
JavaScript ES6 , 118 bajtów
Wypróbuj online!
Wykonuje pierwsze wyszukiwanie szerokości tablicy, aby znaleźć najkrótszą ścieżkę.
źródło
C (gcc) , 80 bajtów
Wypróbuj online!
źródło
Julia 0.6 , 79 bajtów
Zwraca liczbę skoków lub
Inf
jeśli nie możesz uciec. Spójrz rekurencyjnie na pierwszy element i albo wróć,Inf
albo w1
zależności od tego, czy możesz uciec, w przeciwnym razie dodaj1
do najkrótszego rozwiązania dla przyciętych tablic reprezentujących każdy prawidłowy skok. Przepływ sterowania odbywa się za pomocą dwóch instrukcji trójskładnikowych, takich jaktest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Wypróbuj online!
źródło
C # (.NET Core) , 97 bajtów
Wypróbuj online!
Zwraca 0, jeśli nie znaleziono ścieżki.
Wyjaśnienie
źródło
Python 2 ,
837372 bajty-10 dzięki @ user202729
-1 dzięki @JonathanFrech
Wypróbuj online! Zwraca nieskończoność dla wartości pustej.
źródło
and min(...)+1for
może byćand-~min(...)for
.