Đưa ra một chuỗi các số nguyên hoặc cụ thể hơn là hoán vị 0..N
biến đổi chuỗi này như sau:
- đầu ra [x] = đảo ngược (đầu vào [đầu vào [x]])
- nói lại
Ví dụ: [2,1,0]trở thành [0,1,2]và đảo ngược là [2,1,0]. [0,2,1]trở thành [0,1,2]và đảo ngược [2,1,0].
ví dụ 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Ví dụ 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Ví dụ 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
Ví dụ 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
Nhiệm vụ của bạn là xác định một hàm (hoặc chương trình) có hoán vị số nguyên 0..Nvà trả về (hoặc đầu ra) số bước cho đến khi xảy ra hoán vị đã xảy ra. Nếu Xbiến đổi thành Xthì đầu ra phải bằng 0, Nếu Xbiến đổi thành Yvà Ythành X(hoặc Y) thì đầu ra phải là 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
Testcase:
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
Nếu ngôn ngữ của bạn không hỗ trợ "các hàm", bạn có thể giả sử rằng chuỗi được đưa ra dưới dạng danh sách các số nguyên được phân tách bằng khoảng trắng như 0 1 2hoặc 3 1 0 2trên một dòng.
Những điều lý thú:
- dãy 0,1,2,3, .., N sẽ luôn biến đổi thành N, ..., 3,2,1,0
- dãy N, .., 3,2,1,0 sẽ luôn biến đổi thành N, .., 3,2,1,0
- chuỗi 0,1,3,2, ..., N + 1, N sẽ luôn biến đổi thành N, ..., 3,2,1,0
Nhiệm vụ tiền thưởng : Chỉ ra một công thức toán học.
Quy tắc tùy chọn :
- Nếu chỉ mục đầu tiên của ngôn ngữ của bạn là 1 thay vì 0, bạn có thể sử dụng hoán vị
1..N(bạn chỉ có thể thêm một cho mỗi số nguyên trong ví dụ và testcase).
3,0,1,2nên chuyển đổi thành2,3,0,1