একটি গ্রিডে রটার রাউটারগুলি


10

ইনপুট

আপনার ইনপুটটি একটি একক স্ট্রিং, কিছু পূর্ণসংখ্যার জন্য 2n+1দৈর্ঘ্যের লাইনে নিউলাইন দ্বারা পৃথক করা । পূর্ণসংখ্যা ইনপুটটির অংশ নয়; আপনি এটি স্ট্রিং থেকে গণনা করতে হবে। লাইনগুলি "দিকনির্দেশের অক্ষর" দ্বারা গঠিত । যদি নিউলাইনগুলিতে কোনও সমস্যা দেখা দেয় তবে আপনি সেগুলি উল্লম্ব পাইপ দ্বারা প্রতিস্থাপন করতে পারেন ।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
^<<<<<<<<

"পূর্ব দিকে ঘুরছে" এর দুটি উদাহরণটি কি "পশ্চিমে মুখ ঘুরিয়ে দেবে" বলবে?
পিটার টেলর

পছন্দ করুন আমি সবসময় মনে হয় দুজনকে বিভ্রান্ত করি।
জাগারব

একটি নতুন লাইন দিয়ে ইনপুট স্ট্রিংটি কি সমাপ্ত হয়?
edc65

@ edc65 আপনি নিজেই সিদ্ধান্ত নিতে পারেন আউটপুটটির জন্যও। যদিও পূর্ববর্তী কোনও নিউলাইন নেই।
জাগারব

উত্তর:


3

সিজেম, 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 বাইটগুলি ব্যয়ের পক্ষে খুব ভাল কারণ তারা আমাকে রাউটারগুলির মতো নতুন লাইনে রাখে এবং তাদের "এক্সিকিউট" করতে দেয়, তবে তারা অন্য একটি নতুন লাইনে "ঘোরান" এবং অবস্থানটি শূন্যে সেট করে। এবং অবস্থানটি শূন্য হয়ে গেলে প্রধান লুপটি শেষ হয়।


আমি নিয়ম করব যে দুর্ভাগ্যক্রমে পূর্ববর্তী নিউলাইনটি যেতে হবে; কেবল চলার অনুমতি রয়েছে।
জাগারব

@ জগারব ফিক্সড, +২ বাইট।
রানার 1212

দেখে মনে হচ্ছে আপনার লিঙ্ক থেকে আউটপুটটি সঠিক নয়
aditsu প্রস্থান করুন কারণ এসই ইভিএল

@ অ্যাডিটসু আপনি সত্যই সঠিক আমি কী স্পর্শ করেছি তা নিশ্চিত নই, আমি শপথ করছি এটি ভাল কাজ করত। আমি এটার দিকে নজর রাখব.
রানার 1212

@ অ্যাডিটসু দেখেছে বিয়োগফলটি পরিবর্তনশীল নয়। এটি ভেঙে গেছে উল্লেখ করার জন্য ধন্যবাদ, এটি ঠিক করা যথেষ্ট সহজ ছিল। তবে এখন একটি মন্তব্যে কোডটি স্পর্শ করেছে। :(
রানার 1112

2

সিজেম, 90 69 বাইট

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

আপাতত বিশাল, এখনও অনেক কমানো যেতে পারে।

এটি এখানে অনলাইনে চেষ্টা করুন


1
অভিশাপ, আবার বানচাল! আমি স্রেফ 70 বাইট সিজেএম সলিউশন পোস্ট করতে যাচ্ছিলাম তবে মনে হচ্ছে এর জন্য এখন কিছু পুনর্বিবেচনা প্রয়োজন need
রানার 1212

1

জাভাস্ক্রিপ্ট (ES6) 121 120 127 129

একটি নামযুক্ত ফাংশন যা ইনপুট প্যারামিটার হিসাবে স্ট্রিং পায় এবং আউটপুট দেয়।
ধরে নিচ্ছি ইনপুট স্ট্রিংটি একটি নতুন লাইন দিয়ে সমাপ্ত হবে।

বাগ ফিক্স সম্পাদনা করুন ,। অনুসন্ধান () এর সাথে ভাল কাজ করে না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
^<<<<<<<<
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.