Xem xét mô tả một đường cong hai chiều đơn giản , mở , trên W rộng bằng lưới văn bản cao H trong đó X
đại diện cho một phần của đường cong và .
đại diện cho không gian trống và không có ký tự nào khác được sử dụng.
Mỗi không gian lưới có 8 không gian lưới lân cận, khu phố Moore của nó . Không gian lưới vượt ra ngoài biên giới được coi là trống rỗng.
Một lưới chứa một đường cong nếu nó có chính xác một X
HOẶC nếu nó có nhiều hơn một trong X
đó:
- Chính xác là hai
X
s chỉ có một hàng xómX
. Đây là những điểm cuối của đường cong. - Mỗi
X
bên cạnh các điểm cuối hàng xóm chính xác haiX
s. Chúng tạo thành phần lớn của đường cong.
Ví dụ: lưới này trong đó W = 9 và H = 4 chứa một đường cong:
....X.... .X.X.X.X. X..X..X.X .XX.....X
Tương tự, các lưới này (W = 4, H = 3) có các đường cong:
.... .X.. .... .... .X.X .... X..X ..X. XX.. X.X. ..X. .XX. .X.. .... ....
Các lưới này, tuy nhiên, không chứa một đường cong:
.... .XX. ...X XX.. .... X.X. .... X..X ..XX XX.. .X.X .X.. .... .XX. .X.. .... ...X X.X.
Chúng ta có thể tìm thấy độ dài của một đường cong bằng cách tính tổng khoảng cách giữa tất cả các cặp X
s lân cận :
Khoảng cách giữa hai
X
s lân cận trực giao là 1 đơn vị.XX
X X
Khoảng cách giữa hai
X
s lân cận chéo là units2 đơn vị.X. .X
.X X.
Ví dụ: chiều dài của đường cong trong lưới
XXX. ...X ..X.
có thể được hình dung như
vì vậy chúng ta có thể thấy nó là 1 + 1 + 2 + 2 = 4.828427 ...
Độ dài của một đường cong chỉ có một X
là bằng không.
Khi lưới không tạo thành đường cong, chiều dài của nó không được xác định rõ.
Thử thách
Cho một lưới văn bản của X
s và .
s, xuất độ dài của đường cong mà nó chứa hoặc nếu không thì xuất ra một cái gì đó như -1
hoặc Null
để chỉ ra lưới không có đường cong.
Đối với đầu vào, bạn có thể sử dụng các ký tự khác ngoài X
và .
nếu muốn, và H và W có thể được lấy làm đầu vào nếu cần. Nhập vào dưới dạng một danh sách lồng nhau hoặc ma trận chứa đầy 1 và 0 thay vì một chuỗi cũng tốt.
Bạn có thể xuất một số float cho chiều dài đường cong hoặc thay vào đó là hai số nguyên A và B trong đó length = A + B*√2
.
Mã ngắn nhất tính bằng byte thắng.
Các trường hợp thử nghiệm
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.]
không phải là một đường cong hợp lệ, phải không?