J, 28 자
((C.!.2=_1^i.&0)&.".&.stdin''
입력 순서는 행의 주요 항목으로, 테이블의 단일 경로에서 행을 왼쪽에서 오른쪽으로, 오른쪽에서 왼쪽으로 번갈아 읽습니다. 0이 왼쪽 상단에 속한다고 가정합니다.
Windows에서의 사용법 :
<nul set /p="0 1 2 3 7 6 5 4 8 9 10 11 15 14 13 12" | jconsole c:\...\15.jhs
설명:
<nul set /p=
입력 개행 방지하는 데 사용되는 echo
것을 생성 ".
싫어한다. 물론 유닉스는을 지원한다 echo /n
.
v&.".&.stdin''
"입력을 해석 한 후 입력을 구문 분석 한 다음 v를 수행 한 다음 구문 분석을 취소 (= 형식)하고 입력을 취소 (= 출력)"한다는 의미의 "stdin에서 구문 분석중인 v"를 읽습니다. 1!:1]3
한 문자보다 짧지 만 정의 된 역수가 없습니다.
C.!.2
"순열 패리티"를 의미합니다. 1
(짝수 패리티) 또는 _1
(홀수 패리티)를 리턴합니다 . 그건,_1^inversions
_1^i.&0
"-1의 지수 거듭 제곱"을 의미합니다.
- 따라서,
C.!.2=_1^i.&0
"순열 패리티가 홀 위치 패리티와 동일합니까?"
이것은 4x4 보드에서 작동하지만 원하는 끝 위치가 행에서 왼쪽에서 오른쪽으로 큰 경우 해결 된 위치의 순열은 홀수의 역수를 가지며 따라서 패리티는 홀수입니다. 또한 원하는 구멍 위치가 왼쪽 상단에서 오른쪽 하단으로 이동하면 패리티가 (입력 순서에 따라) 반전됩니다. 두 경우 모두 수정은 하나의 문자입니다. 예상 된 패리티를 뒤집기 위해 추가 -
한 후 추가하십시오 =
.
정확성 증명 :
각 이동 후, 0은 숫자와 위치를 교환하여 순열 패리티를 뒤집습니다. 또한 0은 입력 순서에서 홀수 및 짝수 위치로 표시되는 흰색과 검은 색 바둑판 위치 사이를 번갈아 표시합니다. 따라서이 조건이 필요합니다. 계산 인수로도 충분합니다. 위치의 정확히 절반을 해결할 수 있다는 것은 일반적인 지식입니다. 이 조건은 가능한 위치의 정확히 절반을 필터링합니다.