Hãy xem xét một lưới hai chiều hình chữ nhật trong đó mỗi ô có thể trống ( .
) hoặc full ( 0
).
ví dụ
..00....
0000....
.00000..
000...00
..000000
000.00..
Lưới được coi là vô hạn, tất cả các ô bên ngoài vùng được mô tả đều trống.
Mục tiêu là che các khoảng trống đã lấp đầy và để các khoảng trống mở bằng cách sử dụng một bộ 7 viên gạch có hình dạng riêng biệt, mỗi viên chiếm 4 ô (2 × 2) của lưới.
Đây là 7 viên gạch:
Khối - 1 biến thể
11 11
Tấm - 2 biến thể
.. 22
33 ..
Cầu thang - 4 biến thể
.4 44
5. 55
66 .6
77 7.
Những viên gạch này phải luôn thẳng hàng với một lưới có các ô rộng và cao gấp đôi các ô của lưới đầu vào. Mỗi viên gạch chỉ có thể chiếm một ô của lưới lớn hơn này nhưng lưới nhỏ hơn có thể được dịch (dịch chuyển lên, xuống, trái, phải) bên dưới lưới lớn hơn để cung cấp thêm tùy chọn cho việc tìm nắp. Cả lưới và gạch riêng lẻ đều không thể xoay được.
Vì vậy, một cách để bao gồm (còn gọi là giải quyết) ví dụ trên là như thế này:
..11....
2211....
.47733..
447...22
..771133
227.11..
(Các viên gạch lân cận giống hệt nhau vẫn có thể gây ra sự mơ hồ nhưng cẩn thận xác định lưới lớn hơn giải quyết điều đó.)
Một giải pháp không hợp lệ cho
000000
000000
Là
566774
556744
bởi vì các viên gạch không thẳng hàng với lưới lớn hơn và cũng không chỉ chiếm một ô của nó.
Một giải pháp hợp lệ ở đây là 3 khối liên tiếp:
111111
111111
Và một giải pháp hợp lệ khác liên quan đến 6 tấm:
......
222222
333333
......
Vì vậy, lưu ý rằng một số lưới đầu vào có nhiều giải pháp .
Một giải pháp không hợp lệ cho
00.00
00...
Là
11.33
11...
bởi vì các viên gạch không thẳng hàng với lưới lớn hơn. Tấm sẽ cần phải di chuyển sang trái hoặc phải bởi một, nhưng sau đó tất nhiên lớp phủ sẽ không đầy đủ. Lưới đầu vào này không có giải pháp .
Thử thách
Viết chương trình đưa vào (thông qua stdin / dòng lệnh) một khối văn bản hình chữ nhật của .
'và 0
' đại diện cho một lưới được bao phủ.
Nếu có một giải pháp che phủ hợp lệ, hãy in (thông qua thiết bị xuất chuẩn) bất kỳ một giải pháp nào theo cách tương tự như trên, thay thế tất cả 0
các giải pháp phù hợp 1
thông qua các 7
viên gạch.
Nếu không có giải pháp, chương trình của bạn không nên xuất bất cứ thứ gì, chỉ lặng lẽ kết thúc bình thường.
Ghi chú
Đầu vào và đầu ra không cần phải có cùng kích thước hình chữ nhật. Đầu ra của bạn có thể có các hàng và / hoặc cột không liên quan của tất cả
.
(miễn là chúng không làm mất hiệu lực giải pháp).Cũng có thể cắt bớt các hàng và cột của tất cả
.
nếu nó không ảnh hưởng đến các không gian được lấp đầy. ví dụ222222 333333
là một giải pháp hợp lệ để
000000 000000
Ngược lại, hai cột trống trong
00..00
không thể được loại bỏ vì điều đó sẽ làm xáo trộn các không gian được lấp đầy.Bạn có thể tùy ý giả sử đầu vào có một dòng mới duy nhất. Một dòng mới duy nhất trong đầu ra là tốt, ngay cả trong trường hợp không có giải pháp.
Các lưới hoàn toàn trống (tất cả
.
) và lưới 0 × 0 tầm thường không phải là trường hợp đầu vào mà bạn cần phải lo lắng. Nhưng lưới 1 × 10
là, như tất cả các lưới khác có chứa ít nhất một lưới0
. (Bạn không thể cho rằng chiều rộng hoặc chiều cao của lưới đầu vào là chẵn!)Thay vì một chương trình, bạn có thể viết một hàm lấy đầu vào làm đối số chuỗi và in đầu ra bình thường hoặc trả về dưới dạng chuỗi. Bất kỳ giá trị giả có thể được trả lại nếu không có giải pháp.
Bạn có thể sử dụng bất kỳ 9 ký tự ASCII có thể in riêng biệt nào thay thế
.
0
1
2
3
4
5
6
7
. Chỉ cần chắc chắn để nói những gì thay thế của bạn là! Dòng mới phải được giữ nguyên.
Chấm điểm
Mã ngắn nhất tính bằng byte thắng. Tiebreaker là bài bình chọn cao nhất.
Thử thách này được lấy cảm hứng từ các khối , tấm và cầu thang trong Minecraft , tuân theo các quy tắc tương tự được mô tả ở đây. Nếu bạn thích PPCG và Minecraft, bạn có thể muốn kiểm tra Máy chủ Minecraft PPCG .