Bình thường, 17 byte
uXGhaf>FT.:G2]Z)Q
Chuyển đổi các mục trong một danh sách thực sự tốn kém trong Pyth. Vì vậy, đây là một giải pháp thú vị, kéo dài các quy tắc một chút. Nó có lẽ không hợp lệ.
Dùng thử trực tuyến: Trình biên dịch / thực thi Pyth
Giải trình
Trước hết, độ phức tạp thời gian của mã của tôi là O(n^3)
. Nhưng đây không phải là phần thú vị. Câu hỏi không nói lên điều gì về sự phức tạp.
Phần quan trọng là, làm thế nào tôi chuyển đổi hai yếu tố trong danh sách. Hãy nói rằng tôi muốn chuyển đổi các yếu tố m[3]
và m[4]
. Tôi không quan tâm đến các chỉ số 3
và 4
tất cả. Tôi chỉ đơn giản là tạo một danh sách thứ hai, thay thế mọi phần tử bằng m[3]
với số m[4]
và mỗi số bằng m[4]
với giá trị m[3]
. Vì danh sách không chứa các bản sao, điều này mô phỏng việc chuyển đổi hai giá trị này. Nếu có trùng lặp, như trong đầu vào [1, 3, 2, 2]
, đầu ra sẽ là [1, 2, 3, 3]
. Và nếu bạn đưa ra đầu vào [1, 2, 1]
, nó sẽ kết thúc trong một vòng lặp vô hạn. Tôi không rõ ràng tạo danh sách thứ hai, nó chỉ là một phần trong việc triển khai phương thức dịch của Pyth. Nếu bạn in ra các danh sách hiện tại ( xem tại đây), nó cung cấp các giá trị chính xác, mà bạn mong đợi.
implicit: Q = input list
u Q set G = Q, update G as long with the following statements,
until it stops changing:
.:G2 all pairs (G[i],G[i+1])
f>FT filter for pairs T, where T[0] > T[1]
a ]Z add to this list of pairs [0]
(ensures that the filtered list is always non-empty)
h take the first element
XG ) translate G by this pair (switches the values T[0] with T[1])
print implicitly at the end