Nếu bạn đã từng tiếp xúc với văn hóa Nhật Bản hoặc Đông Á, bạn chắc chắn sẽ bắt gặp trò chơi Amidakuji:
Như Wikipedia giải thích , đây là một loại xổ số được vẽ trên giấy và được sử dụng để chọn ngẫu nhiên một hoán vị của N vật phẩm.
Ví dụ: nó có thể được sử dụng để gán ngẫu nhiên một chuỗi bắt đầu cho N người hoặc N giải thưởng cho N người, v.v.
Mẹo để hiểu lý do tại sao trò chơi đại diện cho một hoán vị là nhận ra rằng mọi nét ngang (được gọi là "chân") đều hoán đổi hai vật phẩm của nó tại chỗ.
Trang Wikipedia tương tự cũng giải thích rằng mỗi P hoán vị của N mục tương ứng với vô số sơ đồ Amidakuji. (Các) số có ít nhất các nét ngang (chân) được gọi là "số nguyên tố" của hoán vị cụ thể P.
Nhiệm vụ của bạn là nhận một sơ đồ Amidakuji có 2 hoặc nhiều dòng dọc (trong ví dụ này là 6) theo định dạng này (trừ các chữ cái):
A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E
Và tạo một trong các số nguyên tố của nó (một lần nữa, trừ các chữ cái):
A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E
Các dòng đầu tiên và cuối cùng với các chữ cái không phải là một phần của định dạng. Tôi đã thêm chúng ở đây để hiển thị hoán vị. Cũng không yêu cầu các dòng đầu tiên hoặc cuối cùng không chứa chân |-|
, cũng như đầu ra càng nhỏ gọn càng tốt.
Ví dụ đầu vào cụ thể này là một trong những biểu diễn ASCII (vô hạn) của sơ đồ Amidakuji ở đầu trang Wikipedia.
Có một quy tắc không rõ ràng về các sơ đồ ASCII này: các chân liền kề bị cấm.
|-|-| <- NO, this does not represent a single swap!
Wikipedia giải thích một quy trình chuẩn để có được một số nguyên tố từ một sơ đồ, được gọi là "bong bóng", bao gồm việc áp dụng các đơn giản hóa sau và hơn:
1) Nĩa phải sang ngã ba trái:
| |-| |-| |
|-| | -> | |-|
| |-| |-| |
2) Loại bỏ nhân đôi:
|-| | |
|-| -> | |
Tôi không chắc liệu lời giải thích đó có rõ ràng không. Mã của bạn có thể sử dụng kỹ thuật đó hoặc bất kỳ thuật toán nào khác tạo ra các số nguyên tố cần thiết.
Mã ngắn nhất sẽ thắng.
Quy tắc tiêu chuẩn và phụ cấp tiêu chuẩn được áp dụng. (Nếu đầu vào không hợp lệ, chương trình của bạn có thể bắt lửa. Các định dạng đầu vào / đầu ra có thể là stdin / stdout, đối số chuỗi, danh sách các dòng, ma trận ký tự, bất cứ điều gì phù hợp nhất với bạn, v.v.)