সান ফ্রান্সিসকোতে ট্যাক্সিক্যাব


14

আপনি সান ফ্রান্সিসকোতে ট্যাক্সিক্যাব চালক। ট্যাক্সিক্যাব চালকদের মতোই, আপনি এমন একটি গ্রিড নেভিগেট করছেন যেখানে কেবলমাত্র বৈধ দিকনির্দেশ আপনি চালনা করতে পারেন বাম, ডান, উপরে এবং নীচে। তবে সান ফ্রান্সিসকো খুব পাহাড়ী তাই দুটি সংলগ্ন ছেদগুলির মধ্যে দূরত্ব অগত্যা একই নয় not আরও সুনির্দিষ্টভাবে, উচ্চতাতে একটি চৌরাস্তা এবং উচ্চতাতে aসংলগ্ন ছেদগুলির মধ্যে দূরত্ব bহবে 1 + |a - b|। আপনার লক্ষ্য হ'ল মানচিত্রের উপরের বামে আপনার উত্স থেকে নীচে ডানদিকে আপনার গন্তব্য পর্যন্ত সমস্ত সংক্ষিপ্ততম পথগুলি খুঁজে পাওয়া।

ইনপুট

যে কোনও বিন্যাসে পূর্ণসংখ্যার উচ্চতার একটি দ্বিমাত্রিক গ্রিড সবচেয়ে সুবিধাজনক (দ্বি-মাত্রিক অ্যারে, প্রস্থ এবং / বা উচ্চতা সহ এক-মাত্রিক অ্যারে ইত্যাদি) etc.

আউটপুট

উপরের দিকের বাম দিকের নীচে ডান দিকের নীচের কোণে পৌঁছানোর জন্য ভ্রমণের দিকনির্দেশগুলির একটি অনুক্রম যথাক্রমে উচ্চতার দুটি সংলগ্ন ছেদগুলির মধ্যবর্তী দূরত্বের ভিত্তিতে aএবং bসূত্র দ্বারা প্রদত্ত 1 + |a - b|। যদি একাধিক সমাধান আউটপুট হয় সমস্ত সমাধান

যদিও আমি ব্যবহার U, D, L, এবং Rআপ জন্য, নিচে, ডানে আপনার প্রোগ্রাম এতক্ষণ এটা এবং সব ইনপুট জুড়ে তাদের সাথে সামঞ্জস্যপূর্ণ যেমন নির্দেশ প্রতিনিধিত্ব করতে কোনো চার স্বতন্ত্র স্ট্রিং ব্যবহার করতে পারেন নিচের উদাহরণ বাম, এবং।

উদাহরণ

Input:
0 3 0 0 0
0 2 0 2 0
0 0 0 3 0
Output:
D D R R U U R R D D

Input:
3
Output:
<empty>

Input:
11 11 11
11 11 11
11 11 11
Output:
R R D D
R D R D
R D D R
D R R D
D R D R
D D R R

Input:
7 8 1 -1 0
4 4 6 -1 7
3 4 4  2 8
2 5 2 -1 2
Output:
D R D R R D R
D R D R D R R

এটি তাই সংক্ষিপ্ততম বাইট গণনা জবাব সহ উত্তর।


1
উচ্চতা সবসময় 10 এর চেয়ে কম হয়? (তারা উদাহরণগুলিতে রয়েছে, তবে তারা কি সর্বদা থাকবে?)
দাদা

@ দাদা উচ্চতা অগত্যা 10 এর চেয়ে কম নয় (তারা নেতিবাচকও হতে পারে), আমি সেই অনুসারে উদাহরণগুলি আপডেট করেছি।
0 '

যখন আমি দেখলাম যে এই পোস্টটি সক্রিয় ছিল তখন আমি উত্তেজিত হয়ে পড়েছিলাম - আমি ভেবেছিলাম কেউ ট্যাক্সিতে উত্তর পোস্ট করেছে! হতে পারে একদিন
স্পেস জাঙ্ক

উত্তর:


2

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

a=>w=>(B=1/0,(F=(r,p,s,b=a[p])=>p-a.length+1?1/b&&([...a[p]='RDUL'].map((c,d)=>d|p%w<w-1&&d-3|p%w&&F(r+c,P=p+[1,w,-w,-1][d],s+1+Math.abs(b-a[P]))),a[p]=b):R=s>B?R:s<B?(B=s,r):R+' '+r)('',0,0),R)

ইনপুট

বাক্য গঠন সিনট্যাক্সে এক-মাত্রিক অ্যারে aএবং প্রস্থw(a)(w)

আউটপুট

সমাধানগুলির মতো একটি স্থান-বিভাজিত তালিকা "DRDRRDR DRDRDRR"

ফর্ম্যাট এবং মন্তব্য

a => w => (                            // given an array 'a' and a width 'w'
  B = 1 / 0,                           // B = best score so far, initialized as +Infinity
  (                                    //
    F = (                              // F = recursive function with:
      r,                               //   - r = current path (string)
      p,                               //   - p = current position in grid
      s,                               //   - s = current score
      b = a[p]                         //   - b = backup of current cell
    ) =>                               //
    p - a.length + 1 ?                 // if we haven't reached our destination:
      1 / b && (                       //   if the current cell is valid:
        [...a[p] = 'RDUL']             //     invalidate the current cell
        .map((c, d) =>                 //     for each possible direction:
          d | p % w < w - 1 &&         //       check right boundary
          d - 3 | p % w &&             //       check left boundary
          F(                           //       do a recursive call with:
            r + c,                     //         - new direction appended to the path
            P = p + [1, w, -w, -1][d], //         - updated position
            s + 1 + Math.abs(b - a[P]) //         - updated score
          )                            //
        ),                             //
        a[p] = b                       //     restore current cell value
      )                                //
    :                                  // else:
      R = s > B ?                      //   if the current score is worse than B:
        R                              //     keep the previous solution
      : s < B ?                        //   if the current score is better than B:
        (B = s, r)                     //     update best score / store path as new solution
      : R + ' ' + r                    //   if it's just as good: append path to solution
  )('', 0, 0),                         // initial call to F with r = '', p = 0, s = 0
  R                                    // return solution
)                                      //

পরীক্ষার মামলা

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