이것은 일련의 아일랜드 골프 도전에서 첫 번째입니다. 다음 도전
ASCII 예술의 섬이 주어지면 그것을 둘러싼 최적의 경로를 출력하십시오.
입력
입력 내용은 토지와 물을 나타내는 두 문자로 구성된 직사각형 격자입니다. 아래 예에서 land is #
and water is .
이지만 원하는 두 개의 다른 문자를 대체 할 수 있습니다.
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
항상 하나 이상의 랜드 타일이 있습니다. 랜드 타일은 모두 연속적입니다 (즉, 하나의 섬만 있습니다). 물 타일도 연속적입니다 (예 : 호수가 없음). 격자의 외부 경계는 모두 물 타일입니다. 랜드 타일은 대각선으로 연결 되지 않습니다 . 예를 들어
....
.#..
..#.
....
산출
코드는 동일한 그리드를 출력해야하며 가장 짧은 우회 항을 그려야합니다. 아래 예에서 circumnavigation 경로는로 표시 o
되지만 토지 및 물 문자와 구분되지 않는 한 모든 문자를 대체 할 수 있습니다.
일주는 완전히 그리드에 모든 토지 타일을 둘러싸는 것으로, 물 타일에 전적으로 그려진 간단한 닫힌 곡선이다. 대각선 연결 이 허용됩니다. 예를 들어, 이것은 위 섬의 우회 항입니다 (가장 짧은 것은 아님).
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
circumnavigation의 길이는 다음과 같이 계산됩니다. 경로의 인접한 타일 쌍마다 수평 또는 수직으로 연결된 경우 1을 추가하십시오. 대각선으로 연결되어 있으면 √2를 더하십시오. 위 경로의 길이는 22 + 7√2 (≈ 31.9)입니다.
최단 일주는 최단 길이의 일주한다. 프로그램은이 조건을 만족하는 경로를 출력해야합니다. 대부분의 섬에는 여러 가지 가능한 솔루션이 있습니다. 길이 10 + 13√2 (≈ 28.4)의 위 섬에 대한 한 가지 해결책은 다음과 같습니다.
...oo......
..o##oo....
.o#####oo..
.o#######o.
o#########o
.o.#######o
..o#####.#o
...o####.o.
....ooooo..
세부
귀하의 솔루션은 전체 프로그램 또는 기능 일 수 있습니다 . 임의의 기본 입출력 방법 으로 허용된다.
입력 및 출력은 여러 줄 문자열 또는 문자열 목록 일 수 있습니다. 경우 언어를 단일 문자열을 구별 문자 유형이, 당신은 이전 문장에서 "문자열"에 대한 "문자의 목록"을 대체 할 수 있습니다. 언어에서 그리드의 높이 및 / 또는 너비를 입력해야하는 경우 입력 할 수 있습니다. 출력물에 (선택 사항) 단일 후행 줄 바꿈이있을 수 있습니다. 위에서 언급 한 바와 같이, 대신 3 개의 다른 문자를 사용할 수 있습니다 #.o
(제출시 사용중인 문자를 지정하십시오).
테스트 사례
A. 가장 짧은 우회 항을 가진 섬들 :
...
.#.
...
.o.
o#o
.o.
......
.####.
......
.oooo.
o####o
.oooo.
......
......
..##..
...#..
......
......
......
..oo..
.o##o.
..o#o.
...o..
......
.......
.#####.
...#...
...#...
.#####.
.......
.ooooo.
o#####o
o..#..o
o..#..o
o#####o
.ooooo.
.......
...#...
...#...
.#####.
...#...
...#...
.......
...o...
..o#o..
.o.#.o.
o#####o
.o.#.o.
..o#o..
...o...
.......
.#####.
.##..#.
..#..#.
.......
.ooooo.
o#####o
o##..#o
.o#..#o
..oooo.
B. 가능한 여러 솔루션이있는 섬의 예 :
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
가능한 출력 :
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###.o.
o#####o.
o#####o.
.o##.o..
..ooo...
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##oo..
..oo....
....oo..
...o##o.
..o####o
.o###..o
o#####.o
o#####o.
.o##.o..
..ooo...
이것은 코드 골프입니다 : 각 언어에서 가장 짧은 코드가 승리합니다.