일본이나 동아시아 문화에 노출 된 적이 있다면 반드시 아미 다쿠지 게임을 보게 될 것입니다.
로 위키 백과 설명 , 그것은 복권의 유형 종이에 그려진 무작위 N 항목의 순열을 선택하는 데 사용입니다.
예를 들어, 시작 순서를 N 명에게 무작위로 할당하거나 N 상을 N 명에게 무작위로 할당하는 데 사용될 수 있습니다.
게임이 순열을 나타내는 이유를 이해하는 데 트릭은 (는 "다리"라고 함) 모든 수평 스트로크를 실현하는 것입니다 스왑 장소에 두 개의 항목을.
같은 Wikipedia 페이지에서는 N 항목의 각 순열 P가 무한한 수의 아미 다쿠지 다이어그램에 해당한다고 설명합니다. 가장 적은 수의 수평 스트로크 (다리)를 가진 것을 특정 순열 P의 "프라임"이라고합니다.
당신의 임무는이 형식 (문자 제외)에서 2 개 이상의 수직선 (이 예에서는 6 개)이있는 아미 다쿠지 다이어그램을받는 것입니다.
A B C D E F
| | | | | |
|-| |-| |-|
| |-| |-| |
| | | | |-|
| |-| |-| |
| | |-| |-|
| | |-| | |
|-| | |-| |
|-| |-| | |
| |-| | |-|
| | | | | |
B C A D F E
그리고 그 소수 중 하나를 생성하십시오 (다시, 문자를 뺀 것).
A B C D E F
| | | | | |
|-| | | |-|
| |-| | | |
| | | | | |
B C A D F E
문자가있는 첫 번째 및 마지막 줄 은 형식의 일부 가 아닙니다 . 순열을 보여주기 위해 여기에 추가했습니다. 또한되어 있지 첫 번째 또는 마지막 줄이 더 다리를 포함하지 않는 것을 요구 |-|
, 도 출력이 가능한 소형으로 할 수있다.
이 특정 입력 예제는 Wikipedia 페이지 맨 위에있는 Amidakuji 다이어그램의 (무한한) ASCII 표현 중 하나입니다.
이 ASCII 다이어그램에 대한 명백한 규칙이 하나 있습니다. 인접한 다리는 금지됩니다.
|-|-| <- NO, this does not represent a single swap!
Wikipedia는 "거품"이라는 다이어그램에서 소수를 얻는 표준 절차를 설명합니다.이 절차는 다음과 같은 단순화를 반복해서 적용합니다.
1) 오른쪽 포크에서 왼쪽 포크로 :
| |-| |-| |
|-| | -> | |-|
| |-| |-| |
2) 복식 제거 :
|-| | |
|-| -> | |
그 설명이 모호하지 않은지 잘 모르겠습니다. 코드는 해당 기술 또는 필요한 소수를 생성하는 다른 알고리즘을 사용할 수 있습니다.
가장 짧은 코드가 승리합니다.
표준 규칙 및 표준 허용량이 적용됩니다. (입력이 유효하지 않으면 프로그램에서 불이 붙을 수 있습니다. 입력 / 출력 형식은 stdin / stdout, 문자열 인수, 행 목록, 문자 매트릭스 등 가장 적합한 방법 등일 수 있습니다.)