traintracks
JavaScript로 작성된 Train Tracks 퍼즐의 해결사
영국의 Saturday Times에는 Train Tracks라는 퍼즐이 있습니다.
8x8 정사각형 격자입니다. 각 행과 열에는 해당 행이나 열에 몇 개의 조각이 들어가는지 알려주는 숫자가 있습니다.
트랙의 시작과 끝을 나타내는 A
와 B
에 대한 마커도 있습니다. 그리드에 이미 하나 이상의 다른 조각이 있을 수 있습니다.
당신의 임무는 그리드의 각 행과 열에 올바른 수의 조각이 존재하도록 A
에서 B
까지 직선 또는 90도 모서리 조각만을 사용하여 트랙을 그리는 것입니다.
다음은 퍼즐의 예입니다.
우리는 <A><B>-<cols>-<rows>-<pieces>
와 같이 퍼즐을 인코딩합니다.
위의 퍼즐은 54-14134544-54234341-48EW.53NE
입니다.
A
와 B
그리드를 따라 얼마나 멀리(왼쪽 아래부터) 시작(얼마나 위쪽으로)하고 끝나는지(오른쪽으로 얼마나 멀리) 나타내는 숫자 1-8입니다. 이 예에서 A
는 5
이고 B
4
입니다.
cols
열의 제약 조건을 나타내는 1~8까지의 8개 숫자 목록입니다. 숫자는 왼쪽에서 오른쪽으로 읽습니다(그림과 같이 퍼즐 상단을 따라).
rows
행에 대해 동일합니다. 이번에는 위에서 아래로 진행하므로 실제 퍼즐을 더 쉽게 따라갈 수 있습니다.
pieces
점으로 구분된 초기 조각(시작과 끝은 계산하지 않음) 목록입니다 .
<rol><col><type>
여기서 type은 조각이 가리키는 방식입니다. 유효한 유형은 NS
(수직) EW
(수평) NE
L자형, NW
뒤로-L, SE
위쪽-L, SW
180도 회전된 L입니다.
생각보다 입력하기가 훨씬 쉽습니다. 그러나 이것이 웹사이트에서 사용된다면 보다 직관적인 UI가 퍼즐을 만들고 인코딩을 생성할 수 있습니다.
어쨌든 인코딩이 완료되면 traintracks
도구를 호출할 수 있습니다.
$ traintracks 54-14134544-54234341-48EW.53NE
Puzzle: 54-14343245-14134544-48EW.53NE
1 4 1 3 4 5 4 4 1 4 1 3 4 5 4 4
┌─┬─┬─┬─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┬─┬─┬─┐
8 │ │ │ │━│ │ │ │ │ 5 8 │ │┏│━│━│━│┓│ │ │ 5
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
7 │ │ │ │ │ │ │ │ │ 4 7 │ │┃│ │ │ │┗│━│┓│ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
6 │ │ │ │ │ │ │ │ │ 2 6 │ │┃│ │ │ │ │ │┃│ 2
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
A │━│ │ │ │ │ │ │ │ 3 A │━│┛│ │ │ │ │ │┃│ 3
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
4 │ │ │ │ │ │ │ │ │ 4 4 │ │ │ │ │┏│━│━│┛│ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
3 │ │ │ │ │┗│ │ │ │ 3 3 │ │ │ │ │┗│━│┓│ │ 3
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
2 │ │ │ │ │ │ │ │ │ 4 2 │ │ │ │┏│━│━│┛│ │ 4
├─┼─┼─┼─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┼─┼─┼─┤
1 │ │ │ │┃│ │ │ │ │ 1 1 │ │ │ │┃│ │ │ │ │ 1
└─┴─┴─┴─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┴─┴─┴─┘
1 2 3 B 5 6 7 8 1 2 3 B 5 6 7 8
Solved: true - Steps: 323
--animate
추가하면 알고리즘이 작동하는 것을 볼 수 있습니다. asciinema 비디오를 참조하십시오:
AR 스도쿠 해결사를 봤습니다. 해당 분야의 선행기술은 있었지만 저는 처음 봤습니다. 어쨌든, 나는 이 작은 퍼즐을 좋아하고 a) 나도 똑같이 할 수 있는지, b) 완전히 웹 기반으로 만들 수 있는지 궁금했습니다.
따라서 로드맵은 다음과 같습니다.