Подумайте об изображении простой , открытой двумерной кривой на сетке текста шириной W и высотой H, где она Xпредставляет часть кривой и .представляет пустое пространство, а другие символы не используются.
Каждое пространство сетки имеет 8 соседних пространств сетки, его окрестности Мура . Сетки за пределами границ считаются пустыми.
Сетка содержит кривую, если она имеет ровно одно X ИЛИ, если она имеет более одного, Xгде:
- Ровно два человека
Xимеют только одного соседаX. Это конечные точки кривой. - Каждая,
Xкроме конечных точек, соседствует ровно с двумяXs. Они составляют основную часть кривой.
Например, эта сетка, где 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.
Мы можем найти длину кривой, суммируя расстояния между всеми соседними парами Xs:
Расстояние между двумя ортогонально соседними
Xs составляет 1 единицу.XXX XРасстояние между двумя соседними по диагонали
Xs составляет √2 единицы.X. .X.X X.
Например, длина кривой в сетке
XXX. ...X ..X.может быть визуализирован как
так что мы можем видеть, что это 1 + 1 + √2 + √2 = 4.828427 ...
Длина кривой только с одним Xравна нулю.
Когда сетка не образует кривую, ее длина не является четко определенной.
Вызов
Если задана сетка текста Xs и .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.]не правильная кривая, верно?
