Eines Tages erwachst du nur, um dich gefangen in einer Reihe zu finden. Du versuchst einfach rauszugehen und nimmst jeweils einen Index, aber es scheint andere Regeln zu geben:
Das Array ist vollständig mit natürlichen Zahlen gefüllt.
- Wenn Sie sich in einem Index befinden
n
, wechseln Sie zum Indexarray[n]
, mit Ausnahme von: - Wenn Sie sich in einem Index befinden,
n
der eine Primzahl ist, treten Sie einenarray[n]
Schritt zurück
Beispiel: Sie beginnen mit Index 4
in diesem Array (Startindex ist 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Da der Wert des Feldes, in dem Sie sich befinden, ist 8
, gehen Sie 8
als erster Schritt zum Index . Das Feld, auf dem Sie landen, enthält den Wert 2
. Anschließend gehen Sie 2
als zweiten Schritt zum Index . Als 2
Primzahl machst du 5 Schritte zurück, was dein dritter Schritt ist. Da es keinen Index gibt -3
, haben Sie das Array in insgesamt 3 Schritten erfolgreich maskiert.
Ihre Aufgabe ist:
So schreiben Sie ein Programm oder eine Funktion, die ein Array und einen Startindex als Parameter akzeptiert und die Anzahl der Schritte ausgibt, die zum Verlassen des Arrays erforderlich sind. Wenn Sie das Array nicht verlassen können (z. B. [2,0,2]
mit start-index 2
=> Sie wechseln ständig von index 2
zu 0
), geben Sie einen falschen Wert aus. Sie können eine einbasierte oder eine nullbasierte Indizierung verwenden, geben Sie jedoch an, welche Sie verwenden.
Testfälle
Eingang: [2,5,6,8,1,2,3], 3
Ausgabe: 1
Eingang: [2, 0, 2], 2
Ausgabe: false
Input: [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5
;
Ausgabe: 6
Die kürzeste Antwort gewinnt.
quelle
Antworten:
Pyth, 31 Bytes
Die Testfälle
Es wird Null verwendet, um einen falschen Wert anzugeben, andernfalls die Anzahl der Sprünge.
quelle
Python,
161138 BytesCredits für Fakultät.
Ideone es!
Wie es funktioniert
Der Satz von Wilson wird für die Primärprüfung verwendet.
Schleifenerkennung durch Speichern der angezeigten Indizes in einem Array (
l
) und Überprüfen, ob sich der aktuelle Index in befindetl
.quelle
Python, 107 Bytes
Verbrauch:
f(list, start)
ex:f([2,5,6,8,1,2,3], 3)
Rückgabe
0
für Schleifen (erkannt wennn > len(a)
)quelle
Matlab, 138 Bytes
Dies ist ein geradliniger Ansatz, bei dem 1-basierte Indizes verwendet werden, da Matlab standardmäßig 1-basierte Indizes verwendet. Um die Anzahl der Schritte zu zählen, verwenden wir eine
for
Schleife, die von 1 bis unendlich (!) Zählt. Für den Fall, dass wir dem Array nicht entkommen können, verwenden wir einen Vektorv
, um zu verfolgen, welche Einträge wir bereits besucht haben. Wenn wir einen Eintrag zweimal besuchen, wissen wir, dass wir in einem unausweichlichen Zyklus stecken. Um zu überprüfen, ob wir uns außerhalb eines Arrays befinden, verwenden wir dietry/catch
Struktur, die auch Ausnahmen außerhalb des zulässigen Bereichs enthält.quelle
05AB1E, 32 Bytes
Erläuterung
Probieren Sie es online aus
quelle
JavaScript (ES6), 100
Index base 0. Hinweis: Diese Funktion ändert das Eingabearray
Weniger golfen
Prüfung
quelle
JAVA,
229218 BytesDank Kevin beissen 11 Bytes den Staub.
quelle
Stack<Integer>i=new Stack<>();
Kann geändert werden inStack i=new Stack();
undreturn 1==2;
kann geändert werden inreturn 0>1;
. Vielleicht möchten Sie auch Java 7 anstelle von Java im Allgemeinen erwähnen .a,b->{...}
stattObject e(int[]a,int b){...}
, weshalb ich persönlich Java erwähne 7 Leute wissen zu lassen, ich habe absichtlich nicht Java 8 lambdas verwendet, aber es ist bis zu Ihnen.CJam, 44 Bytes
Erwartet
index array
auf dem Stapel.Probieren Sie es online!
Meine erste CJam-Antwort, warum es so schrecklich und unerlässlich ist ...
(Es wird als in Ordnung angesehen, nach der korrekten Ausgabe, wie sie gedruckt wurde, einen Absturz zu verursachen. Das macht das Programm hier.)
quelle
C 121 Bytes
Funktion
f
akzeptiert Array, Startindex (0-basiert) und Anzahl der Elemente im Array, da es keine Möglichkeit gibt, das Ende eines Arrays in C zu testen (zumindest kenne ich keine).Probiere es auf ideone aus!
Hinweis:
function p(n)
Prüft, obn
Prime ist oder nicht. Gutschrift dafür geht an @Lynn und seine Antwort für Ist diese Zahl eine Primzahl?quelle
c
, um die Funktion erneut aufzurufen.JavaScript,
121132 Bytesedit 1: hoppla, habe das bisschen über die Anzahl der zurückgegebenen Schritte verpasst. behebe es bald.
edit 2: behoben
quelle
Schläger,
183156 BytesWahrscheinlich mehr Bytes, die beim weiteren Golfen gespart werden können, aber das war's für mich. :)
Komplettes Modul mit Testsuite mit Cleaner-Funktion:
Führen Sie es wie
raco test e.rkt
Ein großes Lob für @cat bei der Entdeckung der undokumentierten
prime?
Funktion .quelle
Java,
163-160Bytesp(n)
ist für die Hauptprüfung,f(a,n)
ist für die Fluchtfunktion. Verwendung:Ungolfed-Version:
quelle
Perl 6 , 85 Bytes
Erläuterung:
Dies ist eine träge Folge der Indizes, die gemäß der Regel durchlaufen werden. Wenn der Index die Grenzen des Eingabearrays (die
!(0 <= * < a)
Bedingung) überschreitet , ist die Sequenz endlich. ansonsten zyklieren die Indizes unendlich.Diese Sequenz wird der internen anonymen Funktion zugeführt:
Wenn die Sequenz an dem durch die Größe des Eingabearrays angegebenen Index definiert ist, muss sie in einen unendlichen Zyklus eingetreten sein und
0
wird zurückgegeben. Andernfalls wird die Größe der Sequenz+$_
zurückgegeben.quelle
Perl 5 , 107 + 1 (
-a
) = 108 BytesProbieren Sie es online!
0-basierte Liste. Gibt false (leer) zurück, wenn die Liste nicht ausweichbar ist.
quelle