रोटर राइडर्स ऑन ए ग्रिड


10

इनपुट

आपका इनपुट एक एकल स्ट्रिंग है , जो कुछ पूर्णांक के लिए 2n+1लंबाई की रेखाओं में अलग-अलग होती है । पूर्णांक इनपुट का हिस्सा नहीं है; आपको इसे स्ट्रिंग से गणना करना होगा। रेखाएं "दिशा वर्ण" से बनी होती हैं । यदि newlines कोई समस्या उत्पन्न करते हैं, तो आप उन्हें ऊर्ध्वाधर पाइपों द्वारा बदल सकते हैं ।2n+1n ≥ 0n>^<v|

इनपुट आकार का एक वर्ग ग्रिड बनाता है (2n+1)x(2n+1), और ग्रिड के प्रत्येक सेल को रोटर राउटर के रूप में व्याख्या की जाती है , जो चार कार्डिनल दिशाओं में से एक में इंगित करता है। हम ग्रिड के केंद्र में राउटर पर एक टोकन छोड़ने के लिए आगे बढ़ते हैं , और फिर राउटर इसे निम्नलिखित तरीके से चारों ओर ले जाएंगे। जब एक राउटर पर टोकन भूमि होती है, तो राउटर काउंटर-क्लॉकवाइज दिशा में 90 डिग्री पर मुड़ता है, और टोकन को नई दिशा में एक कदम आगे बढ़ाता है। यदि यह दूसरे राउटर पर उतरता है, तो प्रक्रिया को दोहराया जाता है, लेकिन अंततः, टोकन ग्रिड से गिर जाएगा।

उत्पादन

आपका आउटपुट राउटर का अंतिम कॉन्फ़िगरेशन है, इनपुट के समान प्रारूप में।

उदाहरण

एक उदाहरण इनपुट के रूप में, 3x3ग्रिड पर विचार करें

<^<
^><
>^v

जहां केंद्रीय राउटर को टोकन को इंगित करने के लिए हाइलाइट किया गया है (यह देखने में थोड़ा कठिन है)। केंद्रीय राउटर उत्तर का सामना करने के लिए घूमता है, और टोकन को शीर्ष पंक्ति के केंद्रीय सेल में ले जाता है:

<^<
^^<
>^v

यह राउटर पश्चिम का सामना करने के लिए घूमता है, और शीर्ष बाएं कोने में टोकन भेजता है:

<<<
^^<
>^v

कोने में राउटर टोकन दक्षिण भेजता है, इसलिए यह अब मध्य पंक्ति के बाईं ओर स्थित है:

v<<
^^<
>^v

वह राउटर पश्चिम की ओर घूमता है और ग्रिड से टोकन भेजता है।

v<<
<^<
>^v

यह अंतिम ग्रिड कॉन्फ़िगरेशन है, इसलिए आपके प्रोग्राम को इसका उत्पादन करना चाहिए। ध्यान दें कि अधिक जटिल उदाहरणों में, टोकन ग्रिड से गिरने से पहले टोकन एक ही राउटर को कई बार पास कर सकता है।

नियम

आप एक फ़ंक्शन या पूर्ण प्रोग्राम लिख सकते हैं। यह कोड-गोल्फ है, इसलिए सबसे कम बाइट गिनती जीतती है। मानक खामियों को अस्वीकार कर दिया जाता है। आप तय कर सकते हैं कि इनपुट और / या आउटपुट में एक अनुगामी न्यूलाइन है या नहीं।

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

Input:
v
Output:
>

Input:
<^<
^><
>^v
Output:
v<<
<^<
>^v

Input:
>>^>>
v<vv<
>^>^<
^<>>^
vvv>>
Output:
>>^>>
>v>>v
^>>vv
^^>>>
v^<<^

Input:
<^^^^^^^^
<<^^^^^^>
<<<^^^^>>
<<<<^^>>>
<<<<^>>>>
<<<vv>>>>
<<vvvv>>>
<vvvvvv>>
vvvvvvvv>
Output:
>>>>>>>>v
^>>>>>>vv
^^>>>>vvv
^^^>>vvvv
<<<<<vvvv
^^^^<<vvv
^^^<<<<vv
^^<<<<<<v
^<<<<<<<<

क्या "पूर्व की ओर घूमता है" के दो उदाहरण "कहना चाहिए" पश्चिम की ओर घूमता है?
पीटर टेलर

@PeterTaylor अच्छी पकड़। मैं हमेशा दोनों को भ्रमित करता हूं।
जर्ग्बेल

क्या इनपुट स्ट्रिंग को एक नई रेखा के साथ समाप्त किया जाता है?
edc65

@ edc65 आप खुद तय कर सकते हैं कि आउटपुट के लिए भी। हालांकि, इससे पहले की कोई नई खबर नहीं है।
जर्ग्बेल

जवाबों:


3

CJam, 62 61 63 बाइट्स

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

Nq_N#):D;+_,2/{:P"^<v>^

"_P4$=#:X)=t_,0PX[1DW*WDSP]=-e>e<}h;1>

विस्तृत और टिप्पणी:

Nq              "Read the input grid";
_N#):D;         "Calculate the vertical delta (line length + 1)";
+               "Prepend a newline to the grid";
_,2/            "Calculate the initial position as the length of the grid
                 string divided by 2";
{               "Do...";
  :P"^<v>^

"
  _P4$=           "Get the character indexed by the position in the grid";
  #:X             "Map the character to an operation number:
                   '^'=>0, '<'=>1, 'v'=>2, '>'=>3, '^'=>4, '\n'=>5, '\n'=>6
                   (the unreachable duplicate mappings are important below)";
  )=t             "Set the character indexed by the position in the grid to
                   the result of mapping the operation number + 1 backwards";
  _,0PX[1DW*WDSP]="Map the operation number to a negated delta (this occurs
                   after rotating routers, which means that operation n should
                   act like the character corresponding to operation n + 1):
                   0=>1, 1=>-delta, 2=>-1, 3=>delta, 5=>position";
  -e>e<           "Subtract the negated delta from the position and clamp it to
                   [0, length of the grid string] (array indices are circular,
                   so the length of the grid string will act like the index 0
                   and point to the initial newline next iteration, which will
                   *really* set the position to 0)";
}h              "... while the position is not 0 (i.e. not at the initial
                 newline)";
;1>             "Clean up and remove the initial newline";

मेरा समाधान एक फ्लैट स्ट्रिंग के रूप में इनपुट पर काम करता है, इसलिए इसका ट्रैक रखने के लिए केवल एक ही स्थिति मूल्य है और वस्तुतः कोई पूर्व / पोस्टप्रोसेसिंग नहीं है; ग्रिड से शुरुआत में न्यूलाइन जोड़ने के लिए प्रीप्रोसेसिंग के केवल 2 बाइट्स हैं और इसे आउटपुट से हटाने के लिए पोस्टप्रोसेसिंग के 2 बाइट्स। लेकिन ये 4 बाइट्स लागत के लायक हैं क्योंकि उन्होंने मुझे न्यूलाइन्स को रखने और उन्हें राउटर की तरह "निष्पादित" करने के लिए, लेकिन वे एक और न्यूलाइन में "घुमाएं" और स्थिति को शून्य पर सेट किया। और मुख्य लूप तब समाप्त होता है जब स्थिति शून्य हो जाती है।


मैं यह नियम दूंगा कि दुर्भाग्य से पूर्ववर्ती न्यूलाइन को जाना होगा; केवल अनुगामी लोगों को अनुमति दी जाती है।
जर्ग्बेल

@ ज़र्ब फिक्स्ड, +2 बाइट्स।
Runer112

ऐसा लगता है कि आपके लिंक से आउटपुट सही नहीं है
एडिट्स ने छोड़ दिया क्योंकि एसई ईवीआईएल

@aditsu आप वास्तव में सही हैं। मुझे यकीन नहीं है कि मैंने क्या छुआ है, मैं कसम खाता हूं कि यह ठीक काम करता था। मैं इस पर गौर करूंगा।
रनर

@aditsu का घटाव कमिटेटिव नहीं है। यह इंगित करने के लिए धन्यवाद कि यह टूट गया था, इसे ठीक करना काफी आसान था। लेकिन अब टिप्पणियों में से एक कोड को छूता है। :(
रनर ११

2

सीजेएम, 90 69 बाइट्स

q_,mqi):L_*Lm2/(:X;{_X_@="^<v>"_@#_[WL1LW*]=X+:X;)=tX)L%XW>XLL(*<**}g

अभी के लिए विशाल, अभी भी बहुत कम किया जा सकता है।

इसे यहाँ ऑनलाइन आज़माएँ


1
शाप दिया, फिर से नाकाम कर दिया! मैं बस 70 बाइट सीजेएम समाधान द्वारा पोस्ट करने वाला था, लेकिन ऐसा लगता है कि अब कुछ पुनर्विचार की आवश्यकता होगी।
Runer112

1

जावास्क्रिप्ट (ईएस 6) 121 120 127 129

एक नामित फ़ंक्शन जो इनपुट पैरामीटर के रूप में स्ट्रिंग प्राप्त करता है और आउटपुट देता है।
मान लें कि इनपुट स्ट्रिंग को एक नई रेखा के साथ समाप्त किया गया है।

बग फिक्स संपादित करें , .search () के साथ अच्छी तरह से काम नहीं करता हैundefined

F=s=>(o=~s.search('\n'),s=[...s],
R=p=>~(u='^<v>'.indexOf(s[p]))?R(p+[-1,-o,1,o][u],s[p]='<v>^'[u]):s)(-~o*o/2-1)
.join('')

अनगढ़ और समझाया गया

F=s=>{
  o = s.search('\n')+1; // offset to next row
  s = [...s]; // string to array
  R=p=>{ // recursive search functiom, parameter p is current position in grid
    u = '^<v>'.indexOf(s[p]); // find direction
    if (u<0) return s; // if no direction found, out of grid -> stop recursion
    s[p] = '<v>^'[u] // set new direction into the array cell 
    return R(p+[-1,o,1,-o][u]) // call recursive function with new position
  }
  return R((o-1)*o/2-1) // start recursive search with initial position at grid center
  .join('') // array to string
}

फ़ायरफ़ॉक्स / फायरबग कंसोल में टेस्ट करें

s='<^^^^^^^^\n\
<<^^^^^^>\n\
<<<^^^^>>\n\
<<<<^^>>>\n\
<<<<^>>>>\n\
<<<vv>>>>\n\
<<vvvv>>>\n\
<vvvvvv>>\n\
vvvvvvvv>\n'
console.log(F(s))

उत्पादन

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