Bei einer gegebenen Folge von ganzen Zahlen oder genauer gesagt einer Permutation der 0..N
Transformation lautet diese Folge wie folgt:
- ausgang [x] = rückwärts (eingang [eingang [x]])
- wiederholen
Zum Beispiel: [2,1,0]
wird [0,1,2]
und umgekehrt ist [2,1,0]
. [0,2,1]
wird [0,1,2]
und umgekehrt [2,1,0]
.
Beispiel 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Beispiel 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Beispiel 3
In: 3 0 1 2
S#1: 1 0 3 2
S#2: 3 2 1 0
S#3: 3 2 1 0
Output: 2
Beispiel 4
In: 3 0 2 1
S#1: 0 2 3 1
S#2: 2 1 3 0
S#3: 2 0 1 3
S#4: 3 0 2 1
Output: 3
Ihre Aufgabe ist es, eine Funktion (oder ein Programm) zu definieren, die eine Permutation von ganzen Zahlen verwendet 0..N
und die Anzahl der Schritte zurückgibt (oder ausgibt), bis eine bereits aufgetretene Permutation auftritt. Wenn zu X
transformiert wird, sollte X
die Ausgabe Null sein. Wenn X
zu Y
und Y
zu X
(oder Y
) transformiert wird, sollte die Ausgabe 1 sein.
Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps
Testfälle:
4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 ->
5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps
Wenn Ihre Sprache keine "Funktionen" unterstützt, können Sie davon ausgehen, dass die Sequenz als durch Leerzeichen getrennte Liste von Ganzzahlen wie 0 1 2
oder 3 1 0 2
in einer einzelnen Zeile angegeben wird.
Wissenswertes:
- Die Folge 0,1,2,3, .., N wird immer in N, ..., 3,2,1,0 transformiert
- Die Folge N, .., 3,2,1,0 wird immer in N, .., 3,2,1,0 transformiert
- Die Folge 0,1,3,2, ..., N + 1, N wird immer zu N, ..., 3,2,1,0 transformiert
Bonusaufgabe : Finde eine mathematische Formel heraus.
Optionale Regeln :
- Wenn der erste Index Ihrer Sprache 1 anstelle von 0 ist, können Sie Permutationen verwenden
1..N
(Sie können jeder Ganzzahl im Beispiel und in den Testfällen einfach eine hinzufügen).
3,0,1,2
sollte sich zu2,3,0,1
Antworten:
JavaScript (ES6), 54 Byte
Probieren Sie es online!
quelle
[]
man mit einer Funktion?g[a]
kann darauf zugegriffen werden, um auf das Grundstück zuzugreifena
.g
, um den Zustand in zu speichern.Python 2 , 67 Bytes
Probieren Sie es online!
quelle
Pyth,
1098 BytesErläuterung:
Testsuite .
quelle
Haskell, 52 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
4435 Bytes-9 bytes dank nwellnhof
Probieren Sie es online!
Erläuterung:
quelle
J,
332726 Bytes-7 dank bubbler
Probieren Sie es online!
Wie
ursprüngliche Erklärung. Meine letzte Verbesserung ändert nur das Stück, das "den Index des ersten Elements findet, das wir bereits gesehen haben". es verwendet jetzt das "Nubsieb", um dies in weniger Bytes zu tun.
Beachten Sie, dass der gesamte letzte Satz
1<:@i.~[:({:e.}:)\
dem Auffinden "des Index des ersten Elements, das bereits gesehen wurde" gewidmet ist. Das scheint furchtbar lange zu dauern, aber ich konnte nicht mehr Golf spielen. Vorschläge sind willkommen.quelle
Gelee , 6 Bytes
Probieren Sie es online!
1-indiziert.
quelle
Dyalog APL,
292827 BytesNimmt geschachtelte Arrays auf. Wird später trainieren und erklären.
Probieren Sie es hier als Testsuite aus .
quelle
Sauber , 90 Bytes
Probieren Sie es online!
quelle