एक प्रोग्राम या फ़ंक्शन लिखें जो तीन पूर्णांक, एक चौड़ाई w
, एक ऊँचाई h
और एक कदम गणना में लेता है s
। आप पिक्सेल छवि द्वारा लंबे समय तक एक गैर-आत्म-अंतःक्षिप्त यादृच्छिक चलना s
चरण खींचेंगे, जहां प्रत्येक 5 से 5 पिक्सेल सेल या तो खाली (शुद्ध बेज) या इन बारह सरल "पाइप" में से एक है:5*w
5*h
ऊपर की छवि विस्तार दिखाने के लिए बढ़ाई गई है। यहां वास्तविक आकार में पाइप हैं:
(पाइप लाइनों को अलग करने के लिए ग्रे लाइनें हैं।)
यादृच्छिक चलना एक एकल निरंतर पाइप पथ होगा जो एक पाइप एंडपॉइंट (नीचे चार पाइप प्रकारों में से एक) से शुरू होता है और दूसरे पाइप पाइप बिंदु पर समाप्त होता है।
ग्रिड w
द्वारा खाली के साथ शुरू करें h
और बेतरतीब ढंग से शुरुआती बिंदु होने के लिए एक सेल चुनें। फिर बेतरतीब ढंग से शुरू करने के लिए चार दिशाओं में से एक को चुनें और संबंधित पाइप एंडपॉइंट को ड्रा करें। यह प्रारंभिक सेल आपके चलने में पहला चरण चिह्नित करता है और हर बार जब आप एक नया सेल बनाते हैं या किसी मौजूदा को अधिलेखित करते हैं तो यह एक और कदम के रूप में गिना जाता है।
अब, बार-बार, बेतरतीब ढंग से दाएं, बाएं, या सीधे जाने के लिए चुनें, उपयुक्त पाइप सेल को ड्राइंग करें यदि चुना गया दिशा वैध है। यदि एक दिशा पूर्ण s
चरण पथ के बनने तक मान्य नहीं है, तो Backtrack और फिर से चुनें । पथ को पाइप एंडपॉइंट के साथ समाप्त होना चाहिए, जो ग्रिड पर कहीं भी हो सकता है, इस पथ के आधार पर।
यह ध्यान रखना बहुत महत्वपूर्ण है कि केवल दो सीधे पाइप कोशिकाओं को ओवरराइट किया जा सकता है, और केवल विपरीत अभिविन्यास के सीधे पाइप सेल द्वारा, परिणाम एक चौराहे सेल हो सकता है। अन्यथा, सभी पाइपों को खाली कोशिकाओं में रखा जाना चाहिए।
जब एक चौराहे को खींचा जाता है, तो पथ का वह हिस्सा जो शुरुआती सेल से आगे होता है, शीर्ष पर खींचा जाना चाहिए।
यह आपके ऊपर है कि ग्रिड की आवधिक सीमा की स्थिति है या नहीं (पीबीसी), यानी कि ग्रिड के एक तरफ से निकलने वाला पाइप दूसरी तरफ निकलेगा या नहीं। पीबीसी के बिना ग्रिड की सीमा एक बाधा के रूप में गिना जाता है जिसे आप अन्य पाइपों की तरह चला सकते हैं।
विशेष स्थितियां
- जब
s
0 है तो कोई पाइप नहीं खींचा जाना चाहिए और आउटपुट छवि5*w
द्वारा रिक्त होना चाहिए5*h
(अर्थात सभी बेज)। जब
s
1 एक एकल पाइप ठूंठ होबेतरतीब ढंग से चुनी गई शुरुआती सेल में तैयार किया जाना चाहिए।
अन्य जानकारी
- आप मान सकते हैं कि
s
ऐसा सबसे कम है,w*h
इसलिए हमेशा एक रास्ता संभव होगा। (हालांकि चौराहों के कारण लंबे रास्ते संभव हैं।) w
औरh
हमेशा सकारात्मक रहेंगे।- सभी यादृच्छिक विकल्प समान रूप से यादृच्छिक होना चाहिए । उदाहरण के लिए, जब आप समस्या को आसान बनाते हैं, तब भी जब आपको संभव हो तो चौराहों को बनाने से बचना चाहिए। छद्म यादृच्छिक संख्या जनरेटर की अनुमति है।
- किसी भी तीन अलग-अलग रंगों का उपयोग काले, नीले और बेज रंग के स्थान पर किया जा सकता है।
- आपकी आउटपुट छवियां बढ़ाई जा सकती हैं ताकि वे वास्तव
5*w*k
में5*h*k
पिक्सेल द्वारा हों जहांk
एक सकारात्मक पूर्णांक हो। (आपके द्वारा पोस्ट किए गए किसी भी उदाहरण को बढ़ाने की सलाह दी जाती है भले ही आपकीk
1.) - किसी भी सामान्य दोषरहित छवि फ़ाइल प्रारूप का उपयोग किया जा सकता है और छवि को एक फ़ाइल में सहेजा जा सकता है, प्रदर्शित किया जा सकता है, या स्टडआउट करने के लिए कच्चे को उखाड़ा जा सकता है।
बाइट्स में सबसे छोटा कोड जीतता है।
उदाहरण
(सभी बढ़े हुए 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
... यह आत्म-प्रतिच्छेद है या नहीं?