রাস্তা টি অনুসরণ কর


18

চ্যালেঞ্জটি হল পথটি অনুসরণ করা (আঁকতে):

  • ^n - এন লাইন দ্বারা আপ
  • vn - নিচে এন লাইন
  • >n - ডান n অক্ষরের অবস্থান দ্বারা
  • <n - এন অক্ষরের অবস্থান দ্বারা বামে

  • n হ'ল একটি পূর্ণসংখ্যা, শূন্যের চেয়ে বড় (যেমন আপনি কোনও কমান্ড গ্রহণ করতে পারবেন না) >-2 )।
  • কমান্ডগুলির মধ্যে কোনও বিভাজনকারী নেই, সুগঠিত ইনপুটটি দেখতে এমন দেখাচ্ছে: >5v8<10^3 অন্য কোনও ইনপুটের অনুমতি নেই।
  • কমান্ডের সংখ্যা সীমাহীন।
  • আর কোনও অক্ষরের ইনপুটটি ক্রপ হওয়ার কথা।

উদাহরণ।

  1. ইনপুট একটি খালি স্ট্রিং, আউটপুট:

    *
    
  2. ইনপুট হয় হয় >3বা <3: নোট করুন যে এটি আউটপুটে কোনও পার্থক্য করে না:

    ****
    
  3. জন্য অনুরূপ ^3এবং v3:

    *
    *
    *
    *
    
  4. ইনপুট:, >1v2আউটপুট:

    **
     *
     *
    
  5. ইনপুট:, ^4>3v2<1আউটপুট:

    ****
    *  *
    * **
    *
    *
    
  6. আপনি যদি ফিরে যান এবং একই পথ ব্যবহার করেন তবে নতুন কিছু আঁকবেন না। যেমন>5<5

    ******
    
  7. ... যদিও আপনি নতুন কিছু আঁকেন না, আপনি অবশ্যই অবস্থান পরিবর্তন করেন। অতএব, আপনার ইনপুটটি যদি এর মতো দেখায় >4<2v3:, আউটপুটটি হ'ল:

    *****
      *
      *
      *
    
  8. এটি আরও জটিল উদাহরণ: 1) পথটি নিজেকে অতিক্রম করতে পারে 2) নোট করুন যে শেষ কমান্ডের শেষ তিনটি পদক্ষেপ পুরো পথটি ডানে সরিয়ে নিয়েছে। ইনপুট:, v6>4^3<7আউটপুট:

       *
       *
       *
    ********
       *   *
       *   *
       *****
    
  9. ইনপুট :

    ^2v2>3<3v3>4^5v5>3^5>4v2<4v3>4^3v3>3^5>4v2<4v3>7^5>4v2<4v3>9^3<2^2v2>4^2v2<2v3>8^5>2v4>2^4v5<3>6^5>5<5v2>5<5v2>5<4v1>8^3<1^2v2>1v2>2^3v3>2^2>1^2v2<1v3<3>11^3<2^2v2>4^2v2<2v3>5^5>5<5v2>5<5v2>5<4v1>7^5>4v2<4v3>4^3v3>3^5>4v2<3v1<1v2>3^1>1v1
    

    আউটপুট:

    *   *  *****  *****  *****  *   *     *** *  ******  *     *    *   *  ******  *****  *****
    *   *  *   *  *   *  *   *  *   *     * * *  *       *  *  *    *   *  *       *   *  *   *
    *****  *****  *****  *****  *****     * * *  ******  ** * **    *****  ******  *****  *****
    *   *  *   *  *      *        *       * * *  *        * * *       *    *       *   *  **
    *   *  *   *  *      *        *       * ***  ******   *****       *    ******  *   *  *  **
    *******************************************************************************************
    

6
আপনি আজ এই প্রতিদ্বন্দ্বিতা পোস্ট করেছেন হিসেবে আমি মনে করি এটা একটা সঠিক পরীক্ষা ক্ষেত্রে হতে হবে: ^2v2>3<3v3>4^5v5>3^5>4v2<4v3>4^3v3>3^5>4v2<4v3>7^5>4v2<4v3>9^3<2^2v2>4^2v2<2v3>8^5>2v4>2^4v5<3>6^5>5<5v2>5<5v2>5<4v1>8^3<1^2v2>1v2>2^3v3>2^2>1^2v2<1v3<3>11^3<2^2v2>4^2v2<2v3>5^5>5<5v2>5<5v2>5<4v1>7^5>4v2<4v3>4^3v3>3^5>4v2<3v1<1v2>3^1>1v1
সন্নিবেশকারী

আপনি সম্ভবত একটি রেফারেন্স বাস্তবায়ন প্রদান করতে পারেন?
LegionMammal978

আসলেই কি তা ডুপ নয়? দয়া করে সিদ্ধান্ত নিন: ডি
নিকেল

@ নিকেল: আমি বলব এটি তা নয়; আই / ও আলাদা, এবং মনে হয় পাথগুলি অন্য একটিতে পার হতে পারে না। আমি মনে করি এটি বিভিন্নভাবে বিভিন্ন গল্ফ কৌশলগুলিকে মঞ্জুরি দিতে পারে এমন পদ্ধতিতে সহজ। তবে আমি জানতাম না যে আমি হঠাৎ করে নিজেই এগুলি আবার খুলতে পেরেছি, আমি ভেবেছিলাম আমি কেবল একটি ভোট দিচ্ছি।
মেরিনাস

@ মারিনাস ঠিক আছে তাহলে। সুতরাং, সম্পর্কিত: ইয়ার! লুকানো গুপ্তধনের মানচিত্র!
নিকেল

উত্তর:


2

MATL , 71 বাইট

1thj'.\d+'XX"@Z)XK6L)U:"K1)XK118=K94=-K62=K60=-hv]]YstY)X<1--lqg10*32+c

ব্যবহারসমূহ বর্তমান রিলিজ (6.0.0) ভাষা / কম্পাইলার করুন। মতলব এবং অক্টোবায় কাজ করে।

সম্পাদনা (২১ শে জুন, ২০১ language): ভাষায় পরিবর্তনের কারণে কোডটি বর্তমান রিলিজ (16.0.0) চালানোর জন্য কয়েকটি পরিবর্তন প্রয়োজন। প্রয়োজনীয় পরিবর্তনগুলি সহ আপনি এটি অনলাইনে চেষ্টা করতে পারেন ।

উদাহরণ

>> matl
 > 1thj'.\d+'XX"@Z)XK6L)U:"K1)XK118=K94=-K62=K60=-hv]]YstY)X<1--lqg10*32+c
 > 
> ^4>3v2<1
    ****
    *  *
    * **
    *   
    *  

>> matl
 > 1thj'.\d+'XX"@Z)XK6L)U:"K1)XK118=K94=-K62=K60=-hv]]YstY)X<1--lqg10*32+c
 > 
> ^2v2>3<3v3>4^5v5>3^5>4v2<4v3>4^3v3>3^5>4v2<4v3>7^5>4v2<4v3>9^3<2^2v2>4^2v2<2v3>8^5>2v4>2^4v5<3>6^5>5<5v2>5<5v2>5<4v1>8^3<1^2v2>1v2>2^3v3>2^2>1^2v2<1v3<3>11^3<2^2v2>4^2v2<2v3>5^5>5<5v2>5<5v2>5<4v1>7^5>4v2<4v3>4^3v3>3^5>4v2<3v1<1v2>3^1>1v1
  *   *  *****  *****  *****  *   *     *** *  ******  *     *    *   *  ******  *****  *****
  *   *  *   *  *   *  *   *  *   *     * * *  *       *  *  *    *   *  *       *   *  *   *
  *****  *****  *****  *****  *****     * * *  ******  ** * **    *****  ******  *****  *****
  *   *  *   *  *      *        *       * * *  *        * * *       *    *       *   *  **   
  *   *  *   *  *      *        *       * ***  ******   *****       *    ******  *   *  *  **
  ******************************************************************************************* 

ব্যাখ্যা

প্রোগ্রামটির চারটি প্রধান পদক্ষেপ রয়েছে:

  1. ইনপুট স্ট্রিং পড়ুন এবং এর উপাদানগুলিতে বিভক্ত।
  2. একটি 2-কলামের ম্যাট্রিক্স তৈরি করুন যেখানে প্রতিটি সারিতে উপযুক্ত দিকটিতে ইউনিট স্থানচ্যুতি বর্ণনা করে। উদাহরণস্বরূপ, [0 -1]বাম দিকে এক ধাপ নির্দেশ করে। প্রথম সারিতে পথের উত্স,[1 1]
  3. প্রথম মাত্রা বরাবর সেই ম্যাট্রিক্সের সংখ্যক যোগফলকে গণনা করুন। এখন প্রতিটি সারি a এর স্থানাঙ্কগুলি বর্ণনা করে *। সর্বনিম্ন মানকে সাধারণ করুন1
  4. রয়েছে এমন একটি নতুন ম্যাট্রিক্স তৈরি করুন 1পদক্ষেপ 3 থেকে ম্যাট্রিক্স দ্বারা নির্দেশিত স্থানাঙ্কগুলিতে এবং 0অন্যথায়। এটি তখন একটি চর ম্যাট্রিক্সে রূপান্তরিত হয়।

কোড:

1th                         % row vector [1 1]. Initiallize matrix of step 2
j                           % (step 1) read input string 
'.\d+'XX                    % split into components. Creates cell array of substrings
"                           % (step 2) for each component
   @Z)XK                    % unbox to obtain substring and copy
   6L)U:                    % obtain number and build vector of that size
   "                        % repeat as many times as that number
      K1)                   % paste substring. Get first character: '^', 'v', '>', '<'
      XK118=K94=-           % vertical component of unit displacement: -1, 0 or 1
      K62=K60=-             % horizontal component of unit displacement: -1, 0 or 1
      h                     % concatenate horizontally
      v                     % append vertically to existing matrix
   ]                        % end
]                           % end
Ys                          % (step 3) cumulative sum along first dimension
tY)X<1--                    % normalize to minimum value 1
lqg                         % (step 4) build matrix with 0/1
10*32+c                     % replace 0 by space and 1 by asterisk

এটি শেষ উদাহরণের জন্য কাজ করে?
নিকেল

কী সুন্দর! হ্যাঁ এটা করে. আমি এটিকে অন্তর্ভুক্ত করার জন্য আমার উত্তর সম্পাদনা করেছি
লুইস মেন্ডো

8

জাভাস্ক্রিপ্ট (ES6), 204 211 210

অকার্যকর ইনপুট জন্য 1 বাগ ফিক্স - আউটপুট '*' সম্পাদনা করুন
সম্পাদনা করুন 2 এক্স এবং y পার্থক্যের দিকের সরল ডিকোডিং

চশমাটি পূরণের জন্য সংশোধিত ট্রেজার মানচিত্রে আমার উত্তর এখানে ।

F=m=>(m.replace(/\D(\d+)/g,(d,z)=>{for(;z--;r=[...r],r[x]=m,p[y]=r.join``)for(d<'>'?--x:d<'^'?++x:d<'v'?--y:++y,p=~x?~y?p:[y=0,...p]:p.map(r=>' '+r,x=0),r=p[y]||'';!r[x];)r+=' '},x=y=0,p=[m='*']),p.join`
`)

কম গল্ফড এবং কম বেশি ব্যাখ্যা করা হয়েছে

f=m=>(
  x=y=0, // starting position
  p=['*'], // output string array (initialized with minimum output)
  m.replace( /\D(\d+)/g, 
  (d,z) => // execute the following for each group direction/length. Length in z, direction in d[0]
  {
    while( z--)  // repeat for the len
    {
      // check d to change values of x and y
      // all the comparison are with > and <, not equal
      // so that they work with the whole d, not just d[0]
      d<'>'?--x:d<'^'?++x:d<'v'?--y:++y,
      // now if x or y are < 0 then p must be adjusted  
      p = ~x 
        ? ~y
          ? p // both x and y are >= 0, p is not changed
          : [y = 0, ...p] // y < 0, shift p by on adding a 0 element and set y to 0
        : p.map(r=> ' ' + r, x = 0); // x < 0, add a space to the left for each row in p and set x to 0
      r = p[y] || ''; // get current row in r
      for( ; !r[x]; ) // if the current row is empty or too short
        r += ' '; // ... add spaces up to position x
      // set character in x position
      r = [...r], // the shorter way is converting to array ...
      r[x] = '*', // setting the element
      p[y] = r.join`` // and the back to string using join
    }
  }),
  p.join`\n` // return output array as a newline separated string
}

পরীক্ষা

F=m=>(m.replace(/\D(\d+)/g,(d,z)=>{for(;z--;r=[...r],r[x]='*',p[y]=r.join``)for(d<'>'?--x:d<'^'?++x:d<'v'?--y:++y,p=~x?~y?p:[y=0,...p]:p.map(r=>' '+r,x=0),r=p[y]||'';!r[x];)r+=' '},x=y=0,p=['*']),p.join`
`)

// TEST
console.log = x => O.textContent += x + '\n';

console.log(F('')+'\n')

console.log(F('v6>4^3<7')+'\n')

console.log(F('^2v2>3<3v3>4^5v5>3^5>4v2<4v3>4^3v3>3^5>4v2<4v3>7^5>4v2<4v3>9^3<2^2v2>4^2v2<2v3>8^5>2v4>2^4v5<3>6^5>5<5v2>5<5v2>5<4v1>8^3<1^2v2>1v2>2^3v3>2^2>1^2v2<1v3<3>11^3<2^2v2>4^2v2<2v3>5^5>5<5v2>5<5v2>5<4v1>7^5>4v2<4v3>4^3v3>3^5>4v2<3v1<1v2>3^1>1v1'))
<pre id=O></pre>


নিখুঁতভাবে কাজ বলে মনে হচ্ছে।
নিকেল

একমাত্র ব্যতিক্রম সহ: যখন ইনপুটটি খালি থাকে, তখন লেখার প্রয়োজন হয় *
নিকেল

যাদের ব্রাউজারগুলির ES6 ব্যাখ্যায় সমস্যা রয়েছে তারা: jsfiddle.net/2vrrd1wt
নিকেল

@ নিকাএল ধন্যবাদ লক্ষ্য করার জন্য ধন্যবাদ। 1 বাইটের জন্য স্থির
এডক 65

1

পার্ল, 174 বাইট

@M=(['*']);pop=~s/(.)(\d+)/($z=ord$1)&64?($y+=$z&8?-1:1)<0&&unshift@M,[$y++]:($x+=($z&2)-1)<0?@M=map{[$x=0,@$_]}@M:0,$M[$y][$x]='*'for1..$2/gre;print map{map{$_||$"}@$_,$/}@M

কমান্ডলাইন আর্গুমেন্ট হিসাবে ইনপুট আশা করে। যুক্তিটি উদ্ধৃত করতে ভুলবেন না!
উদাহরণ:perl 177.pl "<1^2>3v4<5^6>7v8<9^10>11"

কিছুটা পঠনযোগ্য:

@M=(['*']);                                 # output origin/starting position

pop=~                                       # apply regex to cmdline arg
s!(.)(\d+)!                                 # match $1=direction, $2=count

    ($z=ord$1)                              # get ASCII code for char
    &64                                     # 'v^' have this bit set, '<>' don't

        ?                                   # adjust y:
            ($y += $z&8 ? -1 : 1)           # '^' has bit set, 'v' doesn't
            < 0 &&                          # negative y?
            unshift @M, [$y++]              # prepend row; abuse [] for $y++ saving 3 bytes

        :                                   # adjust x:
            ($x+= ($z&2) -1 )               # '>' has bit set: 2-1=1, '<' hasn't: 0-1=-1
            < 0 ?                           # negative x?
                @M = map{ [$x=0,@$_] } @M   # prepend column, reset x
                :0                          # '?:0' shorter than '&&()'
        ,                                   # oh, and also:
        $M[$y][$x]='*'                      # output current position.

    for 1..$2                               # iterate count
!grex;                                      

print map{ map{$_||$"} @$_, $/ } @M         # iterate rows/cols, print '*' or space

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