Розглянемо зображення простої , відкритої , двовимірної кривої на широкій W високій сітці тексту, де Xпредставлена частина кривої і .являє собою порожній простір, а інші символи не використовуються.
Кожен сітковий простір має 8 сусідніх сітових просторів, його квартал Мура . Простір сітки за межами кордонів вважається порожнім.
Сітка містить криву, якщо вона має точно одну X АБО, якщо вона має більше однієї, Xде:
- Рівно два
Xs мають лише одну сусіднюX. Це кінцеві точки кривої. - У кожного
Xкрім кінцевих точок сусідів рівно двіXс. Вони утворюють основну частину кривої.
Наприклад, ця сітка, де 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 при необхідності можуть бути прийняті як введення. Введення у вигляді вкладеного списку чи матриці, заповненої 1s та 0s замість рядка, також добре.
Ви можете вивести поплавок на довжину кривої або, замість того, два цілі числа 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.]це невірна крива, правда?
