Rozważ przedstawienie prostej , otwartej , dwuwymiarowej krzywej na siatce tekstu o szerokości W i szerokości H, gdzie X
reprezentuje część krzywej i .
reprezentuje pustą przestrzeń i nie używa się żadnych innych znaków.
Każda przestrzeń siatki ma 8 sąsiednich pól siatki, sąsiedztwo Moore . Przestrzenie siatki poza granicami są uważane za puste.
Siatka zawiera krzywą, jeśli ma dokładnie jedną X
OR, jeśli ma więcej niż jedną, X
gdzie:
- Dokładnie dwa
X
s mają tylko jeden sąsiadującyX
. To są punkty końcowe krzywej. - Każdy
X
oprócz punktów końcowych sąsiadów dokładnie dwaX
s. Tworzą one większość krzywej.
Na przykład ta siatka, w której W = 9 i H = 4 zawiera krzywą:
....X.... .X.X.X.X. X..X..X.X .XX.....X
Podobnie, te siatki (W = 4, H = 3) mają krzywe:
.... .X.. .... .... .X.X .... X..X ..X. XX.. X.X. ..X. .XX. .X.. .... ....
Te siatki nie zawierają jednak krzywej:
.... .XX. ...X XX.. .... X.X. .... X..X ..XX XX.. .X.X .X.. .... .XX. .X.. .... ...X X.X.
Długość krzywej możemy znaleźć, sumując odległości między wszystkimi sąsiadującymi parami X
s:
Odległość między dwoma sąsiadującymi prostopadle
X
s wynosi 1 jednostkę.XX
X X
Odległość między dwoma sąsiednimi ukośnie
X
s wynosi units2 jednostki.X. .X
.X X.
Na przykład długość krzywej w siatce
XXX. ...X ..X.
może być zwizualizowane jako
więc możemy zobaczyć, że jest to 1 + 1 + √2 + √2 = 4,828427 ...
Długość krzywej z tylko jednym X
wynosi zero.
Gdy siatka nie tworzy krzywej, jej długość nie jest dobrze określona.
Wyzwanie
Biorąc pod uwagę siatkę tekstu X
s i .
s, wypisz długość zawartej krzywej lub wypisz coś takiego jak -1
lub, Null
aby wskazać, że siatka nie ma krzywej.
Do wprowadzania można używać innych znaków niż X
i, .
jeśli to pożądane, a H i W mogą być przyjmowane jako dane wejściowe w razie potrzeby. Wprowadzanie jako zagnieżdżona lista lub macierz wypełniona 1 i 0 zamiast ciągów również jest w porządku.
Możesz wyprowadzić liczbę zmiennoprzecinkową dla długości krzywej lub alternatywnie dwie liczby całkowite A i B gdzie length = A + B*√2
.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
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.]
nie jest poprawna krzywa, prawda?