রুটির একটি অলস ব্যাগ


11

আমি এমন একটি বেকারিটিতে কাজ করি যা গম, রাই, বার্লি, শস্য এবং ফ্রেঞ্চ রুটি পরিবেশন করে তবে বেকারটি খানিকটা অদ্ভুত - সে রুটিগুলি এলোমেলোভাবে সাজিয়ে রাখে এবং কখনও কখনও খালি শেষে কিছু তাক ফেলে দেয়।

প্রতিদিন, একই গ্রাহক এসে রুটির প্রতিটি রুটির একটির জন্য জিজ্ঞাসা করলেন, কিন্তু কৌতূহলজনক বিষয় হ'ল তিনি একটি জীবাণুফোব, সুতরাং আমি যখন তার ব্যাগটি পূরণ করি, তখন পর পর দুটি নির্বাচনের জন্য আমি দুটি সংলগ্ন তাক থেকে রুটি নিতে পারি না।

সংলগ্ন তাকগুলির মধ্যে হাঁটতে এক সেকেন্ড সময় লাগে। এটি একটি ব্যস্ততার দোকান; রুটির যেকোন এলোমেলো কনফিগারেশনের জন্য, আমি প্রতিটি অনন্য রুটির একটি পেতে সময় কমিয়ে আনতে চাই। আমি যে কোনও শেল্ফে শুরু এবং শেষ করতে পারি।

যদি আজকের অর্ডার হয় তবে W B W G F R Wএকটি সম্ভাব্য পথটি 0, 3, 5, 1, 4মোট 12 সেকেন্ডের জন্য:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12

( 1, 2, 3, 4, 5কাজ করে না, কারণ পাশের তাক থেকে ক্রমাগত রুটি নেওয়া হয়।)

যদি এটি হয় তবে B W B G B F B R B W B Fএকটি সম্ভাব্য পথটি 1, 3, 5, 7, 10মোট 9 সেকেন্ডের জন্য।

ব্যবস্থাপক সর্বদা নিশ্চিত করে থাকেন যে কোনও সম্ভাব্য সমাধান রয়েছে, তাই খারাপ ইনপুটগুলি ধরা সম্পর্কে আমাকে চিন্তা করার দরকার নেই। তিনি সাধারণত আমাকে একটি ফাইলের অর্ডার প্রেরণ করেন তবে আমি চাইলে আমি এটি এসটিডিনে টাইপ করতে পারি বা এটি অন্যভাবে পড়তে পারি। আমি চাই যে প্রোগ্রামটি সেরা পাথের সূচকগুলি মুদ্রণ করুক, পাশাপাশি এর সময়টিও ডিফল্ট I / O নিয়ম অনুসারে

সংক্ষেপে:

  1. 5 ধরণের রুটি।
  2. লোফ অর্ডারগুলি এলোমেলো অর্ডার এবং দৈর্ঘ্যের স্ট্রিং হিসাবে উপস্থিত হয়।
  3. প্রতিটি অনন্য রুটির একটি বেছে নিতে হবে।
  4. সংলগ্ন টানা নির্বাচন করতে পারবেন না।
  5. নির্বাচন সূচকের মধ্যে দূরত্ব হ্রাস করুন।
  6. অবৈধ ইনপুটগুলি নিয়ে চিন্তা করার দরকার নেই।
  7. ডিফল্ট আই / ও বিধি প্রযোজ্য।

এটি , সংক্ষিপ্ততম বাইট গণনা জয়।


0+3+5+1+4=13কিন্তু 1+3+5+7+10=26, না 9
শেগি

2
@ লুইসফেলিপজেজেসুস মুনোজ যথেষ্ট নয়, এই টানা কয়েকটি অশ্লীল সংলগ্ন।
নিক রেড

4
পিপিসিজিতে স্বাগতম, এবং প্রথম চ্যালেঞ্জ!
ব্যবহারকারী 202729

2
এটি আসল কাজটির পক্ষে গুরুত্বপূর্ণ নয়, তবে আমি কৌতূহলপূর্ণ: কেন তিনি জীবাণুবিদ হওয়ার অর্থ কেন আপনি পরপর দুটি নির্বাচনের সাথে সংলগ্ন দুটি তাক থেকে রুটি নিতে পারবেন না?
সূন্দর - মনিকা পুনরায় ইনস্টল করুন

1
কোন খালি তাক যে হতে পারে না প্রান্তে? (যেমন 'WBWG FRW'একটি বৈধ ইনপুটও?
জোনাথন অ্যালান

উত্তর:


3

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

অলিভারকে ধন্যবাদ 1 বাইট সংরক্ষিত

অক্ষরের অ্যারে হিসাবে ইনপুট নেয়। কমা-বিভাজিত স্ট্রিং আউটপুট দেয় যেখানে প্রথম মানটি মোট সময় এবং পরেরগুলি পথটি বর্ণনা করে।

a=>(b=g=(r,s=o='',c,p)=>s[c>b|4]?o=(b=c)+r:a.map((v,i)=>s.match(v)||(d=p<i?i-p:p-i)<2||g([r,i],s+v,~~c+d,i))&&o)``

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

মন্তব্য

a => (                          // a[] = input array
  b =                           // b = best score so far (initially a non-numeric value)
  g = (                         // g = recursive function taking:
    r,                          //   r = path
    s =                         //   s = string of collected loaves of bread
    o = '',                     //   o = final output
    c,                          //   c = current cost
    p                           //   p = index of the last visited shelf 
  ) =>                          //
    s[c > b                     // if the final cost is not greater than our best score
            | 4] ?              // and we've successfully collected 5 loaves of bread:
      o = (b = c) + r           //   update the current output and the best score
    :                           // else:
      a.map((v, i) =>           //   for each loaf of bread v at shelf i in a[]:
        s.match(v) ||           //     if we've already collected this kind of bread
        (d =                    //     or the distance d
          p < i ? i - p : p - i //     defined as the absolute value of p - i
        ) < 2 ||                //     is less than 2: stop recursion
        g(                      //     otherwise, do a recursive call to g() with:
          [r, i],               //       r updated with the index of the current shelf
          s + v,                //       s updated with the current loaf of bread
          ~~c + d,              //       c updated with the last distance
          i                     //       i as the index of the last shelf
        )                       //     end of recursive call
      )                         //   end of map()
      && o                      //   return the current output
  )``                           // initial call to g() with r = [""]

0

পাইথন 2 , 212 210 বাইট

lambda s:min((sum(h(p)),p)for b in combinations(range(len(s)),5)for p in permutations(b)if(len(set(s[i]for i in p))==5)&all(d>1for d in h(p)))
h=lambda p:[abs(y-x)for x,y in zip(p,p[1:])]
from itertools import*

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

2 ধন্যবা বাইট জনাথন Frech


if len(...)==5and all(...)if(len(...)==5)&all(...)দুটি বাইট সংরক্ষণ করতে পারে ।
জোনাথন ফ্রেচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.