Diberikan urutan bilangan bulat atau untuk lebih spesifik permutasi 0..N
mengubah urutan ini sebagai berikut:
- output [x] = mundur (input [input [x]])
- ulang
Misalnya: [2,1,0]
menjadi [0,1,2]
dan terbalik adalah [2,1,0]
. [0,2,1]
menjadi [0,1,2]
dan terbalik [2,1,0]
.
Contoh 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Contoh 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Contoh 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
Contoh 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
Tugas Anda adalah mendefinisikan fungsi (atau program) yang mengambil permutasi bilangan bulat 0..N
dan mengembalikan (atau menampilkan) jumlah langkah hingga permutasi terjadi yang telah terjadi. Jika X
mentransformasikan ke X
maka output harus nol, Jika X
mentransformasikan ke Y
dan Y
ke X
(atau Y
) maka output harus 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
Jika bahasa Anda tidak mendukung "fungsi" Anda dapat mengasumsikan bahwa urutan diberikan sebagai daftar bilangan bulat terpisah spasi putih seperti 0 1 2
atau 3 1 0 2
pada satu baris.
Fakta menyenangkan:
- urutan 0,1,2,3, .., N akan selalu berubah menjadi N, ..., 3,2,1,0
- urutan N, .., 3,2,1,0 akan selalu berubah menjadi N, .., 3,2,1,0
- urutan 0,1,3,2, ..., N + 1, N akan selalu berubah menjadi N, ..., 3,2,1,0
Tugas bonus : Mencari tahu rumus matematika.
Aturan opsional :
- Jika indeks pertama bahasa Anda adalah 1 bukannya 0, Anda dapat menggunakan permutasi
1..N
(Anda bisa menambahkan satu ke setiap integer dalam contoh dan testcases).
3,0,1,2
harus berubah menjadi2,3,0,1
Jawaban:
JavaScript (ES6), 54 byte
Cobalah online!
sumber
[]
dilakukan pada suatu fungsi?g[a]
bisa digunakan untuk mengakses propertia
.g
untuk menyimpan negara di.Python 2 , 67 byte
Cobalah online!
sumber
Pyth,
1098 bytePenjelasan:
Suite uji .
sumber
Haskell, 52 byte
Cobalah online!
sumber
Perl 6 ,
4435 byte-9 byte terima kasih kepada nwellnhof
Cobalah online!
Penjelasan:
sumber
J,
332726 byte-7 terima kasih kepada bubbler
Cobalah online!
bagaimana
penjelasan asli. peningkatan terakhir saya hanya mengubah bagian yang menemukan "indeks elemen pertama yang telah kita lihat". sekarang menggunakan "nub saringan" untuk melakukannya dalam lebih sedikit byte.
Perhatikan bahwa seluruh frasa akhir
1<:@i.~[:({:e.}:)\
dikhususkan untuk menemukan "indeks elemen pertama yang telah terlihat." Ini sepertinya sangat lama untuk mendapatkan itu, tetapi saya tidak bisa bermain golf lagi. Saran diterima.sumber
Jelly , 6 byte
Cobalah online!
1-diindeks.
sumber
Dyalog APL,
292827 byteMembawa array kotak. Akan melatih dan menjelaskan nanti.
Cobalah di sini sebagai test suite .
sumber
Bersihkan , 90 byte
Cobalah online!
sumber