Viết chương trình để tạo một tệp chứa lưới ô chữ mà người dùng có thể in ra và giải câu đố.
Đầu vào
Tên tệp đại diện cho tệp lưới ô chữ và tùy chọn tên tệp thứ hai đại diện cho tệp đánh số ô chữ. Đầu vào phải được chấp nhận bởi một phương tiện thông thường cho môi trường lập trình của bạn: đối số dòng lệnh, đầu vào tiêu chuẩn, biểu mẫu web, v.v.
Bạn có thể cho rằng ô chữ đã được xác thực và nếu sử dụng tệp đánh số tương ứng với lưới được cung cấp .
Định dạng tệp lưới: Dòng đầu tiên bao gồm hai hằng số nguyên được phân tách bằng khoảng trắng M và N. Theo sau dòng đó là các dòng M, mỗi dòng bao gồm N ký tự (cộng với một dòng mới) được chọn từ [#A-Z ]
. Các ký tự này được giải thích sao '#'
cho chỉ ra một hình vuông bị chặn, ' '
một hình vuông mở trong câu đố không có nội dung đã biết và bất kỳ chữ cái nào có hình vuông mở có chứa chữ cái đó.
Định dạng tệp đánh số Các dòng bắt đầu bằng '#' bị bỏ qua và có thể được sử dụng để nhận xét. Tất cả các dòng khác chứa một tab tách triplet i
, m
, n
nơi i
đại diện cho một số được in trên lưới và m
và n
đại diện cho hàng và cột của quảng trường, nơi nó sẽ được in. Số lượng của cả hàng và cột bắt đầu từ 1.
Đầu ra
Đầu ra sẽ là một tập tin mà người dùng có thể in ra và giải ô chữ. ASCII, postcript, pdf, png và bất kỳ định dạng hợp lý nào khác sẽ được chấp nhận, nhưng tất cả đều phải tuân theo các quy tắc sau:
- Phải có một quy tắc xung quanh toàn bộ câu đố và giữa mỗi cặp hình vuông.
- Các ô vuông bị chặn phải được điền vào tối.
- Trong hình vuông chơi đại diện cho sự bắt đầu của một đầu mối được đánh số (ngang hoặc xuống) phải được cung cấp một số ở góc trên, bên trái của hình vuông, trong khi để lại phần lớn ô vuông để chơi để ghi vào. Lưu ý rằng lưới điển hình được công bố trong các bài báo sẽ có nhiều hàng chục manh mối và có thể có hơn 100.
Đầu ra sẽ là của lưới một mình, không có danh sách các đầu mối.
Đầu ra phải được gửi đến đích thông thường (một tệp có tên được lấy từ tên tệp đầu vào, được sản xuất dưới dạng trang web, v.v.)
Trường hợp thử nghiệm
Đưa ra một đầu vào của
5 5
# ##
#
#
#
## #
góc bắt đầu của đầu ra ASCII có thể chấp nhận có thể trông như thế này
+-----+-----+-----+---
|#####|1 |2 |###
|#####| | |###
|#####| | |###
+-----+-----+-----+---
|#####|3 | |4
|#####| | |
|#####| | |
+-----+-----+-----+---
|6 | |#####|
| | |#####|
Những người sử dụng các định dạng đồ họa nên lấy cảm hứng từ các nguồn in thông thường.
Sơ đồ đánh số
Một lưới được đánh số chính xác có các thuộc tính sau:
- Việc đánh số bắt đầu từ 1.
- Không có cột hoặc khoảng của các ô vuông mở không bị đánh số.
- Các số sẽ được bắt gặp theo thứ tự đếm bằng cách quét từ hàng trên xuống dưới lấy từng hàng từ trái sang phải.
Qua một bên
Đây là thứ ba của một số thách thức liên quan đến ô chữ. Tôi dự định sử dụng một tập hợp các định dạng tệp nhất quán xuyên suốt và để xây dựng một bộ tiện ích liên quan đến ô chữ đáng kính trong quy trình.
Những thách thức trước trong loạt bài này: