Étant donné une séquence d'entiers ou pour être plus spécifique une permutation de 0..N
transformer cette séquence comme suit:
- sortie [x] = inverse (entrée [entrée [x]])
- répéter
Par exemple: [2,1,0]
devient [0,1,2]
et inversé est [2,1,0]
. [0,2,1]
devient [0,1,2]
et inversé [2,1,0]
.
Exemple 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Exemple 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Exemple 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
Exemple 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
Votre tâche consiste à définir une fonction (ou un programme) qui accepte une permutation d'entiers 0..N
et renvoie (ou génère) le nombre d'étapes jusqu'à ce qu'une permutation se produise déjà. Si se X
transforme en X
alors la sortie doit être nulle, Si se X
transforme en Y
et Y
vers X
(ou Y
) alors la sortie doit être 1.
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
Testcases:
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
Si votre langue ne prend pas en charge les "fonctions", vous pouvez supposer que la séquence est donnée sous forme de liste séparée par des espaces d'espaces tels que 0 1 2
ou 3 1 0 2
sur une seule ligne.
Faits amusants:
- la séquence 0,1,2,3, .., N se transformera toujours en N, ..., 3,2,1,0
- la séquence N, .., 3,2,1,0 se transformera toujours en N, .., 3,2,1,0
- la séquence 0,1,3,2, ..., N + 1, N se transformera toujours en N, ..., 3,2,1,0
Tâche bonus : trouver une formule mathématique.
Règles optionnelles :
- Si le premier index de votre langue est 1 au lieu de 0, vous pouvez utiliser des permutations
1..N
(vous pouvez simplement ajouter un à chaque entier dans l'exemple et les cas de test).
3,0,1,2
devrait se transformer en2,3,0,1
Réponses:
JavaScript (ES6), 54 octets
Essayez-le en ligne!
la source
[]
une fonction?g[a]
peut être utilisé dessus pour accéder à la propriétéa
.g
pour stocker l'état dans.Python 2 , 67 octets
Essayez-le en ligne!
la source
Pyth,
1098 octetsExplication:
Suite de tests .
la source
Haskell, 52 octets
Essayez-le en ligne!
la source
Perl 6 ,
4435 octets-9 octets grâce à nwellnhof
Essayez-le en ligne!
Explication:
la source
J,
332726 octets-7 grâce au bubbler
Essayez-le en ligne!
Comment
explication originale. ma dernière amélioration ne change que la pièce qui trouve "l'index du premier élément que nous avons déjà vu". il utilise maintenant le "tamis nub" pour le faire en moins d'octets.
Notez que la phrase finale entière
1<:@i.~[:({:e.}:)\
est consacrée à trouver "l'index du premier élément qui a déjà été vu". Cela semble terriblement long pour l'obtenir, mais je n'ai pas pu jouer au golf plus. Suggestions bienvenues.la source
Gelée , 6 octets
Essayez-le en ligne!
1 indexé.
la source
Dyalog APL,
292827 octetsPrend des tableaux en boîte. S'entraînera et expliquera plus tard.
Essayez-le ici comme suite de tests .
la source
Nettoyer , 90 octets
Essayez-le en ligne!
la source