Jika Anda pernah memiliki paparan budaya Jepang atau Asia Timur, Anda pasti akan menemukan permainan Amidakuji:
Seperti yang dijelaskan Wikipedia , ini adalah jenis lotre yang digambar di atas kertas dan digunakan untuk memilih permutasi item N secara acak.
Misalnya, ini dapat digunakan untuk menetapkan urutan awal secara acak untuk N orang, atau N hadiah untuk N orang, dan seterusnya.
Trik untuk memahami mengapa permainan merepresentasikan permutasi adalah dengan menyadari bahwa setiap goresan horizontal (disebut "leg") menukar kedua item di tempatnya.
Halaman Wikipedia yang sama juga menjelaskan bahwa setiap permutasi item P sesuai dengan jumlah diagram Amidakuji yang tak terbatas. Satu (s) dengan paling sedikit stroke horisontal (kaki) disebut "bilangan prima" dari permutasi P. tertentu
Tugas Anda adalah untuk menerima diagram Amidakuji dengan 2 atau lebih garis vertikal (dalam contoh ini 6) dalam format ini (minus huruf):
A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E
Dan menghasilkan salah satu bilangan prima (sekali lagi, minus huruf):
A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E
Baris pertama dan terakhir dengan huruf bukan bagian dari format. Saya telah menambahkan mereka di sini untuk menunjukkan permutasi. Juga tidak diharuskan bahwa baris pertama atau terakhir tidak mengandung tungkai |-|
, atau bahwa output sekompleks mungkin.
Contoh input khusus ini adalah salah satu representasi ASCII (tak terbatas) dari diagram Amidakuji di bagian atas halaman Wikipedia.
Ada satu aturan yang tidak jelas tentang diagram ASCII ini: kaki yang berdekatan dilarang.
|-|-| <- NO, this does not represent a single swap!
Wikipedia menjelaskan prosedur standar untuk mendapatkan yang utama dari diagram, yang disebut "penggelembungan", yang terdiri dari penerapan penyederhanaan berikut berulang-ulang:
1) Garpu kanan ke garpu kiri:
| |-| |-| |
|-| | -> | |-|
| |-| |-| |
2) Menghilangkan ganda:
|-| | |
|-| -> | |
Saya tidak yakin apakah penjelasan itu tidak ambigu. Kode Anda dapat menggunakan teknik itu atau algoritma lainnya yang menghasilkan bilangan prima yang diperlukan.
Kode terpendek menang.
Aturan standar dan tunjangan standar berlaku. (Jika input tidak valid, program Anda mungkin terbakar. Format input / output mungkin stdin / stdout, argumen string, daftar garis, matriks karakter, apa pun yang paling cocok untuk Anda, dll.)