곡선의 일부를 나타내며 빈 공간을 나타내며 다른 문자는 사용하지 않는 H 높이의 텍스트 격자에 의해 W 너비의 W 넓이에 단순 하고 개방 된 2 차원 곡선을 묘사하는 것을 고려하십시오 .X
.
모든 그리드 공간에는 8 개의 인접한 그리드 공간 인 Moore 인근이 있습니다. 경계를 벗어난 그리드 공간은 비어있는 것으로 간주됩니다.
그리드에 정확히 하나의 OR이 있으면 그리드에 다음이있는 경우 둘 이상인 경우에 커브 가 포함 됩니다 .X
X
- 정확히 두 개
X
는 이웃이 하나뿐입니다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.
이웃하는 모든 쌍 사이의 거리를 합하여 곡선의 길이를 찾을 수 있습니다 X
.
두 개의 직교하는
X
s 사이의 거리는 1 단위입니다.XX
X X
두 개의 대각선으로 인접한
X
s 사이의 거리는 √2 단위입니다.X. .X
.X X.
예를 들어, 그리드에서 커브의 길이
XXX. ...X ..X.
로 시각화 할 수 있습니다
그래서 우리는 그것이 1 + 1 + √2 + √2 = 4.828427임을 알 수 있습니다 ...
하나만있는 곡선의 길이 X
는 0입니다.
그리드가 곡선을 형성하지 않으면 길이가 잘 정의되지 않습니다.
도전
X
s와 .
s 의 텍스트 그리드가 주어지면 포함 된 커브의 길이를 출력 -1
하거나 Null
그리드에 커브가 없음을 나타내는 또는와 같은 것을 출력 하십시오.
입력의 경우는 이외의 문자를 사용할 수 X
및 .
원하는 경우, 필요한 경우 H와 W는 입력으로 취할 수있다. 문자열 대신 1과 0으로 채워진 중첩 목록 또는 행렬로 입력해도 좋습니다.
곡선 길이에 대한 float 또는 두 개의 정수 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.]
유효한 곡선이 아닌가?