这是Island Golf系列挑战中的第一个。下一个挑战
给定ASCII艺术形式的孤岛,请输出对其进行绕行的最佳路径。
输入项
您的输入将是一个由两个字符组成的矩形网格,分别代表土地和水。在下面的示例中,土地是#
,水是.
,但是您可以替换任意两个不同的字符。
...........
...##......
..#####....
..#######..
.#########.
...#######.
...#####.#.
....####...
...........
始终将至少有一个地砖。地砖将是连续的(即只有一个岛)。瓷砖也将是连续的(即没有湖泊)。网格的外边界都是水瓦片。地砖将不会以对角线连接:即,您将永远不会看到类似
....
.#..
..#.
....
输出量
您的代码必须输出相同的网格,并在其上画出最短的环绕。在下面的示例中,环行路径用绘制o
,但是您可以替换任何字符,只要它与您的水陆字符不同即可。
一个环游是一个简单的封闭曲线,完全是靠水的瓷砖画,能够完全包围在网格中的所有土地的瓷砖。对角线的连接被允许的。例如,这是上述岛屿的环游世界(但不是最短的一个):
.ooooo.....
o..##.oo...
o.#####.o..
o.#######o.
o#########o
ooo#######o
..o#####.#o
..oo####..o
....oooooo.
环行的长度计算如下:对于路径上的每对相邻的图块,如果它们是水平或垂直连接的,则加1;否则,为0。如果对角连接,则加√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..
细节
您的解决方案可能是完整程序或功能。任何默认的输入和输出方法都是可以接受的。
您的输入和输出可以是多行字符串或字符串列表。如果您的语言具有不同于单字符字符串的字符类型,则可以在上一句中用“字符列表”代替“字符串”。如果您的语言需要输入网格的高度和/或宽度,则可以输入。您的输出可能(可选)有一个尾随换行符。如上所述,您可以使用任何三个不同的字符来代替#.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...
C. 大型测试用例
这是代码高尔夫:每种语言中最短的代码胜出。