Подумайте об изображении простой , открытой двумерной кривой на сетке текста шириной W и высотой H, где она X
представляет часть кривой и .
представляет пустое пространство, а другие символы не используются.
Каждое пространство сетки имеет 8 соседних пространств сетки, его окрестности Мура . Сетки за пределами границ считаются пустыми.
Сетка содержит кривую, если она имеет ровно одно X
ИЛИ, если она имеет более одного, X
где:
- Ровно два человека
X
имеют только одного соседаX
. Это конечные точки кривой. - Каждая,
X
кроме конечных точек, соседствует ровно с двумяX
s. Они составляют основную часть кривой.
Например, эта сетка, где W = 9 и H = 4 содержит кривую:
....X.... .X.X.X.X. X..X..X.X .XX.....X
Аналогично, эти сетки (W = 4, H = 3) имеют кривые:
.... .X.. .... .... .X.X .... X..X ..X. XX.. X.X. ..X. .XX. .X.. .... ....
Эти сетки, однако, не содержат кривую:
.... .XX. ...X XX.. .... X.X. .... X..X ..XX XX.. .X.X .X.. .... .XX. .X.. .... ...X X.X.
Мы можем найти длину кривой, суммируя расстояния между всеми соседними парами X
s:
Расстояние между двумя ортогонально соседними
X
s составляет 1 единицу.XX
X X
Расстояние между двумя соседними по диагонали
X
s составляет √2 единицы.X. .X
.X X.
Например, длина кривой в сетке
XXX. ...X ..X.
может быть визуализирован как
так что мы можем видеть, что это 1 + 1 + √2 + √2 = 4.828427 ...
Длина кривой только с одним X
равна нулю.
Когда сетка не образует кривую, ее длина не является четко определенной.
Вызов
Если задана сетка текста X
s и .
s, выведите длину кривой, которую она содержит, либо выведите что-то вроде -1
или, Null
чтобы указать, что сетка не имеет кривой.
Для ввода вы можете использовать другие символы, чем X
и .
при желании, и H и W могут быть приняты в качестве ввода при необходимости. Ввод в виде вложенного списка или матрицы, заполненной 1 и 0 вместо строки, также подойдет.
Вы можете вывести число с плавающей запятой для длины кривой или, альтернативно, два целых числа A и B, где length = A + B*√2
.
Самый короткий код в байтах побеждает.
Тестовые случаи
XXX.
...X
..X.
2 + 2*√2 = 4.828427...
....X....
.X.X.X.X.
X..X..X.X
.XX.....X
3 + 8*√2 = 14.313708...
....
....
..X.
0 + 0*√2 = 0
.X..
X..X
.XX.
1 + 3*√2 = 5.242640...
....
..X.
.X..
0 + 1*√2 = 1.414213...
....
XX..
....
1 + 0*√2 = 1
.X.X
X.X.
....
0 + 3*√2 = 4.242640...
....
....
....
....
-1
.XX.
X..X
.XX.
-1
...X
..XX
.X..
-1
....
.X.X
...X
-1
X.X.
.X..
X.X.
-1
[x.x,...,.x.]
не правильная кривая, верно?