Biorąc pod uwagę sekwencję liczb całkowitych lub ściślej mówiąc, permutacja 0..N
przekształcenia tej sekwencji w następujący sposób:
- wyjście [x] = bieg wsteczny (wejście [wejście [x]])
- powtarzać
Na przykład: [2,1,0]
staje się [0,1,2]
i odwrócony jest [2,1,0]
. [0,2,1]
staje się [0,1,2]
i odwraca [2,1,0]
.
Przykład 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Przykład 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Przykład 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
Przykład 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
Twoim zadaniem jest zdefiniowanie funkcji (lub programu), która przyjmuje permutację liczb całkowitych 0..N
i zwraca (lub generuje) liczbę kroków do momentu wystąpienia permutacji, która już wystąpiła. Jeśli X
przekształca się w, X
wówczas wyjście powinno wynosić zero, Jeśli X
przekształca się w Y
i Y
do X
(lub Y
), wówczas wyjście powinno wynosić 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
Przypadki testowe:
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
Jeśli Twój język nie obsługuje „funkcji”, możesz założyć, że sekwencja jest podana jako osobna lista liczb całkowitych, takich jak 0 1 2
lub 3 1 0 2
w jednym wierszu.
Zabawne fakty:
- sekwencja 0,1,2,3, .., N zawsze przekształci się w N, ..., 3,2,1,0
- sekwencja N, .., 3,2,1,0 zawsze przekształci się w N, .., 3,2,1,0
- sekwencja 0,1,3,2, ..., N + 1, N zawsze przekształci się w N, ..., 3,2,1,0
Dodatkowe zadanie : Opracuj wzór matematyczny.
Zasady opcjonalne :
- Jeśli pierwszym indeksem Twojego języka jest 1 zamiast 0, możesz użyć permutacji
1..N
(możesz po prostu dodać jeden do każdej liczby całkowitej w przykładzie i testach).
3,0,1,2
powinien przekształcić się w2,3,0,1
Odpowiedzi:
JavaScript (ES6), 54 bajty
Wypróbuj online!
źródło
[]
funkcja?g[a]
może być używany na to, aby uzyskać dostęp do własnościa
.g
do przechowywania stanu.Python 2 , 67 bajtów
Wypróbuj online!
źródło
Pyth,
1098 bajtówWyjaśnienie:
Zestaw testowy .
źródło
Haskell, 52 bajty
Wypróbuj online!
źródło
Perl 6 ,
4435 bajtów-9 bajtów dzięki nwellnhof
Wypróbuj online!
Wyjaśnienie:
źródło
J,
332726 bajtów-7 dzięki bubblerowi
Wypróbuj online!
w jaki sposób
oryginalne wyjaśnienie. moje ostatnie ulepszenie zmienia tylko element, który znajduje „indeks pierwszego elementu, który już widzieliśmy”. używa teraz „sita nub”, aby zrobić to w mniejszej liczbie bajtów.
Zwróć uwagę, że cała ostatnia fraza
1<:@i.~[:({:e.}:)\
poświęcona jest znalezieniu „indeksu pierwszego elementu, który już był widziany”. Wydaje się to okropnie długie, ale nie mogłem więcej w golfa. Sugestie mile widziane.źródło
Galaretka , 6 bajtów
Wypróbuj online!
1-indeksowany.
źródło
Dyalog APL,
292827 bajtówZajmuje tablice w pudełku. Nauczę się i wyjaśnię później.
Wypróbuj tutaj jako pakiet testowy .
źródło
Czysty , 90 bajtów
Wypróbuj online!
źródło