Aufgabe
a
Bestimmen Sie bei einem Array nicht negativer Ganzzahlen die Mindestanzahl von Rechtssprüngen, die erforderlich sind, um "außerhalb" des Arrays zu springen, beginnend an Position 0, oder geben Sie null / null zurück, wenn dies nicht möglich ist.
Ein Sprung vom Index i
ist definiert als eine Erhöhung des Array-Index um höchstens a[i]
.
Ein Sprung nach draußen ist ein Sprung, bei dem der aus dem Sprung resultierende Index i
für das Array außerhalb der Grenzen liegt, also für die 1-basierte Indizierung i>length(a)
und für die 0-basierte Indizierung i>=length(a)
.
Beispiel 1
Betrachten Sie 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
Der kürzeste Weg durch "Springen" zum Überschreiten der Grenzen hat Länge 2
:
Wir könnten springen, von 0->2->4->outside
dem Länge hat, 3
aber 0->4->outside
Länge hat, 2
also kehren wir zurück 2
.
Beispiel 2
Nehmen wir an 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
In diesem Fall ist es nicht möglich, aus dem Array herauszuspringen. Wir sollten daher eine Null / Null oder einen beliebigen nicht deterministischen Wert wie zurückgeben ∞
.
Beispiel 3
Nehmen wir an Array=[4]
:
Array[0] = 4 -> You can jump 4 field
Wir können mit nur einem Sprung direkt von Index 0 außerhalb des Arrays springen, also kehren wir zurück 1
.
Bearbeiten:
Aufgrund mehrfacher Fragen zum Rückgabewert: Die Rückgabe ∞
ist vollständig gültig, wenn keine Fluchtmöglichkeit besteht. Denn wenn es eine Chance gibt, können wir diese Zahl definieren.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
[2, 3, 1, 1]
.Antworten:
Schale , 9 Bytes
Gibt zurück,
Inf
wenn keine Lösung vorhanden ist. Probieren Sie es online!Erläuterung
Hier bieten sich die Standard-Rückgabewerte von Husk an.
Wenn die Eingabeliste leer ist,
Γ
kann sie nicht dekonstruiert werden, sodass der standardmäßige ganzzahlige Wert 0 zurückgegeben wird. Wenn das erste Element 0 ist, ist das Ergebnis vonMo₀↓ŀ
eine leere Liste, für die▼
unendlich zurückgegeben wird.quelle
Haskell ,
7058 BytesProbieren Sie es online!
EDIT: -12 Bytes dank @Esolanging Fruit und dem OP für die Entscheidung, Unendlich zuzulassen!
Gibt zurück,
Infinity
wenn es keine Lösung gibt, was die Lösung viel einfacher macht. Da wir uns nur vorwärts bewegen können,f
schaut einfach auf den Kopf der Liste und löscht1<=k<=x
Elemente aus der Liste und wiederholt sich. Dann addieren wir zu jeder gefundenen Lösung einfach 1 und nehmen das Minimum. Wenn der Kopf 0 ist, ist das Ergebnis unendlich (da wir uns nicht bewegen können, gibt es keine Lösung). Da1+Infinity==Infinity
dieses Ergebnis an die Anrufer zurückübertragen wird. Wenn die Liste leer ist, bedeutet dies, dass wir das Array verlassen haben und einen Wert von 0 zurückgeben.quelle
Infinity
als Nullwert zulassen (was das OP noch nicht geklärt hat).Python 2 , 124 Bytes
Probieren Sie es online!
-11 Bytes dank Mr. Xcoder
-12 Bytes dank Mr. Xcoder und Rod
quelle
print(f([4,1,0,4,1,1,1]))
Sie kehren zurück3
, sollten aber2
wie[0] -> [3] -> outside
-~
Trick, den ich vergessen habe.APL (Dyalog Classic)ngn / apl , 18 BytesBEARBEITEN: wurde auf meine eigene Implementierung von APL umgestellt, da Dyalog keine Unendlichkeiten unterstützt und der Herausforderungsautor nicht zulässt, dass endliche Zahlen als "null" fungieren.
Probieren Sie es online!Probieren Sie es auf der Demoseite von ngn / apl auskehrt für keine Lösung zurück
⌊/⍬
∞
quelle
?
?2 3 1 1
sollten abgebildet werden2
0N
ist die ganze Zahl von k null; Wenn Sie interessiert sind, kann ich weiter imHaskell , 45 Bytes
Probieren Sie es online!
Ausgänge
Infinity
wenn unmöglich. Das Hilfsargument left gibt an%
, um wie viel Leerzeichen wir uns in unserem aktuellen Hop bewegen können.quelle
Perl 5 ,
5653 BytesBeinhaltet
+1
füra
Nur der Code:
Probieren Sie es online!
quelle
Perl 5 , 80 Bytes
Probieren Sie es online!
quelle
Jelly , 32 Bytes
Probieren Sie es online!
Das ist einfach zu lang ...
quelle
Jelly ,
1918 BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript ES6 , 118 Byte
Probieren Sie es online!
Führt eine Breitensuche im Array durch, um den kürzesten Pfad zu finden.
quelle
C (gcc) , 80 Bytes
Probieren Sie es online!
quelle
Julia 0.6 , 79 Bytes
Gibt die Anzahl der Sprünge zurück oder
Inf
wenn Sie nicht entkommen können. Schauen Sie sich das erste Element rekursiv an und geben Sie entweder zurückInf
oder1
fügen Sie, je nachdem, ob Sie es verlassen können,1
die kürzeste Lösung für abgeschnittene Arrays hinzu, die jeden gültigen Sprung darstellen. Der Kontrollfluss erfolgt mit zwei ternären Anweisungen wietest1 ? ontrue1 : test2 ? ontrue2 : onfalse2
.Probieren Sie es online!
quelle
C # (.NET Core) , 97 Byte
Probieren Sie es online!
Gibt 0 zurück, wenn kein Pfad gefunden wurde.
Erläuterung
quelle
Python 2 ,
837372 Bytes-10 danke an @ user202729
-1 danke an @ JonathanFrech
Probieren Sie es online! Gibt unendlich für einen Nullwert zurück.
quelle
and min(...)+1for
kann seinand-~min(...)for
.