Thách thức này bao gồm mã hóa trình thông dịch cho ngôn ngữ mô tả bức tranh Mondrian (MPDL).
Định nghĩa ngôn ngữ
Ngôn ngữ hoạt động trên một chồng hình chữ nhật. Một hình chữ nhật được xác định bởi tọa độ trên bên trái và tọa độ dưới bên phải của nó. Tọa độ phải là số nguyên. Ngăn xếp được khởi tạo với một hình chữ nhật duy nhất với các thuộc tính(1,1,254,254)
Mỗi lệnh có định dạng sau:
<character><integer>
Có ba lệnh:
v<integer>
: thực hiện phân chia dọc trên hình chữ nhật mới nhất trong ngăn xếp, tại vị trí được chỉ định bởi tham số (tính theo phần trăm). Hình chữ nhật nguồn được xóa khỏi ngăn xếp và thay thế bằng hai hình chữ nhật mới là kết quả của sự phân chia. Hình chữ nhật bên trái được đẩy trên ngăn xếp, sau đó hình chữ nhật bên phải. Vì tọa độ hình chữ nhật là số nguyên, phân số phải được làm tròn thành số nguyên nhỏ hơn lớn nhất.
h<integer>
: chia ngang. Hình chữ nhật trên cùng được đẩy trên ngăn xếp, sau đó hình chữ nhật dưới cùng.
c<integer>
: xóa hình chữ nhật mới nhất khỏi ngăn xếp và tô nó thành màu cho dưới dạng tham số. 1 = trắng, 2 = đỏ, 3 = xanh, 4 = vàng
Thử thách
Viết chương trình lấy tham số mô tả bức tranh và tạo một biểu diễn bitmap 256x256 của các hình chữ nhật được vẽ. Các hình chữ nhật phải được phân tách bằng một đường màu đen 3 pixel. Một hình chữ nhật một hoặc hai pixel phải có các pixel không phải màu đen của anh ta bị ẩn bởi các pixel đen viền.
Đầu vào có thể được đọc dưới dạng tham số hoặc dưới dạng tệp, tùy thuộc vào bạn. Các lệnh nên được phân tách bằng khoảng trắng. Bạn có thể giả sử rằng tệp đầu vào có cú pháp chính xác và không có dấu cách hoặc dấu cách hàng đầu, tab, v.v. Đầu ra có thể được hiển thị trực tiếp trên màn hình hoặc lưu vào tệp, tùy theo bạn.
Mã ngắn nhất sẽ thắng.
Kiểm tra
Nguồn sau:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Nên sản xuất Thành phần II có màu Đỏ, Xanh và Vàng :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
và cách
đối số phải được tính bằng pixel