Trong khi vẽ nguệch ngoạc với các con số, tôi đã tìm thấy một hoán vị thú vị mà bạn có thể tạo ra từ một danh sách các số. Nếu bạn lặp lại cùng một hoán vị đủ thời gian, bạn sẽ luôn trở lại mảng ban đầu. Hãy sử dụng danh sách sau đây:
[1, 2, 3, 4, 5]
làm ví dụ
Đảo ngược mảng. Bây giờ mảng của chúng tôi là
[5, 4, 3, 2, 1]
Sắp xếp lại (trao đổi) từng cặp. Danh sách của chúng tôi có 2 cặp:
[5, 4]
và[3, 2]
. Thật không may, chúng tôi không thể nhóm1
thành một cặp, vì vậy chúng tôi sẽ để riêng nó. Sau khi hoán đổi từng cặp, mảng mới là:[4, 5, 2, 3, 1]
Lặp lại bước 1 và 2 cho đến khi chúng tôi trở lại mảng ban đầu. Dưới đây là 4 bước tiếp theo:
Step 2: Start: [4, 5, 2, 3, 1] Reversed: [1, 3, 2, 5, 4] Pairs Swapped: [3, 1, 5, 2, 4] Step 3: Start: [3, 1, 5, 2, 4] Reversed: [4, 2, 5, 1, 3] Pairs Swapped: [2, 4, 1, 5, 3] Step 4: Start: [2, 4, 1, 5, 3] Reversed: [3, 5, 1, 4, 2] Pairs Swapped: [5, 3, 4, 1, 2] Step 5: Start: [5, 3, 4, 1, 2] Reversed: [2, 1, 4, 3, 5] Pairs Swapped: [1, 2, 3, 4, 5] # No more steps needed because we are back to the original array
Nếu độ dài của danh sách, n là số lẻ, nó sẽ luôn thực hiện chính xác n bước để trở về mảng ban đầu. Nếu n chẵn, sẽ luôn mất 2 bước để trở về mảng ban đầu, trừ khi n là 2, trong trường hợp đó sẽ mất 1 bước (vì đảo ngược và hoán đổi là điều tương tự).
Nhiệm vụ của bạn cho ngày hôm nay (nếu bạn chọn chấp nhận nó) là trực quan hóa tập hợp các bước này cho danh sách các độ dài tùy ý. Bạn phải viết một chương trình hoặc hàm lấy một số nguyên dương n làm đầu vào và thực hiện tập hợp các bước này cho danh sách [1, n]
. Bạn phải xuất từng bước trung gian trên đường đi, cho dù điều đó có nghĩa là in từng bước hoặc trả lại tất cả chúng dưới dạng danh sách các bước. Tôi không kén chọn định dạng đầu ra, miễn là rõ ràng rằng bạn đang tạo ra mọi bước. Điều này có nghĩa (ví dụ) bất kỳ trong số này:
Xuất ra mỗi bước dưới dạng một danh sách cho STDOUT
Trả về một danh sách các danh sách
Trả về một danh sách các biểu diễn chuỗi của mỗi bước
Trả về / xuất ra một ma trận
sẽ được chấp nhận
Bạn cũng phải xuất ra mảng ban đầu, cho dù điều đó đến ở cuối hay ở đầu là tùy thuộc vào bạn. (về mặt kỹ thuật, cả hai đều đúng)
Bạn sẽ phải xử lý trường hợp cạnh 2 bằng 1 bước thay vì 2 , vì vậy hãy đảm bảo giải pháp của bạn hoạt động với đầu vào là 2 (và 1 là trường hợp cạnh tiềm năng khác).
Như thường lệ, đây là môn đánh gôn , vì vậy các sơ hở tiêu chuẩn được áp dụng và cố gắng làm cho giải pháp của bạn ngắn hơn bất kỳ ngôn ngữ nào bạn chọn (hoặc thậm chí cố gắng đánh bại một ngôn ngữ khác thường ngắn hơn ngôn ngữ của bạn nếu bạn cảm thấy khó chịu cho một thử thách).
Kiểm tra IO
1:
[1]
2:
[1, 2]
3:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
4:
[3, 4, 1, 2]
[1, 2, 3, 4]
5:
[4, 5, 2, 3, 1]
[3, 1, 5, 2, 4]
[2, 4, 1, 5, 3]
[5, 3, 4, 1, 2]
[1, 2, 3, 4, 5]
7:
[6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 6]
[4, 6, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 7, 5]
[7, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
9:
[8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 8]
[6, 8, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 9, 7]
[9, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Và để có biện pháp tốt, đây là một trường hợp thử nghiệm khổng lồ:
27:
[26, 27, 24, 25, 22, 23, 20, 21, 18, 19, 16, 17, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 11, 8, 13, 10, 15, 12, 17, 14, 19, 16, 21, 18, 23, 20, 25, 22, 27, 24, 26]
[24, 26, 22, 27, 20, 25, 18, 23, 16, 21, 14, 19, 12, 17, 10, 15, 8, 13, 6, 11, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 11, 4, 13, 6, 15, 8, 17, 10, 19, 12, 21, 14, 23, 16, 25, 18, 27, 20, 26, 22, 24]
[22, 24, 20, 26, 18, 27, 16, 25, 14, 23, 12, 21, 10, 19, 8, 17, 6, 15, 4, 13, 2, 11, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 11, 1, 13, 2, 15, 4, 17, 6, 19, 8, 21, 10, 23, 12, 25, 14, 27, 16, 26, 18, 24, 20, 22]
[20, 22, 18, 24, 16, 26, 14, 27, 12, 25, 10, 23, 8, 21, 6, 19, 4, 17, 2, 15, 1, 13, 3, 11, 5, 9, 7]
[9, 7, 11, 5, 13, 3, 15, 1, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 26, 14, 24, 16, 22, 18, 20]
[18, 20, 16, 22, 14, 24, 12, 26, 10, 27, 8, 25, 6, 23, 4, 21, 2, 19, 1, 17, 3, 15, 5, 13, 7, 11, 9]
[11, 9, 13, 7, 15, 5, 17, 3, 19, 1, 21, 2, 23, 4, 25, 6, 27, 8, 26, 10, 24, 12, 22, 14, 20, 16, 18]
[16, 18, 14, 20, 12, 22, 10, 24, 8, 26, 6, 27, 4, 25, 2, 23, 1, 21, 3, 19, 5, 17, 7, 15, 9, 13, 11]
[13, 11, 15, 9, 17, 7, 19, 5, 21, 3, 23, 1, 25, 2, 27, 4, 26, 6, 24, 8, 22, 10, 20, 12, 18, 14, 16]
[14, 16, 12, 18, 10, 20, 8, 22, 6, 24, 4, 26, 2, 27, 1, 25, 3, 23, 5, 21, 7, 19, 9, 17, 11, 15, 13]
[15, 13, 17, 11, 19, 9, 21, 7, 23, 5, 25, 3, 27, 1, 26, 2, 24, 4, 22, 6, 20, 8, 18, 10, 16, 12, 14]
[12, 14, 10, 16, 8, 18, 6, 20, 4, 22, 2, 24, 1, 26, 3, 27, 5, 25, 7, 23, 9, 21, 11, 19, 13, 17, 15]
[17, 15, 19, 13, 21, 11, 23, 9, 25, 7, 27, 5, 26, 3, 24, 1, 22, 2, 20, 4, 18, 6, 16, 8, 14, 10, 12]
[10, 12, 8, 14, 6, 16, 4, 18, 2, 20, 1, 22, 3, 24, 5, 26, 7, 27, 9, 25, 11, 23, 13, 21, 15, 19, 17]
[19, 17, 21, 15, 23, 13, 25, 11, 27, 9, 26, 7, 24, 5, 22, 3, 20, 1, 18, 2, 16, 4, 14, 6, 12, 8, 10]
[8, 10, 6, 12, 4, 14, 2, 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, 27, 13, 25, 15, 23, 17, 21, 19]
[21, 19, 23, 17, 25, 15, 27, 13, 26, 11, 24, 9, 22, 7, 20, 5, 18, 3, 16, 1, 14, 2, 12, 4, 10, 6, 8]
[6, 8, 4, 10, 2, 12, 1, 14, 3, 16, 5, 18, 7, 20, 9, 22, 11, 24, 13, 26, 15, 27, 17, 25, 19, 23, 21]
[23, 21, 25, 19, 27, 17, 26, 15, 24, 13, 22, 11, 20, 9, 18, 7, 16, 5, 14, 3, 12, 1, 10, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 10, 3, 12, 5, 14, 7, 16, 9, 18, 11, 20, 13, 22, 15, 24, 17, 26, 19, 27, 21, 25, 23]
[25, 23, 27, 21, 26, 19, 24, 17, 22, 15, 20, 13, 18, 11, 16, 9, 14, 7, 12, 5, 10, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 18, 15, 20, 17, 22, 19, 24, 21, 26, 23, 27, 25]
[27, 25, 26, 23, 24, 21, 22, 19, 20, 17, 18, 15, 16, 13, 14, 11, 12, 9, 10, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
Chúc bạn chơi golf vui vẻ!
1 2 3 4 5
, không phải 1 2 4 3 5
.
array[0]
sẽ chỉ là 1 khi bắt đầu và kết thúc quá trình n = 999
. Từ việc nhìn vào mẫu, có vẻ như với mọi n lẻ , phần tử đầu tiên 1, n-1, 3, n - 3, 5, n - 5, 7...
tăng lên cho đến khi n - 2, 3, n, 1
, nó sẽ luôn thực hiện n bước. Tôi không thấy bất kỳ lý do nào mà mô hình này sẽ thay đổi với n lớn hơn .
1, n, 2, n-2, 4, n-4, 6, n-6, 8, n-8, ...
và dễ dàng hiển thị bằng cách cảm ứng rằng một phần tử ở vị trí chẵn x di chuyển đến nx sau một bước và một phần tử ở vị trí lẻ x di chuyển đến n-x + 2 . Vì vậy, nếu n = 2k + 1 , thì sau bước 2k -bước 1 sẽ ở mức 2k và ở bước tiếp theo là n-2k = 1 .