MU 퍼즐 당신이 회전 할 수 있는지 여부를 알 수있는 퍼즐 MI
에 MU
주어진 다음 작업 :
문자열이로 끝나는 경우 끝에를
I
추가 할 수 있습니다U
. (예를 들어MI -> MIU
)문자열이로 시작 하면 문자열
M
뒤에 부분의 복사본을 추가 할 수 있습니다M
.
(예를 들어MII -> MIIII
)문자열에 세 개의 연속이 포함되어 있으면을
I
로 변경할 수 있습니다U
.
(예를 들어MIII -> MU
)문자열에 연속 된 두 개가 포함되어 있으면
U
삭제할 수 있습니다. (예 :)MUUU -> MU
.
당신의 작업은 시작 및 종료 문자열에 대해 가능한지 여부를 결정하는 프로그램을 작성하는 것입니다.
프로그램은 두 개의 문자열을 입력으로받습니다. 각 문자열은 다음으로 구성됩니다.
하나
M
.최대 스물 아홉
I
및 의 문자열U
.
그러면 프로그램이 돌아옵니다 true
첫 번째 문자열에서 두 번째 문자열에 도달 할 수 있으면 하거나 프로그래밍 언어의 해당 표현 / YPLRT를 반환하고 false
그렇지 않으면 YPLRT를 반환합니다.
입력 및 출력 예 :
MI MII
true
MI MU
false
MIIIIU MI
true
이 작업을 수행하는 모든 언어에서 가장 짧은 코드가 이깁니다.
8
저는 현재 Gödel, Escher, Bach를 읽고 있으며 나중에 그 장을 기반으로 "18 홀 골프 코스"에 대해 생각했습니다. 이제 새로운 "구멍 1"을 찾아야한다고 생각합니다. ;)
—
Martin Ender
이것은 본질이 이전에 여러 번 요청 된 그래프 도달 가능성 질문입니다.
—
피터 테일러
@PeterTaylor 도달 가능성 그래프를 명시 적으로 검색해도 이것이 해결되지 않을 가능성이 높다고 생각합니다. MIU 규칙은 많은 구조를 가지고 있으며 중간 노드를 검색하지 않고 도달 가능성을 테스트하는 직접적인 알고리즘이 있는지는 놀랄 일이 아닙니다. 예를 들어, 연결할 수있는 노드
—
xnor
MI
는M(I|U)*
I
는 3의 배수가 아닌 위치입니다. 이러한 직접 검사는 코드를 더 짧게 만듭니다. 또한 중간 단계에 필요한 문자열 길이에 대한 선입견을 알지 못하므로 직접 검색이 실용적이지 않을 수 있습니다.
나는이 문제에 대해 잠시 동안 생각했지만 무력하지 않은 솔루션에 가까워지지 않았습니다. 아무도 물지 않으면 더 쉬운 버전의 질문을 게시하는 것이 좋습니다. 어쩌면
—
xnor
MI
주어진 도달 가능한 문자열 에서 시작하여 파생 할 수 있습니다.
IM
공급되는 경우 출력은 무엇입니까 MUMMI
?