เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เวลาในสามจำนวนเต็มความกว้างw
, ความสูงและนับขั้นตอนh
s
คุณจะได้รับการวาดภาพที่ไม่ใช่ตัวเองตัดสุ่มเดิน s
ก้าวยาว ๆ บน5*w
โดย5*h
พิกเซลภาพที่ทุก ๆ 5 5 เซลล์พิกเซลเป็นทั้งว่างเปล่า (สีเบจบริสุทธิ์) หรือหนึ่งในสิบสองเหล่านี้ง่าย "ท่อ":
ภาพด้านบนถูกขยายเพื่อแสดงรายละเอียด นี่คือขนาดท่อจริง:
(เส้นสีเทาเป็นเพียงการแยกประเภทท่อ)
การเดินแบบสุ่มจะเป็นเส้นทางไปป์แบบต่อเนื่องเดี่ยวที่เริ่มต้นที่จุดปลายท่อหนึ่ง (หนึ่งในสี่ประเภทท่อด้านล่าง) และสิ้นสุดที่จุดปลายท่ออื่น
เริ่มต้นด้วยการเว้นว่างw
ตามh
กริดและสุ่มเลือกเซลล์หนึ่งเซลล์เพื่อเป็นจุดเริ่มต้น จากนั้นสุ่มเลือกหนึ่งในสี่ทิศทางเพื่อเริ่มต้นและวาดจุดปลายท่อที่เกี่ยวข้อง เซลล์เริ่มต้นนี้ทำเครื่องหมายขั้นตอนแรกในการเดินของคุณและทุกครั้งที่คุณวาดเซลล์ใหม่หรือเขียนทับเซลล์ที่มีอยู่เดิมจะนับเป็นขั้นตอนอื่น
ทีนี้, ซ้ำ ๆ , เลือกสุ่มไปทางขวา, ซ้าย, หรือตรง, วาดเซลล์ท่อที่เหมาะสมหากทิศทางที่เลือกนั้นถูกต้อง. ย้อนกลับและเลือกใหม่หากทิศทางไม่ถูกต้องจนกว่าs
เส้นทางขั้นตอนทั้งหมดจะเกิดขึ้น เส้นทางควรลงท้ายด้วยจุดปลายท่อซึ่งอาจอยู่ที่ใดก็ได้บนกริดขึ้นอยู่กับเส้นทางที่ใช้
มันสำคัญมากที่จะต้องทราบว่ามีเพียงเซลล์ท่อตรงสองเส้นเท่านั้นที่สามารถเขียนทับได้และเซลล์ท่อตรงที่มีทิศทางตรงข้ามเท่านั้นผลลัพธ์ที่ได้คือเซลล์แยก มิฉะนั้นจะต้องวางท่อทั้งหมดไว้ในเซลล์ว่าง
เมื่อวาดทางแยกส่วนหนึ่งของเส้นทางที่อยู่ถัดจากเซลล์เริ่มต้นจะถูกวาดไว้ด้านบน
มันขึ้นอยู่กับคุณหรือไม่ว่ากริดนั้นมีเงื่อนไขขอบเขตเป็นระยะ (PBC) หรือไม่เช่นว่าท่อที่ออกด้านหนึ่งของกริดจะออกมาในอีกด้านหนึ่งหรือไม่ หากไม่มี PBC ขอบเขตของกริดจะนับว่าเป็นสิ่งกีดขวางที่คุณสามารถวิ่งเข้าไปในท่อได้
กรณีพิเศษ
- เมื่อ
s
เป็น 0 ไม่มีท่อควรจะวาดและผลผลิตที่ควรจะเป็นที่ว่างเปล่า5*w
โดย5*h
ภาพ (เช่นสีเบจทั้งหมด) เมื่อ
s
คือ 1 ท่อต้นขั้วเดียวควรวาดที่เซลล์เริ่มต้นที่เลือกแบบสุ่ม
รายละเอียดอื่น ๆ
- คุณอาจสันนิษฐานว่า
s
เป็นอย่างมากw*h
ดังนั้นเส้นทางจะเป็นไปได้เสมอ (แม้ว่าเส้นทางที่ยาวขึ้นอาจเป็นไปได้เนื่องจากทางแยก) w
และh
จะเป็นบวกเสมอ- ตัวเลือกแบบสุ่มทั้งหมดต้องสุ่มอย่างสม่ำเสมอ เช่นคุณไม่ควรหลีกเลี่ยงการตัดกันเมื่อเป็นไปได้แม้ว่าจะทำให้ปัญหาง่ายขึ้น อนุญาตให้ใช้ตัวสร้างตัวเลขแบบหลอกได้
- อาจใช้สีที่ต่างกันสามสีใด ๆ แทนสีดำสีน้ำเงินและสีเบจ
- ภาพออกของคุณอาจถูกขยายเพื่อให้พวกเขาเป็นจริง
5*w*k
โดย5*h*k
พิกเซลที่k
เป็นจำนวนเต็มบวก (ขยายตัวอย่างใด ๆ ที่คุณโพสต์ขอแนะนำแม้ว่าคุณk
จะเป็น 1) - อาจใช้รูปแบบไฟล์ภาพแบบไม่สูญเสียใด ๆ ร่วมกันและภาพอาจถูกบันทึกลงในไฟล์, แสดง, หรือแสดงข้อมูลดิบถึง stdout
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
ตัวอย่าง
(ขยายทั้งหมด 500%)
หากอินพุตเป็นw=2, h=1, s=0
เอาต์พุตเอาต์พุตจะเป็น:
หากอินพุตเป็นw=2, h=1, s=1
ผลลัพธ์จะเป็นหนึ่งในภาพเหล่านี้ที่มีโอกาสเท่ากัน:
ถ้าอินพุตเป็นw=2, h=1, s=2
เอาต์พุตจะเป็น
หรืออาจจะเป็น
ถ้าสมมติว่ากริดมี PBC
(โปรดทราบว่าการเริ่มเส้นทางเช่นนี้จะทำให้ขั้นตอนที่สองเป็นไปไม่ได้)
นี่คือผลลัพธ์ที่เป็นไปได้สำหรับw=3, h=2, s=6
สมมติว่า PBC:
นี่คือผลลัพธ์ที่เป็นไปได้สำหรับw=3, h=3, s=9
สมมติว่า PBC:
โปรดสังเกตว่าเส้นทางไม่จำเป็นต้องครอบคลุมเซลล์ทั้งหมดเนื่องจากการแยกนับเป็นสองขั้นตอน นอกจากนี้เราสามารถอนุมานได้ว่าจุดสิ้นสุดของมุมคือเซลล์เริ่มต้นเนื่องจากสะพานลอยแยกต้องถูกวาดขึ้นหลังจากนั้น ดังนั้นเราสามารถสรุปลำดับของตัวเลือกแบบสุ่มที่ทำ:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
ในที่สุดนี่คือตัวอย่างของw=4, h=5, s=20
และw=4, h=5, s=16
:
You will be drawing a non-self-intersecting random walk
... มันเป็นการตัดกันด้วยตนเองหรือไม่?