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
Xs chỉ có một hàng xómX. Đây là những điểm cuối của đường cong. - Mỗi
Xbên cạnh các điểm cuối hàng xóm chính xác haiXs. 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.....XTươ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 Xs lân cận :
Khoảng cách giữa hai
Xs lân cận trực giao là 1 đơn vị.XXX XKhoảng cách giữa hai
Xs 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 Xlà 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 Xs 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ư -1hoặ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 Xvà .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?
