Thử thách
Viết chương trình, đưa ra một mảng boolean 2 chiều (tương đương, một bitmap đơn sắc), đưa ra một loạt các đa giác mô tả đường viền của khu vực đó là đúng true (1).
Đầu vào được cung cấp dưới dạng một chuỗi các ký tự '#'
(băm), ' '
(dấu cách) và \n
(dòng mới). Các dòng có thể khác nhau về chiều dài, trong trường hợp các phần bị thiếu được coi là khoảng trắng. Đầu ra phải là một danh sách đa giác (được phân tách bằng dòng mới), mỗi đa giác được biểu thị bằng một danh sách tọa độ (được phân tách bằng dấu phẩy).
Ví dụ & Yêu cầu
Các tọa độ phải được liệt kê theo thứ tự chiều kim đồng hồ. Đầu vào:
#
Đầu ra chấp nhận được bao gồm:
(0,0), (1,0), (1,1), (0,1) (1,0), (1,1), (0,1), (0,0) (1,1), (0,1), (0,0), (1,0) (0,1), (0,0), (1,0), (1,1)
Các vùng khác nhau phải trả lại nhiều đa giác. Đầu vào:
# #
Ví dụ đầu ra (đầu ra thực tế phải bao gồm hai dòng):
(0,0), (1,0), (1,1), (0,1) (2,0), (3,0), (3,1), (2,1)
Các lỗ trong đa giác phải được liệt kê dưới dạng đa giác riêng biệt, nhưng theo thứ tự ngược chiều kim đồng hồ. Đầu vào:
### # # ###
Ví dụ đầu ra:
(0,0), (3,0), (3,3), (0,3) (1,1), (1,2), (2,2), (2,1)
Bạn có thể tự do lựa chọn các đỉnh liền kề theo đường chéo có tham gia hay không. Đầu vào:
# #
Ví dụ đầu ra:
(0,0), (1,0), (1,1), (0,1) (1,1), (2,1), (2,2), (1,2)
hoặc là
(0,0), (1,0), (1,1), (2,1), (2,2), (1,2), (1,1), (0, 1)
Các danh sách tọa độ không cần phải tối ưu ngắn. Ví dụ:
##
Đầu ra chấp nhận được:
(0,0), (2,0), (2,1), (0,1) // Redundant coordinates along a straight line are acceptable (0,0), (1,0), (2,0), (2,1), (1,1), (0,1) // Duplicate start- and end-point are acceptable (0,0), (2,0), (2,1), (0,1), (0,0)
Như thường lệ, chương trình ngắn nhất thắng Thắng.