Viết chương trình hoặc hàm có ba số nguyên, chiều rộng w
, chiều cao h
và số bước s
. Bạn sẽ vẽ một bước đi ngẫu nhiên không tự giao nhau s
dài trên một hình ảnh 5*w
theo 5*h
pixel trong đó cứ 5 ô 5 pixel là trống (màu be thuần khiết) hoặc một trong mười hai "ống" đơn giản này:
Hình ảnh trên được phóng to để hiển thị chi tiết. Dưới đây là các đường ống ở kích thước thực tế:
(Các đường màu xám chỉ để tách các loại ống.)
Lối đi ngẫu nhiên sẽ là một đường ống liên tục duy nhất bắt đầu tại một điểm cuối đường ống (một trong bốn loại ống dưới cùng) và kết thúc tại điểm cuối đường ống khác.
Bắt đầu với một ô trống w
bằng h
lưới và chọn ngẫu nhiên một ô làm điểm bắt đầu. Sau đó chọn ngẫu nhiên một trong bốn hướng để bắt đầu và vẽ điểm cuối đường ống tương ứng. Ô bắt đầu này đánh dấu bước đầu tiên trong bước đi của bạn và mỗi khi bạn vẽ một ô mới hoặc ghi đè lên một ô hiện có, nó sẽ được tính là một bước khác.
Bây giờ, lặp đi lặp lại, chọn ngẫu nhiên để đi sang phải, trái hoặc thẳng, vẽ ô đường ống thích hợp nếu hướng được chọn là hợp lệ. Quay lại và chọn lại nếu một hướng không hợp lệ cho đến khi s
đường dẫn bước hoàn chỉnh được hình thành. Đường dẫn phải kết thúc bằng điểm cuối đường ống, có thể ở bất kỳ đâu trên lưới, tùy thuộc vào khóa học mà đường dẫn đã đi.
Điều rất quan trọng cần lưu ý là chỉ có hai ô ống thẳng có thể được ghi đè và chỉ bởi ô ống thẳng có hướng ngược lại, kết quả là một ô giao nhau. Mặt khác, tất cả các ống phải được đặt trong các ô trống.
Khi một giao lộ được vẽ, một phần của đường dẫn nằm dọc từ ô bắt đầu sẽ được vẽ trên đầu.
Tùy thuộc vào việc lưới điện có các điều kiện biên định kỳ (PBC) hay không, tức là liệu một đường ống thoát ra từ một phía của lưới sẽ đi ra ở phía bên kia. Không có PBC, ranh giới lưới được tính là một rào cản mà bạn có thể gặp phải giống như các đường ống khác.
Trường hợp đặc biệt
- Khi
s
là 0, không có đường ống nào được vẽ và đầu ra phải trống5*w
bằng5*h
hình ảnh (tức là tất cả màu be). Khi
s
còn 1 ống còn sơ khainên được vẽ tại ô bắt đầu được chọn ngẫu nhiên.
Những chi tiết khác
- Bạn có thể cho rằng đó
s
là nhiều nhấtw*h
vì vậy một con đường sẽ luôn luôn có thể. (Mặc dù các đường dẫn dài hơn có thể do các giao lộ.) w
vàh
sẽ luôn tích cực.- Tất cả các lựa chọn ngẫu nhiên phải được thống nhất ngẫu nhiên. ví dụ: bạn không nên tránh giao lộ khi có thể ngay cả khi điều đó làm cho vấn đề dễ dàng hơn. Máy phát điện giả ngẫu nhiên được cho phép.
- Bất kỳ ba màu khác biệt trực quan có thể được sử dụng thay cho màu đen, xanh lam và màu be.
- Hình ảnh đầu ra của bạn có thể được phóng to để chúng thực sự
5*w*k
bằng5*h*k
pixel trong đók
là một số nguyên dương. (Mở rộng bất kỳ ví dụ nào bạn đăng được khuyên ngay cả khi bạnk
là 1.) - Bất kỳ định dạng tệp hình ảnh lossless phổ biến nào cũng có thể được sử dụng và hình ảnh có thể được lưu vào một tệp, được hiển thị hoặc được phun thô vào thiết bị xuất chuẩn.
Mã ngắn nhất tính bằng byte thắng.
Ví dụ
(Tất cả được mở rộng thêm 500%.)
Nếu đầu vào là w=2, h=1, s=0
thì đầu ra sẽ luôn là:
Nếu đầu vào là w=2, h=1, s=1
đầu ra sẽ là một trong những hình ảnh có cơ hội như nhau:
Nếu đầu vào là w=2, h=1, s=2
thì đầu ra sẽ là
hoặc có thể
nếu lưới được coi là có PBC.
(Lưu ý rằng bắt đầu đường dẫn như thế sẽ không thể thực hiện bước thứ hai.)
Dưới đây là một số kết quả đầu ra có thể cho w=3, h=2, s=6
, giả sử PBC:
Đây là một đầu ra có thể cho w=3, h=3, s=9
, giả sử PBC:
Lưu ý rằng đường dẫn không cần phải bao gồm tất cả các ô do giao lộ được tính là hai bước. Ngoài ra, chúng ta có thể suy luận rằng điểm cuối góc là ô bắt đầu do cầu vượt giao cắt phải được rút ra sau đó. Do đó chúng ta có thể suy ra chuỗi các lựa chọn ngẫu nhiên đã được thực hiện:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Cuối cùng, đây là ví dụ về w=4, h=5, s=20
và w=4, h=5, s=16
:
You will be drawing a non-self-intersecting random walk
... nó có tự giao nhau hay không?