Dưới đây là mô tả ASCII khá đơn giản về một cuốn sách mở:
|\
| \
| \
| \
| \__________
| || |
| || Lorem i |
\ || psum do |
\ || lor sit |
\ || amet, |
\ || consect |
\||_________|
Lưu ý rằng phần văn bản chỉ ở trên trang bên phải và có 7 ký tự rộng 5 ký tự. Cũng lưu ý rằng cạnh trên của cuốn sách có 5 dấu gạch chéo ngược và 10 dấu gạch dưới. Số 10 xuất phát từ chiều rộng văn bản cộng với 3 và 5 là một nửa của 10.
Sử dụng cùng một định dạng tỷ lệ, chúng ta có thể thay đổi kích thước cuốn sách để có một vùng văn bản w ký tự rộng và h cao, trong đó w là bất kỳ số nguyên dương lẻ nào và h là bất kỳ số nguyên dương nào.
Một số sách w × h : 1 × 1, 1 × 2, 3 × 2
|\
|\ | \
|\ | \____ | \______
| \____ | || | | || |
| || | | || L | \ || Lor |
\ || L | \ || o | \ || em |
\||___| \||___| \||_____|
Số lượng dấu gạch dưới ở trên cùng luôn là w +3 và số dấu gạch chéo ngược luôn luôn là ( w +3) / 2.
Mục tiêu
Viết một progam lấy tên tệp và w và h làm đối số dòng lệnh và xuất một cuốn sách có các kích thước văn bản đó thành thiết bị xuất chuẩn, hiển thị nội dung của tệp.
Khi tệp có nhiều văn bản hơn sẽ vừa trong một trang, N
khóa sẽ in trang tiếp theo và B
sẽ quay lại một trang. Không có gì xảy ra nếu B
được nhấn từ trang đầu tiên hoặc N
được nhấn từ trang cuối cùng. Chương trình sẽ dừng khi Q
nhấn phím.
Thí dụ
Giả sử f.txt
chứa Lorem ipsum dol?
và người dùng đã nhấn chuỗi phím N N B N N Q
. Chương trình sẽ chạy một cái gì đó như thế này:
>>> bookmaker f.txt 3 2
|\
| \
| \______
| || |
\ || Lor |
\ || em |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
|\
| \
| \______
| || |
\ || ips |
\ || um |
\||_____|
|\
| \
| \______
| || |
\ || dol |
\ || ? |
\||_____|
>>>
Lưu ý rằng có một dòng mới sau mỗi cuốn sách và không có dấu cách. Điều này là bắt buộc.
Ghi chú
- Bạn có thể giả sử tệp chỉ chứa các ký tự ASCII có thể in (hex 20 đến 7E).
- In một ký tự ở mỗi vị trí có sẵn, bất kể ranh giới từ.
- w và h là các đối số tùy chọn mặc định là 7 và 5 tương ứng. Chương trình của bạn sẽ được cung cấp hoặc không hoặc cả hai. (Bạn có thể cho rằng đầu vào luôn được hình thành tốt.)
- Điền vào bất kỳ không gian văn bản trống nào trên trang cuối cùng với khoảng trắng.
Q
vẫn nên được yêu cầu thoát nếu chỉ có một trang.
Chiến thắng
Chương trình ngắn nhất tính bằng byte sau khi tiền thưởng được áp dụng sẽ thắng.
Tiền thưởng
- Xóa các khoảng trắng hàng đầu để mỗi dòng bắt đầu bằng một từ (hoặc phân đoạn từ). ví dụ
| amet, |
trong ví dụ đầu tiên sẽ trở thành| amet, c |
. (-30 byte) - Xóa màn hình của những cuốn sách được vẽ trước đó sau
N
hoặcB
được nhấn (vàT
nếu bạn thực hiện phần thưởng sau này) để cuốn sách trông giống như các trang thay đổi của nó. (-20 byte) Tạo
T
khóa ngay lập tức chuyển đổi giữa văn bản được vẽ từ trái sang phải từ trên xuống dưới (mặc định), từ trên xuống dưới từ trái sang phải. Nếu bạn đã thực hiện phần thưởng đầu tiên, nó sẽ hoạt động cho các cột ở chế độ từ trên xuống dưới. (-100 byte)Ví dụ:
|\ | \ | \______ | || | \ || Lor | \ || em | \||_____|
trở thành
|\ | \ | \______ | || | \ || Lrm | \ || oe | \||_____|
\033[2J\033[;H