এই প্রশ্নটির উত্থান-পতন রয়েছে


33

ইনপুট নিম্নলিখিত অক্ষর সমন্বিত হবে:

  • ^: এক উপরে যাও
  • v: এক নিচে যাও
  • বা k: দুটি উপরে যান
  • বা j: নীচে যান

উদাহরণস্বরূপ, নিম্নলিখিত ইনপুট:

^^▲^v▼▲^^v

নিম্নলিখিত আউটপুট উত্পাদন করবে:

        ^
   ^   ^ v
  ▲ v ▲

 ^   ▼
^

সেন্সর সিকোয়েন্সগুলি যা কার্সারকে সরিয়ে দেয় যেমন \e[Bঅনুমোদিত নয়। আপনাকে অবশ্যই ফাঁকা স্থান এবং নিউলাইনগুলি ব্যবহার করে আউটপুট উত্পাদন করতে হবে।

এখানে আরও কয়েকটি পরীক্ষার মামলা রয়েছে।

▲v^v^v^v^v^v^v^v▲

                ▲
▲ ^ ^ ^ ^ ^ ^ ^ 
 v v v v v v v v

^^^^^^^▲▲▲▼▼▼vvvvvv

         ▲

        ▲ ▼

       ▲   ▼

      ^     ▼
     ^       v
    ^         v
   ^           v
  ^             v
 ^               v
^                 v

v^^vv^^vvv^v^v^^^vvvv^^v^^vv

  ^   ^         ^
 ^ v ^ v       ^ v       ^
v   v   v ^ ^ ^   v   ^ ^ v
         v v v     v ^ v   v
                    v

1
পেছনের স্থান কি অনুমোদিত? খালি লাইন?
xnor

2
যে ভাষাগুলি ইউনিকোড সমর্থন করে না সেগুলি সম্পর্কে কী? বিকল্প অক্ষর ব্যবহার করা যেতে পারে?
ডুরকনব

1
@xnor আপনাকে ফাঁকা স্থান এবং / অথবা খালি লাইনগুলি অনুমোদিত।
সোমরস

2
@ ডুরকনব আমি jদুবার নীচে নামার kজন্য এবং পাশাপাশি দু'বার উপরে যাওয়ার অনুমতি দেব ।
সোমরস

1
@ এক্সনর আমার খারাপ: / মন্তব্যটি সঠিক এবং আমি নিয়মগুলিকে ভুল সম্পাদনা করেছি। ঠিক করবে এখনই।
সোমরস

উত্তর:


9

পাইথ, 27 বাইট

jCm.<.[*5lzd\ =+Ztx"v ^k"dz

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

আমি ব্যবহার kএবং jপরিবর্তে এবং । প্রচুর নেতৃস্থানীয় এবং অনুসরণকারী খালি লাইন রয়েছে। ছবিটি খুঁজতে আপনাকে বেশ কিছুটা অনুসন্ধান করতে হবে। এখানে একটি 34 বাইট সংস্করণ রয়েছে যা সমস্ত নেতৃস্থানীয় এবং অনুসরণকারী খালি লাইনগুলি সরিয়ে দেয়।

j.sCm.<.[*5lzd\ =+Ztx"v ^k"dz]*lzd

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

jCm.<.[*5lzd\ =+Ztx"v ^k"dz  implicit: Z = 0
  m                       z  map each char d from input string z to:
                  x"v ^k"d     find d in the string "v ^k", -1 if not found
                 t             -1, that gives -2 for j, -1 for v, 1 for ^ and 2 for k
              =+Z              add this number to Z
     .[*5lzd\                  append spaces on the left and on the right of d, 
                               creating a 5*len(input_string) long string
   .<           Z              rotate this string to the left by Z chars
jC                           transpose and print on lines

16

অপঠনযোগ্য , 2199 2145 2134 2104 2087 2084 বাইট

উভয় সমর্থন k/ jসেইসাথে / সিনট্যাক্স ।

ভাল অপঠনযোগ্য traditionতিহ্যে, অ্যাপোস্ট্রোফস এবং ডাবল-কোটের মধ্যে পার্থক্য নিরস্ত করার জন্য এখানে প্রোগ্রামটি আনুপাতিক ফন্টে ফর্ম্যাট করা হয়েছে:

' "" "" ""' "" "" "" "" ' "" "'" " '" "'" " '" "'" "" ' "" "" "'" "" "" " ' "" ' ""' "" ' ""' "" " '" "'" "" "" " '" "" "" "'" "" "" "" " '" ""' "" ' " " '" "" "" ""' "" "" "" "" ' "" "'" "" "" "" "" " '" "" "'" "" " '" "" "' "" ""' "" "" ' "" "" ""' "" ' ""' "" ' ""' "" ' "" "'" " '" ""' "" "" "" ' ""' "" ' ""' "" ' "" "'" "" "" "" "" ' "" "" "'" "" "" " '" "'" " '" "'" " '" ""' "" "" "" "" ' "" "" "" "'" " '" "'" " '" "'" "" ' "" ""' "" "" "" '" "'" " '" "'" " '" "'" "" ' "" "" "" "" "'" "" "" "" ' ""' "" ' ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" ' ""' "" ' ""' "" " '" "'" " ' "" " '" "" "" "'" "" ' "" "" "" "" "'" "" "" "" ' "" "'" " '" "" "" ""'"" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" "" "" " '" "" "" "" "'" "" ' "" "" "" "" "'" " '" "" "" ""' "" " '" "" "" "" ""' "" ' ""' "" ' "" " "" "" ' "" "'" "" ' ""' "" ' "" "'" " '" ""' "" "" "" "" " '" "" "" ""' ""' "" ' ""' "" ' ""' "" " '" ""' "" ' ""' "" " '" "" "" "'" "" ' "" "" " "" "" ' "" "" "" "'" "" ' "" "" "" "" "'" " '" "'" "" "" "" ' "" "'" "" "" "" "" ' ""' "" ' ""' "" ' "" "" "" "'" "" ' "" "'" " '" "'" "" ' ""' """ '" "" "" "" ""' "" "" "" " '" "'" " '" "'" " '" "'" "" ' ""' "" ' "" "'" "" ' "" "" "'" "" "" " '" "'" " '" "'" " '" ""' "" "" "" "" ' "" "" "" "'" " '" "'" " '" "'" "" ' "" ""' "" "" ' "" "" "" "" "'" "" "" "" ' ""' ""' ""' "" " '" "" "" "'" " '" "'" " '" ""' "" ' "" "" "" "'" " '" "'" " '" " " '" ""' "" "" "" ' ""' "" ' "" "'" " '" "" "" ""' "" ' ""' "" " '" "" "" " ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" " '" "" ""' "" "" "" ' "" "'"" "" "" "" ' "" "" "" "'" "" ' "" ""' "" "" ' "" "" ""' "" ' ""' "" ' "" " ' "" "" "" ""' "" "" "" " '" "'" " '" "'" "" ' "" "" "" "" "'" "" "" "" ' " " '" "'" "" ' "" "" ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' ""' "" "'" "" ' "" "" ""' "" ' "" "'" " '" "" "" ""' "" ' "" "'" "" "" " '" " ' "" "" "" "'" "" "" "" " '" ""' "" ' "" "" "" "'" " '" ""' "" "" " '" "" " "" "" ' "" "" ""' "" ' ""' "" ' "" "'" " '" "" "" ""' "" ' ""' "" ' "" "' "" ""' "" "" "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" " '" "" "" " ' ""' "" ' "" "'" " '" "" "" ""' "" ' ""' "" " '" "" ""' "" "" "" "" ' "" " "" " '" "'" "" ' ""' "" "" "" " '" "'" "" ' "" ""' "" "" "" ' "" "'" " '"" "" "" " '" "" "" "" "'" "" ' "" "" "'" "" "" "" " '" "" "" "" "'" "" "" " '" ""' "" "" "" "" ' "" "" "" ""' "" "" "" " '" ""' "" "" "" ' "" "" "" " ' "" "'" " '" "" "" ""' "" "" "" " '" ""' "" "" " '" "'" " '" "" "" "'"" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" ' "" "'" "" " '" "" "'" "" " '" "" "" "'" " '" ""' "" ' ""' "" ' ""' "" ' "" "" ""' "" " '" "'" " '" " ' ""' "" " '" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" "" '" "" "" "" "'" "" "" " '" "" "" "" "'" "" ' "" "" "" ""' "" "" "" "" ' " "" "" "" ' "" "" "" ""' "" " '"' "" "" "" "" " '" "" "" "'" " '" "" "" "'" "" ' ""' "" ' "" "" "" "'" "" ' "" "" "" ""' "" "" "" " '" "'" "" "" "" '" ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" " '" "'" "" ' "" "" "" "'" "" "" "" ' "" "'" "" "" " '" "" "" "" "'" "" ' ""' "" ' "" "" "" "'" "" ' "'" """ "" " '" "'" ""

এটি একটি আশ্চর্যজনক চ্যালেঞ্জ ছিল। পোস্ট করার জন্য আপনাকে ধন্যবাদ!

ব্যাখ্যা

অপঠনযোগ্য যা করতে পারে এবং কী করতে পারে না তার অনুভূতি পেতে ব্রেইনফাককে দু'দিকেই অসীম টেপ দিয়ে কল্পনা করুন, তবে মেমোরি পয়েন্টারটির পরিবর্তে একবারে একটি কক্ষ সরিয়ে আপনি কোনও পয়েন্টারকে ডিফারেন্স করে কোনও মেমরি সেল অ্যাক্সেস করতে পারবেন। এটি এই সমাধানটিতে যথেষ্ট কার্যকর, যদিও অন্যান্য গাণিতিক অপারেশনগুলি - মডিউলো সহ - হাতে হাতে করতে হবে।

পরিচালকের ভাষ্য সহ সিউডোকোড হিসাবে প্রোগ্রামটি এখানে:

// Initialize memory pointer. Why 5 will be explained at the very end!
ptr = 5

// FIRST PASS:
// Read all characters from stdin, store them in memory, and also keep track of the
// current line number at each character.

// We need the +1 here so that EOF, which is -1, ends the loop. We increment ptr by 2
// because we use two memory cells for each input character: one contains the actual
// character (which we store here); the other will contain the line number at which the
// character occurs (updated at the end of this loop body).
while ch = (*(ptr += 2) = read) + 1:

    // At this point, ch will be one more than the actual value.
    // However, the most code-economical way for the following loop is to
    // decrement inside the while condition. This way we get one fewer
    // iteration than the value of ch. Thus, the +1 comes in handy.

    // We are now going to calculate modulo 4 and 5. Why? Because
    // the mod 4 and 5 values of the desired input characters are:
    //
    //  ch  %5  %4
    //  ^   1
    //  v   2
    //  k   3
    //  j   4
    //  ▲   0   2
    //  ▼   0   0
    //
    // As you can see, %5 allows us to differentiate all of them except ▲/▼,
    // so we use %4 to differentiate between those two.

    mod4 = 0      // read Update 2 to find out why mod5 = 0 is missing
    while --ch:
        mod5 = mod5 ? mod5 + 1 : -4
        mod4 = mod4 ? mod4 + 1 : -3

    // At the end of this loop, the value of mod5 is ch % 5, except that it
    // uses negative numbers: -4 instead of 1, -3 instead of 2, etc. up to 0.
    // Similarly, mod4 is ch % 4 with negative numbers.

    // How many lines do we need to go up or down?
    // We deliberately store a value 1 higher here, which serves two purposes.
    // One, as already stated, while loops are shorter in code if the decrement
    // happens inside the while condition. Secondly, the number 1 ('""") is
    // much shorter than 0 ('""""""""'""").
    up = (mod5 ? mod5+1 ? mod5+3 ? 1 : 3 : 2 : mod4 ? 3 : 1)
    dn = (mod5 ? mod5+2 ? mod5+4 ? 1 : 3 : 2 : mod4 ? 1 : 3)

    // As an aside, here’s the reason I made the modulos negative. The -1 instruction
    // is much longer than the +1 instruction. In the above while loop, we only have
    // two negative numbers (-3 and -4). If they were positive, then the conditions in
    // the above ternaries, such as mod5+3, would have to be mod5-3 etc. instead. There
    // are many more of those, so the code would be longer.

    // Update the line numbers. The variables updated here are:
    // curLine = current line number (initially 0)
    // minLine = smallest linenum so far, relative to curLine (always non-positive)
    // maxLine = highest linenum so far, relative to curLine (always non-negative)
    // This way, we will know the vertical extent of our foray at the end.

    while --up:
        curLine--
        minLine ? minLine++ : no-op
        maxLine++

    while --dn:
        curLine++
        minLine--
        maxLine ? maxLine-- : no-op

    // Store the current line number in memory, but +1 (for a later while loop)
    *(ptr + 1) = curLine + 1

// At the end of this, minLine and maxLine are still relative to curLine.
// The real minimum line number is curLine + minLine.
// The real maximum line number is curLine + maxLine.
// The total number of lines to output is maxLine - minLine.

// Calculate the number of lines (into maxLine) and the real minimum
// line number (into curLine) in a single loop. Note that maxLine is
// now off by 1 because it started at 0 and thus the very line in which
// everything began was never counted.
while (++minLine) - 1:
  curLine--
  maxLine++

// Make all the row numbers in memory positive by adding curLine to all of them.
while (++curLine) - 1:
  ptr2 = ptr + 1
  while (ptr2 -= 2) - 2:    // Why -2? Read until end!
    *ptr2++

// Finally, output line by line. At each line, we go through the memory, output the
// characters whose the line number is 0, and decrement that line number. This way,
// characters “come into view” in each line by passing across the line number 0.
while (--maxLine) + 2:    // +2 because maxLine is off by 1
  ptr3 = 5
  while (ptr -= 2) - 5:
    print (*((ptr3 += 2) + 1) = *(ptr3 + 1) - 1) ? 32 : *ptr3   // 32 = space
  ptr = ptr3 + 2
  print 10  // newline

প্রোগ্রাম যুক্তি জন্য অনেক। এখন আমাদের এটি অপঠনযোগ্যতে অনুবাদ করতে হবে এবং আরও কয়েকটি আকর্ষণীয় গল্ফিং কৌশল ব্যবহার করা উচিত।

চলকগুলি সর্বদা অপঠনযোগ্যতে সংখ্যাসূচকভাবে বিবেচিত হয় (উদাহরণস্বরূপ a = 1এমন কিছু হয়ে যায় *(1) = 1)। কিছু সংখ্যার আক্ষরিক অন্যদের চেয়ে দীর্ঘ হয়; সংক্ষিপ্ততম হল 1, তারপরে 2, ইত্যাদি negativeণাত্মক সংখ্যা কত দীর্ঘ রয়েছে তা দেখানোর জন্য এখানে -1 থেকে 7 নম্বরগুলি রয়েছে:

-1  '""""""""'""""""""'"""  22
 0  '""""""""'"""           13
 1  '"""                     4
 2  '""'"""                  7
 3  '""'""'"""              10
 4  '""'""'""'"""           13
 5  '""'""'""'""'"""        16
 6  '""'""'""'""'""'"""     19
 7  '""'""'""'""'""'""'"""  22

স্পষ্টতই, আমরা কোডটিতে সবচেয়ে ঘন ঘন ঘটে এমন একের জন্য পরিবর্তনশীল # 1 বরাদ্দ করতে চাই । প্রথম যখন লুপ, এটি অবশ্যই mod5, যা 10 বার আসে। তবে mod5লুপের পরে আমাদের আর দরকার নেই, তাই আমরা পরে অন্য ব্যবহারযোগ্য ভেরিয়েবলগুলিতে একই মেমরি অবস্থানটি আবার বরাদ্দ করতে পারি। এগুলি ptr2এবং ptr3। এখন ভেরিয়েবলটি মোট 21 বার উল্লেখ করা হয়েছে। (আপনি যদি নিজের মতো করে সংখ্যার সংখ্যা গণনা করার চেষ্টা করছেন তবে এরকম কিছু গণনা করতে ভুলবেন নাa++ একবার মূল্য হিসাবে একবার এবং একবার সেট করার জন্য দু'বারের না))

আর একটি মাত্র পরিবর্তনশীল রয়েছে যা আমরা আবার ব্যবহার করতে পারি; আমরা মডুলোর মান গণনা করার পরে, chআর প্রয়োজন হয় না। upএবং dnএকই সংখ্যক বার আসুন, তাই হয় ঠিক আছে। আসুন একত্রীকরণ chসঙ্গে up

এটি মোট 8 অনন্য ভেরিয়েবল ছেড়ে যায়। আমরা 0 থেকে 7 ভেরিয়েবল বরাদ্দ করতে পারি এবং তারপরে 8 এ মেমরি ব্লক (অক্ষর এবং রেখা সংখ্যা সহ) শুরু করতে পারি But তবে! যেহেতু code১ কোডের সমান দৈর্ঘ্য −1, আমরা পাশাপাশি ভেরিয়েবলগুলি to1 থেকে 6 ব্যবহার করতে পারি এবং মেমরি ব্লকটি 7 এ শুরু করতে পারি way এইভাবে, মেমরি ব্লকের প্রারম্ভিক অবস্থানের প্রতিটি রেফারেন্স কোডে কিছুটা ছোট হয়! এটি আমাদের নিম্নোক্ত কার্যাদি সহ ছেড়ে দেয়:

-1    dn
 0                      ← ptr or minLine?
 1    mod5, ptr2, ptr3
 2    curLine
 3    maxLine
 4                      ← ptr or minLine?
 5    ch, up
 6    mod4
 7... [data block]

এখন এটি সূচনাটি একেবারে শীর্ষে ব্যাখ্যা করে: এটি 5 কারণ এটি 7 (মেমরি ব্লকের শুরু) বিয়োগ 2 (প্রথম অবস্থার মধ্যে বাধ্যতামূলক বৃদ্ধি)। শেষ লুপের 5 টির মতো অন্য দুটি ঘটনার ক্ষেত্রে একই।

নোট করুন, যেহেতু 0 এবং 4 কোডের ক্ষেত্রে একই দৈর্ঘ্য, ptrএবং minLineযে কোনও উপায়ে বরাদ্দ করা যেতে পারে। ... বা তারা পারে?

দ্বিতীয়-শেষের লুপের সময়ে রহস্যময় 2 সম্পর্কে কী? এটি কি 6 হওয়া উচিত নয়? আমরা কেবল ডাটা ব্লকের সংখ্যা হ্রাস করতে চাই, তাই না? একবার আমরা 6 এ পৌঁছানোর পরে, আমরা ডেটা ব্লকের বাইরে থাকি এবং আমাদের থামানো উচিত! এটি বাফার ওভারফ্লো বাগ ত্রুটি ব্যর্থতা সুরক্ষা দুর্বলতা হবে!

আচ্ছা, আমরা যদি থামি না তবে কী হবে তা ভেবে দেখুন। আমরা ভেরিয়েবল 6 এবং 4. চলক 6 হ্রাস mod4। এটি কেবল প্রথমদিকে ব্যবহৃত হয়েছিল যখন লুপ এবং এখানে আর প্রয়োজন হয় না, সুতরাং কোনও ক্ষতি করা হয়নি। চলক 4 সম্পর্কে কী? আপনার কী মনে হয়, ভেরিয়েবল 4 হওয়া ptrউচিত বা হওয়া উচিত minLine? এটা ঠিক, minLineএখন আর এই সময়ে ব্যবহার করা হয় না! সুতরাং, পরিবর্তনশীল # 4 minLineএবং আমরা নিরাপদে এটি হ্রাস করতে পারি এবং কোনও ক্ষতি করতে পারি না!

আপডেট 1! নিরূপক যে 2145 বাইট 2199 থেকে Golfed dnকরতে আরো সাথে মার্জ করা mod5, যদিও mod5এখনো জন্য মান হিসাব ব্যবহার করা হয় dn! নতুন পরিবর্তনশীল অ্যাসাইনমেন্টটি এখন:

 0    ptr
 1    mod5, dn, ptr2, ptr3
 2    curLine
 3    maxLine
 4    minLine
 5    ch, up
 6    mod4
 7... [data block]

আপডেট 2! 2145 থেকে 2134 বাইটগুলি বুঝতে পেরে গল্ফ করা, যেহেতু mod5এখন একই পরিবর্তনশীল হিসাবে রয়েছে dn, যা কিছুক্ষণের মধ্যে লুপ হিসাবে গণনা করা হয়, mod5এখন আর স্পষ্টভাবে 0 তে আরম্ভ করার দরকার নেই।

আপডেট 3! দুটি জিনিস বুঝতে পেরে 2134 থেকে 2104 বাইট গল্ফ করা হয়েছে। প্রথমত, যদিও "নেতিবাচক মডিউল" ধারণা জন্য এটি ছিল মূল্য mod5, একই যুক্তি প্রযোজ্য নয় mod4আমরা কখনোই বিরুদ্ধে পরীক্ষা কারণ mod4+2ইত্যাদি অতএব, পরিবর্তন mod4 ? mod4+1 : -3করার জন্য mod4 ? mod4-1 : 32110 বাইট আমাদের লাগে। দ্বিতীয়ত, যেহেতু mod4সর্বদা 0 বা 2 হয় তাই আমরা mod40 এর পরিবর্তে 2 তে আরম্ভ করতে পারি এবং দুটি স্তরকে ( mod4 ? 3 : 1পরিবর্তে mod4 ? 1 : 3) বিপরীত করতে পারি ।

আপডেট 4! 2104 থেকে 2087 বাইটে বুঝতে পেরে যে মডুলো মানগুলি গণনা করে এমন লুপ সর্বদা সর্বদা কমপক্ষে একবার চালিত হয়, এবং এরকম ক্ষেত্রে অপঠনযোগ্য আপনাকে অন্য বিবৃতিতে সর্বশেষ বিবৃতিটির মানটি পুনরায় ব্যবহার করতে দেয়। সুতরাং, while --ch: [...]; up = (mod5 ? mod5+1 ? [...]এখন আমাদের পরিবর্তে up = ((while --ch: [...]) ? mod5+1 ? [...](এবং এর ভিতরে লুপটি থাকা অবস্থায়, আমরা mod4প্রথমে গণনা করি , mod5এটিই শেষ বক্তব্য)।

আপডেট 5! 2087 থেকে 2084 বাইটে গল্ফ করে বুঝতে পেরেছি যে ধ্রুবকগুলি 32এবং 10(স্পেস এবং নিউলাইন) লেখার পরিবর্তে , আমি 10 নম্বরটি (বর্তমানে অব্যবহৃত) ভেরিয়েবল # 2 এ সঞ্চয় করতে পারি (আসুন এটি কল করুন ten)। বদলে ptr3 = 5আমরা লিখতে ten = (ptr3 = 5) + 5, তারপর 32হয়ে ওঠে ten+22এবং print 10হয়ে print ten


এটি ... ভয়ঙ্কর ... +1
kirbyfan64sos

6

সিজেম, 37 বাইট

r_,2*:L3*S*f{\_iImd8-g\8>)*L+:L\t}zN*

এটি পছন্দসই আউটপুট এর আগে এবং পরে খালি লাইনগুলি মুদ্রণ করে, যা ওপি দ্বারা অনুমোদিত হয়েছে

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

r_     e# Read a token from STDIN and push a copy.
,2*:L  e# Compute its length, double it and save it in L.
3*S*   e# Push a string of 6L spaces.
f{     e# For each character C in the input, push C and the string of spaces; then
  \    e#   Swap C with the string of spaces.
  _i   e#   Push a copy of C and cast it to integer.
  Imd  e#   Push quotient and remainder of its division by 18.
  8-g  e#   Push the sign((C%18) - 8). Gives -1 for ^ and ▲, 1 for v and ▼.
  \    e#   Swap the result with the quotient.
  8>)  e#   Push ((C/18) > 1) + 1. Gives 2 for ▲ and ▼, 1 for ^ and v.
  *    e#   Multiply both results. This pushes the correct step value.
  L+:L e#   Add the product to L, updating L.
  \t   e#   Replace the space at index L with C.
}      e# We've built the columns of the output.
z      e# Zip; transpose rows with columns.
N*     e# Join the rows, separating by linefeeds.

আমি মনে করি কেবলমাত্র একটি ক্যাভ্যাট হিসাবে পরিষ্কারভাবে বলা ঠিক হবে যে আপনার সমাধান পছন্দসই আউটপুট এর আগে এবং পরে প্রচুর পরিমাণে অতিরিক্ত নতুন লাইন তৈরি করে ...
টিমভি

যোগ করা হয়েছে। (ওপি স্পষ্টভাবে ফাঁকা লাইনের অনুমতি দেওয়ার পরে আমি এটি প্রয়োজনীয় মনে করি নি।)
ডেনিস

3

পাইথন 2, 102

s=input()
j=3*len(s)
exec"w='';i=j=j-1\nfor c in s:i-='kv_^j'.find(c)-2;w+=i and' 'or c\nprint w;"*2*j

এক এক করে লাইনে প্রিন্ট করে।

ইনপুটটিতে অক্ষরগুলির মধ্য দিয়ে লুপ হয় এবং বর্তমান উচ্চতা ট্র্যাক করে। উচ্চতা একটি দ্বারা +2, +1, -1, -2গুণিত হিসাবে আপডেট করা হয় 'kv_^j'.find(c)-2। খুব সম্ভবত একটি মোড চেইন আছে যা সংক্ষিপ্ত

যখন বর্তমান উচ্চতা লাইন সংখ্যাটির সমতুল্য হয় (যা নেতিবাচক হতে পারে), আমরা বর্তমান চরিত্রটিকে লাইনে সংযোজন করি এবং অন্যথায় একটি স্থান সংযোজন করি। তারপরে, আমরা লাইনটি প্রিন্ট করি। প্রকৃতপক্ষে, বর্তমান লাইন সংখ্যায় উচ্চতা শুরু করা এবং উচ্চতা পরিবর্তনগুলি বিয়োগ করতে, মানটি হিট হলে চরিত্রটি সংযোজন করা কম 0

লাইন সংখ্যাগুলি একটি বৃহত পর্যাপ্ত পরিসরকে অন্তর্ভুক্ত করে যা আপ-টু বা ডাউন-টুয়ের ক্রম এর মধ্যে থাকবে। আসলে, এখানে অতিরিক্ত পরিমাণ রয়েছে of যদি আমাদের ইনপুট দৈর্ঘ্যের উপরের উপরের আবদ্ধ থাকে তবে এটি লিখলে খাটো হবে, বলুন j=999

আশ্চর্যের বিষয়, i and' 'or cস্বাভাবিকের চেয়ে খাটো ছিল [' ',c][i==0]। নোট করুন যে iনেতিবাচক হতে পারে, যা কিছু সাধারণ কৌশল ছড়িয়ে দেয়।


2

ম্যাটল্যাব, 116

function o=u(a)
x=0;y=1;o='';for c=a b=find(c=='j^ vk')-3;y=y+b;if y<1 o=[zeros(1-y,x);o];y=1;end
x=x+1;o(y,x)=c;end

এটি একটি শুরু। jএবং kএটা ঘাড় ব্যাথা হিসাবে আমি একটি উপায় গাণিতিকভাবে থেকে ম্যাপ খুঁজে পাচ্ছি না j^vkকরতে [-2 -1 1 2]এবং ম্যাটল্যাব ইউনিকোড স্বীকৃতি না দিয়ে (দৃশ্যত উভয় আপ করুন এবং নিচে ম্যাটল্যাব। যান চিত্র 26 একটি মূল্য আছে!), আছে ম্যাপিং করতে প্রচুর বাইট নষ্ট হয়।

@ এক্সনরস সমাধান থেকে অনুপ্রেরণা অঙ্কনের মাধ্যমে কোডটি লুপের অভ্যন্তরে নিয়ন্ত্রণ অক্ষরের ম্যাপিংয়ের মাধ্যমে আরও 14 টি অক্ষর দ্বারা হ্রাস করা যেতে পারে।

ইনপুট স্ট্রিং যে সূচনাটি শুরু হয়েছিল তার নীচে ফিরে প্যাটার্নটি প্রেরণ করে যদি অ্যাকাউন্টের চেষ্টা করার জন্য অনেকগুলি বর্জ্য অপচয় করা হয় (স্ট্রিংয়ের দৈর্ঘ্যের কোনও সীমা যদি আমি সেই বিটটি সহজ করতে পারি তবে)।

এবং এর পাঠযোগ্য আকারে:

function o=u(a)
%We start in the top left corner.
x=0; %Although the x coordinate is 1 less than it should be as we add one before storing the character
y=1;
o=''; %Start with a blank array
for c=a
    %Map the current character to [-2 -1 1 2] for 'j^vk' respectively.
    b=find(c=='j^ vk')-3;
    y=y+b; %Offset y by our character
    if y<1 %If it goes out of range of the array
        o=[zeros(1-y,x); o]; %Add enough extra lines to the array. This is a bit of a hack as 0 prints as a space in MATLAB.
        y=1; %Reset the y index as we have now rearranged the array
    end
    x=x+1; %Move to the next x coordinate (this is why we start at x=0
    o(y,x)=c; %Store the control character in the x'th position at the correct height.
end

চান b=[-2 -1 1 2](a==[106 107 94 118])কাজ করে? এটি অষ্টাভে কাজ করে। অথবা b=[-2 -1 1 2](a-94==[12 13 0 24])আপনি আরও একটি বাইট শেভ করতে চাইলেও!
wchargin

@WChargin এমএটিএলবিতে কাজ করে না। দুর্ভাগ্যক্রমে ==যে স্টপগুলি কাজ করে তা বন্ধ হয়ে যায় এবং ম্যাটল্যাব এ আপনি একটিও ()পরে রাখতে পারেন না []
টম কার্পেন্টার

হুম… আপনি ভাষাটি অক্টোবায় পরিবর্তন করতে পারবেন! :) ( +=অষ্টাভেরও রয়েছে , fww।)
wchargin

@ ডাব্লুচারগিন যা প্রতারণা করছে = পি তবে আমি সম্মত হচ্ছি, অক্টোবায় অনেক শর্টকাট রয়েছে যা মতলবের নেই।
flawr

2

জাভাস্ক্রিপ্ট (ES6), 140

নীচের স্নিপেটটি একটি ইকামাস্ক্রিপ্ট comp অনুবর্তী ব্রাউজারে চালিত হওয়ার পরীক্ষা করুন (ফায়ারফক্সে পরীক্ষিত)।

f=s=>[...s].map(c=>{for(t=r[y+=c>'▲'?2:c>'v'?-2:c>'^'?1:-1]||x;y<0;y++)r=[,...r];r[y]=t+x.slice(t.length)+c,x+=' '},y=0,r=[x=''])&&r.join`
`

// Less golfed

f=s=>(
  y=0,
  x='',
  r=[],
  [...s].forEach( c =>
    {
      y += c > '▲' ? 2 : c > 'v' ? -2 : c > '^' ? 1 : -1;
      t = r[y] || x;
      while (y < 0)
      {
        y++;
        r = [,...r]
      }  
      r[y] = t + x.slice(t.length) + c;
      x += ' '
    }
  ),
  r.join`\n`
)  


//Test

;[
  '^^▲^v▼▲^^v'
, '▲v^v^v^v^v^v^v^v▲'
, '^^^^^^^▲▲▲▼▼▼vvvvvv'
, 'v^^vv^^vvv^v^v^^^vvvv^^v^^vv'  
].forEach(t=>document.write(`${t}<pre>${f(t)}</pre>`))
pre { border:1px solid #777 }


1

জিএস 2, 34 বাইট

এইটি আউটপুট সীমানাকে সঠিকভাবে গণনা করে যাতে কোনও অতিরিক্ত শ্বেত স্থান তৈরি হয় না। হেক্সে আমার সমাধানটি এখানে

5e 20 76 6a 05 3e 26 ea 30 e0 6d 40 28 26 cf d3
31 e9 d0 4d 42 5e e2 b1 40 2e e8 29 cf d3 5c e9
9a 54

একটু ব্যাখ্যা ক্রমযুক্ত। স্ট্যাকে এসকিআই কোডগুলির একটি অ্যারে হিসাবে আমাদের ব্যবহারকারীর ইনপুট রয়েছে। প্রোগ্রামটির কারণে একটি স্ট্রিং আক্ষরিক শুরু হয় 05। এখানে আমরা যাই।

  5e 20 76 6a      # ascii for "^ vj"
  05               # finish string literal and push to stack
  3e               # index - find index in array or -1 if not found
  26               # decrement
ea                 # map array using block of 3 instructions (indented)

  30               # add 
e0                 # create a block of 1 instruction
6d                 # scan (create running total array of array using block)
40                 # duplicate top of stack
28                 # get minimum of array
26                 # decrement
cf                 # pop from stack into register D (this is the "highest" the path goes)

  d3               # push onto stack from register D
  31               # subtract
e9                 # map array using block of 2 instructions

d0                 # push onto stack from register A (unitialized, so it contains stdin)

  4d               # itemize - make singleton array (also is single char string)
  42               # swap top two elements in stack
  5e               # rjust - right justify string
e2                 # make block from 3 instructions
b1                 # zipwith - evaluate block using parallel inputs from two arrays
40                 # duplicate top of stack

  2e               # get length of array/string
e8                 # map array using block of 1 instruction
29                 # get maximum of array
cf                 # pop from stack into register D (this is the "lowest" the path goes)

  d3               # push from register D onto stack
  5c               # ljust - left justify string
e9                 # map array using block of two instructions
9a                 # transpose array of arrays
54                 # show-lines - add a newline to end of each element in array

জিএস 2, 24 বাইট

আমার কাছে একটি 24 বাইট সমাধান রয়েছে যা আউটপুট আকার গণনা করার মতো যত্ন নেয় না এবং অতিরিক্ত সাদা স্থান সহ শেষ হয়। আমি হোয়াইটস্পেসের সাথে একটিটিকে ন্যূনতম হলেও রাখা পছন্দ করি।

5e 20 76 6a 05 3e 26 ea 30 e0 6d d0 08 4d 42 d1
30 5e d1 5c 09 b1 9a 54

1

ক্রাইওন , 13 বাইট (প্রতিদ্বন্দ্বী)

O"^ vj"\CynIq

এটি অনলাইন চেষ্টা করুন! আসল তীরগুলি ব্যবহার করে কেন হয় না।

অ-প্রতিযোগিতামূলক কারণ ক্রাইওন এই চ্যালেঞ্জের চেয়ে নতুন।

কিভাবে এটা কাজ করে

ক্রাইওন হ'ল স্ট্যাক-ভিত্তিক ভাষা যা ASCII- শিল্প চ্যালেঞ্জগুলিতে হত্যাকারী হতে ডিজাইন করা হয়েছে। এটি 2-মাত্রিক আউটপুট "ক্যানভাস" এবং "ক্রেইন" এর ভিত্তিতে তৈরি করা হয়েছে, এই ক্যানভাসের চারপাশে ভ্রমণকারী একটি কার্সার। আউটপুটে পাঠানো যে কোনও কিছুই ক্রেভনের অবস্থানে ক্যানভাসে আঁকানো হয় এবং ক্রাইওনের মুখোমুখি হয়। ডিফল্টরূপে, ক্রাইওন পূর্বকে (ডানদিকে) নির্দেশ করে।

O"^ v▼"\CynIq   Implicit: input string is on top of the stack
O               For each char I in the input string:
 "^ v▼"          Push this string.
       \         Swap the top two items (so I is on top).
        C        Take the index of I in the string.
                 This returns 3 for ▼, 2 for v, 0 for ^, and -1 for ▲.
         y       Move the crayon by this number of spaces on the Y-axis (south).
          n      Move the crayon one position north.
                 The crayon has now been translated 2 positions south for ▼,
                 1 south for v, 1 north for ^, and 2 north for ▲.
           Iq    Draw I at the crayon. This automatically moves the crayon forward
                 by the length of I, which is 1 in this case.

0

পিবি - 136 বাইট

^w[B!0]{>}v[3*X]<[X]<b[1]^[Y]^>w[B!0]{t[B]<vw[B=0]{v}>w[T=107]{^^b[T]t[0]}w[T=94]{^b[T]t[0]}w[T=118]{vb[T]t[0]}w[T!0]{vvb[T]t[0]}^[Y]^>}

ব্যবহার করে kএবং jপরিবর্তে এবং

কয়েকটি নোট:

  • Escape sequences that move the cursor such as \e[B are not allowed. You must produce the output using spaces and newlines.আমি এই নিয়ম অনুসরণ না! আউটপুট অক্ষরগুলিতে পিবি "ব্রাশ" ধারণাটি ব্যবহার করে। ব্রাশটি "ক্যানভাস" এর চারপাশে চলে আসে এবং এর সাথে সাথেই একটি অক্ষর মুদ্রণ করতে পারে। যাইহোক, প্রকৃত বাস্তবায়ন ফাঁকা স্থান এবং নিউলাইনগুলি ব্যবহার করে চরিত্রটি মুদ্রণ করে।
  • আমি এই চ্যালেঞ্জটি নিয়ে বিরক্ত হচ্ছি না যদিও আমি ভেবেছিলাম পিবি দিয়ে মজা করা হবে যতক্ষণ না আমি রায়টি দেখেছি You are allowed trailing spaces and/or empty lines। এটি বেশ কয়েকটি কারণে:
    • PB না পারেন না শূণ্যস্থান trailing হয়েছে। এটি সর্বদা আয়তক্ষেত্রাকার আউটপুট উত্পাদন করে, প্রয়োজনে ফাঁকা স্থান সহ প্যাডিং।
    • এই প্রোগ্রামটি অনেকগুলি খালি লাইন তৈরি করে। এটি তৈরি করা শুরু হওয়ার পরে আউটপুটটি কত লম্বা হতে চলেছে তা তা জানে না, সুতরাং দৈর্ঘ্যের ইনপুটটির জন্য nএটি শুরু হয় Y=3n+1-1কারণ এটি নিচে যাচ্ছে হয় 3nথেকে Y=-1, এবং থেকে শুরু Y=2n-1সব একটি ইনপুট ব্যর্থ k

আপনি এই প্রোগ্রামটি YouTube এ ক্রিয়াকলাপে দেখতে পারেন! এই সংস্করণটি সামান্য পরিবর্তিত হয়েছে যে এটি কেবল নেমে যায় n-1। এটি এই ইনপুটটির জন্য কাজ করে তবে অন্যদের জন্য ব্যর্থ হবে। এটি অবশ্য অনেক ভাল ক্যাপচার করে।

মন্তব্য সহ:

^w[B!0]{>}             # Go to the end of the input
v[3*X]                 # Go down 3 times the current X value
<[X]<                  # Go to X=-1 (off screen, won't be printed)
b[1]                   # Leave a non-zero value to find later
^[Y]^>                 # Back to the beginning of the input
w[B!0]{                # For every byte of input:
    t[B]                 # Copy it to T
    <vw[B=0]{v}>         # Go 1 to the right of the character to the left
                         # (either the last one printed or the value at X=-1)
                         # Move the correct amount for each character and print it:
    w[T=107]{^^b[T]t[0]} # k
    w[T=94]{^b[T]t[0]}   # ^
    w[T=118]{vb[T]t[0]}  # v
    w[T!0]{vvb[T]t[0]}   # j (Every other possibility sets T to 0, so if T is not 0
                         #    it must be j. T!0 is shorter than T=106)
    ^[Y]^>               # To the next byte of input to restart the loop
}

0

সিলোন, 447 বাইট

import ceylon.language{o=null,v=variable,s=shared}s void y(){v L c;v L f;v L l;v Integer i=0;class L(v L?p,v L?n){s v String t="";s L u=>p else(f=p=L(o,this));s L d=>n else(l=n=L(this,o));s void a(Character c)=>t=t+" ".repeat(i-t.size)+c.string;}f=l=c=L(o,o);for(x in process.readLine()else""){switch(x)case('^'){c=c.u;}case('v'){c=c.d;}case('▲'|'k'){c=c.u.u;}case('▼'|'j'){c=c.d.d;}else{}c.a(x);i++;}print(f.t);while(f!=l){f=f.d;print(f.t);}}

অথবা "পঠনযোগ্যতা" এর জন্য লাইন ব্রেকগুলির সাথে: import ceylon.language{o=null,v=variable,s=shared}s void y(){v L c;v L f;v L l;v Integer i=0;class L(v L?p,v L?n){s v String t="";s L u=>p else(f=p=L(o,this));s L d=>n else(l=n=L(this,o));s void a(Character c)=>t=t+" ".repeat(i-t.size)+c.string;}f=l=c=L(o,o);for(x in process.readLine()else""){switch(x)case('^'){c=c.u;}case('v'){c=c.d;}case('▲'|'k'){c=c.u.u;}case('▼'|'j'){c=c.d.d;}else{}c.a(x);i++;}print(f.t);while(f!=l){f=f.d;print(f.t);}}

এটি ▲ / ▼ এবং জে / কে ইনপুট উভয়ের সাথেই কাজ করে (যদি আমাদের কেবল তাদের একটির সমর্থন করতে হয় তবে প্রোগ্রামটি 8 বাইট সংক্ষিপ্ত হবে)। গত আউটপুট লাইন খালি যখন শুরু অবস্থানে এটা ছিল (যেমন প্রথম ইনপুট একটি ছিল বা ^এবং আমরা কখনোই পরে আবার যে নীচে পেয়েছিলাম)। ইনপুট যা নির্দিষ্ট বর্ণগুলির মধ্যে একটি নয়, কেবল লাইনটি স্যুইচ না করে প্রিন্ট করা হবে:

v^^vv^^vvv^v^v^^^Hellovvvv^^v^^vv

  ^   ^         ^Hello
 ^ v ^ v       ^      v       ^
v   v   v ^ ^ ^        v   ^ ^ v
         v v v          v ^ v   v
                         v

এখানে একটি ফর্ম্যাট সংস্করণ (753 বাইট):

shared void y() {
    variable L c;
    variable L f;
    variable L l;
    variable Integer i = 0;
    class L(variable L? p, variable L? n) {
        shared variable String t = "";
        shared L u => p else (f = p = L(null, this));
        shared L d => n else (l = n = L(this, null));
        shared void a(Character c) => t = t + " ".repeat(i - t.size) + c.string;
    }
    f = l = c = L(null, null);
    for (x in process.readLine() else "") {
        switch (x)
        case ('^') { c = c.u; }
        case ('v') { c = c.d; }
        case ('▲' | 'k') { c = c.u.u; }
        case ('▼' | 'j') { c = c.d.d; }
        else {}
        c.a(x);
        i++;
    }
    print(f.t);
    while (f != l) {
        f = f.d;
        print(f.t);
    }
}

এটি প্রায় সোজা-সামনের "অবজেক্ট-ওরিয়েন্টেড" প্রোগ্রাম ... (স্থানীয়) শ্রেণি L(লাইন বাফার) tপরবর্তী ( n) এবং পূর্ববর্তী ( p) এর (পয়েন্ট) পাশাপাশি একটি (পাঠানো) পয়েন্টার সংরক্ষণ করে লাইন। (অযোগ্য নয়) বৈশিষ্ট্যগুলি u(আপ করার জন্য) এবং d(নিচে জন্য) প্রয়োজন হলে সেগুলি শুরু করুন (নিজের কাছে বিপরীত পয়েন্টার সহ) এবং এই ক্ষেত্রে এছাড়াও প্রথম এবং শেষ রেখাকে সামগ্রিকভাবে ট্র্যাক রাখুন ( fএবংl ভেরিয়েবলগুলিতে) ।

দ্য a(সংযোজন) পদ্ধতি এই লাইনে একটি অক্ষর appends, অবশেষে প্রয়োজনীয় কিছু স্পেস সহ।

cবর্তমান লাইন আমরা ইনপুট স্ট্রিং (ব্যবহার করে) পার্স করিreadLine বর্তমান লাইনটি আপডেট করে এমন সুইচ স্টেটমেন্ট ব্যবহার হিসাবে এক লাইনে থাকা উচিত) ব্যবহার করে এবং তারপরে সংযোজন পদ্ধতিটিকে কল করি।

বিশ্লেষণ সম্পন্ন হওয়ার পরে, আমরা প্রথম থেকে শেষ অবধি লাইনগুলি পুনরুক্তি করি এবং সেগুলির প্রতিটি মুদ্রণ করি। (এটি ধ্বংস করেf পয়েন্টারটিকে , যদি এটির পরে প্রয়োজন হয় তবে আমাদের এটির জন্য আলাদা ভেরিয়েবল ব্যবহার করা উচিত ছিল))

গল্ফিংয়ের জন্য কয়েকটি ব্যবহৃত কৌশল:

  • কিছু জিনিস যা অন্যান্য ভাষায় মূলশব্দ হবে ceylon.languageপ্যাকেজটিতে কেবলমাত্র শনাক্তকারী , এবং একটি উপাধি আমদানি দিয়ে নতুন নামকরণ করা যেতে পারে - আমরা এটিকে টীকাগুলির জন্য ব্যবহার করি shared(5 × ব্যবহৃত হয়) এবং variableঅবজেক্টের জন্যও null(ব্যবহৃত 4 ×):

    import ceylon.language{o=null,v=variable,s=shared}
    

    (ট্রিভিয়া: সিলোন আইডিই-তে ফর্ম্যাটর কিছু অন্তর্নির্মিত ভাষ্য টীকা তাদের variableএবং তাদের মধ্যে ফর্ম্যাট করেshared তাদের সটীক ঘোষণা, কাস্টম টীকা থেকে বিপরীত, যা ঘোষণা উপরে একটি পৃথক লাইন উপর করা হয় একই লাইনে বসিয়ে এই। গল্ফযুক্ত প্রোগ্রামটির বিন্যাসিত সংস্করণটি অপঠনযোগ্য করে তোলে, তাই আমি এই সংস্করণটির জন্য ফিরে নাম-আমদানি পরিবর্তন করেছি))

    this, void, case, elseপ্রকৃত কীওয়ার্ড এবং এই ভাবে নতুন নামকরণ করা যাবে না, এবং Integer, Stringএবং Characterমাত্র প্রতিটি একবার প্রদর্শিত, তাই কিছুই আমদানি করে লাভ নেই।

  • মূলত আমার একটি পৃথক স্ক্রিন বাফার ক্লাসও ছিল (যা লাইন বাফারগুলির লিঙ্কযুক্ত তালিকাগুলি, বর্তমান সূচক এবং এর উপর নজর রাখে), তবে এটির কেবলমাত্র একটি অবজেক্ট থাকায় এটি অপ্টিমাইজ করা হয়েছিল।

  • স্ক্রিনবফার শ্রেণিতেও রয়েছে upএবং downপদ্ধতিগুলি, যা পার্সার থেকে ডাকা হয়েছিল (এবং currentLine = currentLine.upযথাক্রমে কেবল করেছেন currentLine = currentLine.down)। এটি দেখিয়েছিল যে পার্সারের সুইচে সরাসরি এটি করা খাটো। এটি পরিবর্তে currentLine = currentLine.up.up(যা পরে হয়ে উঠেছে c = c.u.u) লেখার অনুমতি দেয় currentLine = currentLine.up;currentLine = currentLine.up

  • মূলত আমরা বর্তমান সূচকটি সংযোজন পদ্ধতিতে আর্গুমেন্ট হিসাবে পাস করেছি (এবং এমনকি লুপ থেকে পার্সারের কাছেও) - এতে থাকা ফাংশনে একটি ভেরিয়েবল থাকা সংক্ষিপ্ত।

  • মূলত আমার মুদ্রণ সমস্ত পদ্ধতিতে বর্তমান পয়েন্টারটি ব্যবহার করা হয়েছিল এবং বর্তমান লাইনটি খালি না হওয়া পর্যন্ত প্রথমে এটিকে সরানো হয়েছে, এবং তারপরে প্রতিটি লাইন মুদ্রণের সময় নীচে। লাইনগুলি ওপারে lines এবং using ব্যবহার করার সময় এটি ভেঙে গেছে, সুতরাং এর পরিবর্তে আমাদের স্পষ্টভাবে jump ঝাঁকানো লাইনে কিছু যুক্ত করতে হয়েছিল। প্রথম / শেষ লাইনের ট্র্যাক রাখা সহজ প্রমাণিত হয়েছে (যদিও এটি দুটি মুদ্রণ বিবৃতি ব্যবহার করা প্রয়োজনীয় করে তুলেছে, কারণ সিলোনটিতে কোনও করার সময় লুপ নেই)।

  • মূলত আমার এমন কিছু ছিল:

      String? input = process.readLine();
      if(exists input) {
         for(x in input) {
             ...
         }
      }
    

    process.readLineআয় nullযদি কোন লাইন যা পড়া যায় (কারণ ইনপুট বন্ধ করে দেয়া হয়েছে), এবং সিংহল কম্পাইলার আমাকে checkfor যে আমি এক্সেস আগে প্রয়োজন input। এই ক্ষেত্রে যেমন আমি কিছুই করতে চাই না তেমনভাবে আমি elseঅপারেটরটি সমানভাবে ব্যবহার করতে পারি যা শূন্য না হলে তার প্রথম যুক্তিটি ফেরত দেয়, এবং অন্যথায় এর দ্বিতীয় যুক্তি, ভেরিয়েবল এবং if-বিবৃতি সংরক্ষণ করে। (এটি আমাদের পরীক্ষার জন্য একটি ডিফল্ট ইনপুট এনকোড করার অনুমতি দেয় for (x in process.readLine() else "^^▲^v▼▲^^v") {:)


0

জাভাস্ক্রিপ্ট (ES6), 228 বাইট

E=(r,p=(' '[M='repeat'](Z=r.length)+',')[M](Z*4),i=Z*2,k=0)=>Z>k?E(r,(p.split(',').map((o,q)=>q==i?o.slice(0,k)+r[k]+o.slice(k++):o)).join`,`,i+(H={'^':-1,k:-2,j:2,v:1})[r[k]],k):p.split(',').join`
`.replace(/\s+\n$|^\s+\n/g,'')

ঠিক আছে, এখানে একটি (বরং দীর্ঘ) পুনরাবৃত্ত সমাধান রয়েছে যা প্রদত্ত পরীক্ষার সমস্ত ক্ষেত্রে পাস করে। এটি একটি দুর্দান্ত চ্যালেঞ্জ ছিল। এটি ব্যবহার করে kএবং jএর জায়গায় এবং

পরীক্ষার স্নিপেট

যদিও জমাটি নিজেই হ্যান্ডেল k,jকরতে পারে তবে নিম্নলিখিত স্নিপেট k,jএবং উভয়ই পরিচালনা করতে পারে ▼,▲

E=(r,p=(' '[M='repeat'](Z=r.length)+',')[M](Z*4),i=Z*2,k=0)=>Z>k?E(r,(p.split(',').map((o,q)=>q==i?o.slice(0,k)+r[k]+o.slice(k++):o)).join`,`,i+(H={'^':-1,k:-2,j:2,v:1})[r[k]],k):p.split(',').join`
`.replace(/\s+\n$|^\s+\n/g,'')
Input: <input type="text" oninput=o.textContent=E(this.value.replace(/▲/g,'k').replace(//g,'j'))></input>
<pre id='o'></pre>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.