Piet
Đề bài
Mô tả
Piet là một ngôn ngữ lập trình bí truyền (esoteric) nổi tiếng, trong đó chương trình được biểu diễn bằng các khối điểm ảnh (pixel) nhiều màu. Trong bài này ta dùng một tập luật đơn giản hóa của Piet.
Chương trình là một ảnh chữ nhật gồm các điểm ảnh có màu hoặc màu đen. Màu của mỗi điểm ảnh là một chữ số từ đến , trong đó là màu đen. Một khối là một hình chữ nhật gồm các điểm ảnh cùng màu (khác đen). Bảo đảm rằng mọi nhóm điểm ảnh cùng màu liên thông đều tạo thành khối chữ nhật. Các điểm ảnh đen có thể tạo thành hình dạng bất kỳ.
Con trỏ lệnh (IP) gồm ba thành phần:
- Con trỏ khối (BP): khối màu hiện tại (không có khái niệm điểm ảnh hiện tại bên trong khối).
- Con trỏ hướng (DP): chỉ về một trong bốn hướng trái, phải, lên, xuống.
- Bộ chọn khối (CP): chỉ về bên trái hoặc bên phải so với hướng DP; theo giá trị tuyệt đối, CP lệch so với DP độ ngược chiều kim đồng hồ (trái) hoặc thuận chiều kim đồng hồ (phải).
Ban đầu BP chỉ về khối chứa điểm ảnh góc trên bên trái, DP chỉ sang phải, CP chỉ sang trái.
Một bước biến đổi trạng thái IP như sau. Bộ thông dịch tìm cạnh xa nhất của khối hiện tại theo hướng DP. Trong các điểm ảnh tạo nên cạnh đó, chọn điểm ảnh xa nhất theo hướng CP. Sau đó BP thử di chuyển từ điểm ảnh này sang điểm ảnh kế tiếp theo hướng DP:
- Nếu điểm ảnh kế tiếp thuộc một khối có màu, khối đó trở thành khối hiện tại, DP và CP giữ nguyên.
- Nếu điểm ảnh kế tiếp là màu đen hoặc nằm ngoài chương trình, BP giữ nguyên nhưng DP và CP thay đổi: nếu CP đang chỉ sang trái thì đổi sang phải (DP giữ nguyên); nếu CP đang chỉ sang phải thì đổi sang trái và DP quay độ thuận chiều kim đồng hồ.
Bảo đảm rằng BP không bao giờ chỉ về khối đen (điểm ảnh góc trên bên trái không phải màu đen).
Cho một chương trình Piet, hãy xác định màu của khối hiện tại sau bước thông dịch.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và : số dòng của ảnh và số bước thông dịch.
- dòng tiếp theo mô tả các dòng của chương trình; tất cả có cùng độ dài, gồm các ký tự chữ số –. Ký tự đầu tiên của dòng đầu tiên khác .
Dữ liệu ra
- Màu (một chữ số) của khối hiện tại sau bước.
Ràng buộc
- Mỗi dòng có độ dài từ đến ký tự.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 10 12 43 |
1 | Sau bước 1 khối 2 thành hiện tại và giữ vậy thêm hai bước. Sau bước 4 BP sang khối 3, sau bước 7 sang khối 4, và sau bước 10 BP quay lại khối 1. |
| 3 12 1423 6624 6625 |
6 | Sau bước con trỏ dừng ở khối màu . |
| 5 9 10345 23456 34567 45678 56789 |
5 | Ô góc trên trái là khối ; ô bên phải nó là khối màu đen , buộc DP/CP đổi ngay từ bước đầu. |
Bình luận