एक समोच्च के साथ तीर ले जाएँ


28

सैंडबॉक्स

एक ही क्लॉकवाइज या काउंटर-क्लॉकवाइज दिशा (प्रत्येक समोच्च की अपनी एक दिशा होती है) और एक पॉजिटिव नंबर में n, तीर को मूव करते हुए तीर के साथ नॉन-ओवरलैपिंग 2 डी कॉन्ट्रास (विकर्ण पर भी कम से कम एक स्थान द्वारा अलग) के एक सेट को देखते हुए , तीर को स्थानांतरित करें nसंबंधित दिशा में आकृति के साथ कदम। तीर का प्रतिनिधित्व > v < ^क्रमशः दाएं, नीचे, बाएं और ऊपर की दिशाओं द्वारा किया जाता है। वहाँ अन्य वर्ण -(क्षैतिज), |(लंबवत) और +(कोने) हैं। जब एक तीर एक कोने पर होता है, तो यह अपनी वर्तमान दिशा रखता है और इसे मोड़ने के बाद ही बदलता है।

हमेशा किसी भी दो कोनों (जैसे +-+क्षैतिज के लिए और ऊर्ध्वाधर के लिए समान ) के बीच एक सीधा खंड (या एक स्थान ) होगा - दूसरे शब्दों में तेज Uमोड़ निषिद्ध हैं। कोनों के बीच के खंड या तो ऊर्ध्वाधर या क्षैतिज होते हैं और एक कोने पर मोड़ हमेशा 90 डिग्री होता है।

इनपुट:

  • एक सकारात्मक पूर्णांक - n- चरणों की संख्या
  • आकृति का एक ASCII प्रतिनिधित्व - यह एक बहुस्तरीय स्ट्रिंग, तार की एक सूची, पात्रों की एक सूची और इतने पर हो सकता है।

आउटपुट:

एक ही समोच्च सभी तीर के साथ nप्रत्येक समोच्च के समग्र दिशा में स्थानांतरित कदम है।

परीक्षण के मामलों:

1।

इनपुट:

n = 1

 +----->->            
 |       |            
 |       v---+        
 |           |        
 +---<-------+      

आउटपुट:

 +------>+
 |       v
 |       +>--+
 |           |
 +--<--------+

2।

इनपुट:

n = २

 +-----+ +---+        
 |     | |   |        
 +-->--+ |   v  
         |   | 
 +--->---+   |        
 |           |         
 +------<<---+       

आउटपुट:

 +-----+ +---+
 |     | |   |
 +---->+ |   |
         |   | 
 +----->-+   v
 |           |     
 +----<<-----+        

3।

इनपुट:

n = ३

 +---+   +---+   +-------+      
 |   |   |   v   |       |      
 ^   |   |   |   +-<-+   |      
 |   |   ^   |       |   v      
 |   +---+   +-->----+   |      
 |                       |      
 |   +-------+   +---+   |      
 |   |       |   v   |   |      
 +---+       +---+   +---+      

आउटपुट:

 +>--+   ^---+   +-------+
 |   |   |   |   ^       |
 |   |   |   |   +---+   |
 |   |   |   |       |   |
 |   +---+   v----->-+   |
 |                       |
 |   +-------+   +---+   v 
 |   |       |   |   |   |
 +---+       +-<-+   +---+  

4।

इनपुट:

n = 1

+--+ 
|  |
|  +---+
|      |     
+----+ |
     | |
     +-+ 

आउटपुट:

+--+ 
|  |
|  +---+
|      |     
+----+ |
     | |
     +-+ 

5।

इनपुट

n = 4

^>>>>
^   v
^   v>>>>
^       v           
<<<<<<<<v

आउटपुट:

^>>>>
^   v
^   v>>>>
^       v           
<<<<<<<<v

6।

इनपुट:

n = 1

^->
^ v
<<v

आउटपुट:

^>+
^ v
<<v

उपरोक्त कार्य को हल करने के लिए एक फ़ंक्शन या प्रोग्राम लिखें। हर भाषा में बाइट्स में सबसे छोटा कोड जीतता है। गोल्फ भाषाओं द्वारा हतोत्साहित मत करो। एल्गोरिथ्म और कोड की व्याख्या अत्यधिक सराहना की जाती है।


क्या दो समोच्च अपने कोनों को विकर्ण पर स्पर्श कर सकते हैं, या एक समोच्च अपने आप को उसी तरह स्पर्श कर सकता है?
xnor

4
"बंद नॉन-ओवरलैपिंग 2 डी कंट्रोल्स के सेट को देखते हुए ... एक ही क्लॉकवाइज या काउंटर-क्लॉकवाइज दिशा में लगातार उन्मुख तीर के साथ" मुझे लगता है कि हर समोच्च एक ही दिशा में उन्मुख है, जबकि परीक्षण के मामलों से, ऐसा लगता है। तीर केवल एक समोच्च के भीतर सुसंगत हैं।
xnor

3
@xnor आपकी टिप्पणियों के लिए धन्यवाद! - नहीं, विकर्ण पर एक-दूसरे को छूने की अनुमति नहीं है। - प्रत्येक समोच्च का अपना निर्देशन होता है। मैं विवरण को अपडेट करूंगा।
गैलन इवानोव

2
क्या दीवारों के बीच कोई जगह नहीं है? जैसे: इसे ऑनलाइन आज़माएं! । मुझे पता है कि आपने "कम से कम एक स्थान से अलग" कहा था, लेकिन मैं स्पष्ट नहीं था कि यह केवल स्वतंत्र छोरों पर लागू होता है या यदि यह एक ही लूप पर भी लागू होता है।
जोनाह

1
@ जोना नहीं, यह संभव नहीं है:There will always be a straight segment (or a space) between any two corners (like +-+ for the horizontal and similar for the vertical) - in other words the sharp U turns are forbidden.
गैलेन इवानोव

जवाबों:


14

जावास्क्रिप्ट (ईएस 6),  210 ... 182  180 बाइट्स

(m)(n)m

m=>g=n=>n?g(n-1,m=m.map((r,y)=>r.map((c,x)=>(i=0,h=$=>~$?(m[Y=y+($-2)%2]||0)[X=x+~-$%2]>h?"-|+"[n+=`;m[${Y}][${X}]=S[${$}]`,i?2:$&1]:h($^++i):c)((S="<^>v").indexOf(c)))),eval(n)):m

इसे ऑनलाइन आज़माएं!

कैसे?

आप स्रोत के एक स्वरूपित संस्करण को देखने के लिए इस लिंक का अनुसरण कर सकते हैं।

आवरण

gn1n=0

अद्यतन विधि

हम सुरक्षित रूप से प्रत्येक तीर को एक बार में स्थानांतरित नहीं कर सकते क्योंकि हम अपडेट किए गए लोगों के साथ गैर-अपडेट किए गए तीरों को अधिलेखित करने का जोखिम चलाएंगे। इसके बजाय, हम पहले सभी तीरों को हटाते हैं और उनकी नई स्थितियों की गणना करते हैं। हम नए पदों को दूसरी बार लागू करते हैं।

n

n

"1;m[0][7]=S[2];m[1][8]=S[3];m[2][9]=S[2];m[4][3]=S[0]"

n

नए पदों को सिर्फ करने से लागू किया जाता है eval(n)

दिशा-निर्देश

d$

10+23

dxdy

 d | dx = (d - 1) % 2 | dy = (d - 2) % 2
---+------------------+------------------
 0 |        -1        |         0
 1 |         0        |        -1
 2 |        +1        |         0
 3 |         0        |        +1

कोनों

hddxor1dxor3

+-|d

h$h"$""$""$"

एनिमेटेड संस्करण


विवरण के लिए आपका धन्यवाद!
गैलेन इवानोव

8

के (ngn / k) , 183 161 157 बाइट्स

{A:"^>v<";D,:-D:(-1 0;!2);s:(#x;#*x);c:~^x;r:" -+|"c*+/'3'0,c,0;$[#p:+s\&~^t:A?,/x;;:r];q:q@'*'&'~^x ./:/:q:+p+/:D@4!(t^0N)+/:0 1 3;s#@[,/r;s/+q;:;A@D?q-p]}/

इसे ऑनलाइन आज़माएं!

{ }/जब एक इंट लेफ्ट arg n के साथ कॉल किया जाता है, तो यह { }n n में दाएं arg में फ़ंक्शन को लागू करेगा

A:"^>v<" तीर

D,:-D:(-1 0;!2) 4 कार्डिनल दिशाओं के लिए ∆y, ∆x

s:(#x;#*x) इनपुट का आकार: ऊंचाई, चौड़ाई

c:~^x काउंटर्स - बूलियन मैट्रिक्स दिखा रहा है कि गैर-रिक्त स्थान कहां हैं

r:" -+|"c*+/'3'0,c,0एक गिनती के साथ लेकिन बिना तीर के चरित्र मैट्रिक्स को फिर से बनाएँ, प्रत्येक सेल के लिए स्वयं + ऊपरी + निचले की गिनती करके c1-> -, 2-> +, 3-> की जगह|

t:A?,/xतीरों के प्रकार: 0 1 2 3 के लिए ^>v<, अन्य सभी कोशिकाओं को 0Nशून्य (शून्य) के रूप में दर्शाया गया है

p:+s\&~^t तीर के निर्देशांक

$[#p ;;:r] यदि कोई तीर नहीं है, तो वापस लौटें r

q:+p+/:D@4!(t^0N)+/:0 1 3 सभी 3 संभव नए पदों के लिए प्रत्येक तीर - अगर यह आगे बढ़ता रहता है, अगर यह बाएं मुड़ता है, और यदि यह सही होता है

q:q@'*'&'~^x ./:/:q प्रत्येक एरो के लिए पहला विकल्प चुनें जो काउंटौर पर लैंड करता है

@[,/r;s/+q;:;A@D?q-p]समतल rऔर उस पर अपने नए पदों पर तीर और अपनी नई दिशाओं के साथ डाल दिया

s# मूल आकार में फेरबदल


2
आप तेज़ हैं! मुझे आशा है कि आप इसे खत्म करने के बाद कोड समझाएंगे।
गालेन इवानोव

विवरण के लिए आपका धन्यवाद!
गैलेन इवानोव

4

चारकोल , 105 बाइट्स

W¬ΦυΣκ⊞υS≔⊟υη≔⪫υ⸿θ≔⟦⟧υ≔>^<vζPθFθ¿№ζι«⊞υ⟦⌕ζιⅉⅈ⟧§+|-↨EKV›κ ²»ιFυ«J⊟ι⊟ι≔⊟ιιFIη«≔⊟Φ⁴∧﹪⁻⊖ι⊕λ⁴›§KV⁻⁵λ ιM✳⊗黧ζι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। बोझिल इनपुट प्रारूप की आवश्यकता से बचने के लिए उपयोग किए जाने वाले 22 बाइट्स शामिल हैं। स्पष्टीकरण:

W¬ΦυΣκ⊞υS≔⊟υη≔⪫υ⸿θ≔⟦⟧υ

कंट्रोल्स और स्टेप्स की संख्या को आसानी से इनपुट करें।

≔>^<vζ

दिशा पात्रों का उपयोग कई बार किया जाता है, इसलिए स्ट्रिंग को यहां कैश किया जाता है। इस तार में एक दिशा वर्ण के सूचकांक को इसकी दिशा के रूप में जाना जाता है।

Pθ

कर्सर को स्थानांतरित किए बिना मूल आकृति को प्रिंट करें।

Fθ

समोच्च में पात्रों पर लूप।

¿№ζι«

यदि वर्तमान वर्ण एक दिशा वर्ण है ...

⊞υ⟦⌕ζιⅉⅈ⟧

... फिर एक सूची में दिशा और स्थिति सहेजें ...

§+|-↨EKV›κ ²

... और चरित्र को उपयुक्त पंक्ति वर्ण से प्रतिस्थापित करें।

»ι

अन्यथा चरित्र को आउटपुट करें और अगले चरित्र पर आगे बढ़ें।

Fυ«

सहेजे गए पदों पर लूप।

J⊟ι⊟ι

सहेजे गए स्थान पर जाएं।

≔⊟ιι

सहेजी गई दिशा निकालें।

FIη«

उचित संख्या में चरणों पर लूप करें।

≔⊟Φ⁴∧﹪⁻⊖ι⊕λ⁴›§KV⁻⁵λ ι

अगले चरण की दिशा ज्ञात कीजिए, जो कोई भी दिशा है जो न तो रिवर्स है और न ही खाली है।

M✳⊗ι

उस दिशा में एक कदम उठाएं। ( Moveकमांड के लिए चारकोल दिशा सूचक मेरी दिशा का दोगुना मूल्य है।)

»§ζι

उपयुक्त दिशा वर्ण प्रिंट करें।


विवरण के लिए आपका धन्यवाद!
गैलेन इवानोव

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.