这是Island Golf系列挑战中的第二次挑战。先前的挑战
两个隐士到达了一个荒岛。由于他们寻求孤独,所以他们希望彼此之间住得尽可能远。他们应该在哪里建造小屋,以使他们之间的步行距离最大化?
输入项
您的输入将是一个由两个字符组成的矩形网格,分别代表土地和水。在下面的示例中,土地是#
,水是.
,但是您可以替换任意两个不同的字符。
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
始终将至少有两个地砖。地砖将是连续的(即只有一个岛)。瓷砖也将是连续的(即没有湖泊)。网格的外边界都是水瓦片。地砖将不会以对角线连接:即,您将永远不会看到类似
....
.#..
..#.
....
输出量
您的代码必须输出相同的网格,并在网格上标记了两个小屋位置。在下面的示例中,小屋的位置用X标记,但是您可以替换任何字符,只要它与您的水陆字符不同即可。
小屋的位置必须为两个地砖,以选择它们之间的最大步行距离。我们将步行距离定义为两点之间完全在陆地上的最短路径的长度。地砖被视为水平或垂直相邻,但不对角。
上述岛屿的可能解决方案:
...........
...X#......
..#####....
..#######..
.#########.
...#######.
...#####.X.
....####...
...........
这两个点之间的步行距离是11,这是该岛上任何两个点之间的最大距离。还有另一个距离11解决方案:
...........
...##......
..X####....
..#######..
.#########.
...#######.
...#####.X.
....####...
...........
细节
您的解决方案可能是完整程序或功能。任何默认的输入和输出方法都是可以接受的。
您的输入和输出可以是多行字符串,字符串列表或2D数组/嵌套的字符列表/单字符字符串。您的输出可能(可选)有一个尾随换行符。如上所述,您可以使用任何三个不同的字符来代替#.X
(请在提交中指定要使用的字符)。
测试用例
A.具有独特小屋位置的岛屿:
....
.##.
....
....
.XX.
....
......
......
..##..
...#..
......
......
......
......
..X#..
...X..
......
......
........
.#####..
.##..##.
.#..###.
.##..##.
........
........
.#####..
.##..##.
.#..###.
.#X..#X.
........
.........
.#####.#.
.#...#.#.
.#.###.#.
.#.....#.
.#######.
.........
.........
.#####.X.
.#...#.#.
.#.X##.#.
.#.....#.
.#######.
.........
B.具有多个可能解决方案的岛屿示例:
........
....##..
...####.
..###...
.#####..
.#####..
..##....
........
可能的输出:
........
....#X..
...####.
..###...
.#####..
.X####..
..##....
........
........
....#X..
...####.
..###...
.#####..
.#####..
..X#....
........
........
....##..
...###X.
..###...
.#####..
.X####..
..##....
........
........
....##..
...###X.
..###...
.#####..
.#####..
..X#....
........
C. 大型测试用例
这是代码高尔夫:每种语言中最短的代码胜出。