ট্রলি সমস্যা সমাধান করুন


14

দার্শনিকরা দীর্ঘদিন ধরে ট্রলির সমস্যায় ভাবছেন । দুর্ভাগ্যক্রমে, কোনও মানুষ এখনও এই সমস্যার সমাধান করেনি। ভাগ্যক্রমে, প্রোগ্রামার হিসাবে আমরা কম্পিউটারগুলি আমাদের জন্য সমস্যাটি সমাধান করতে পারি!

ইনপুট

তোমার প্রোগ্রাম ইনপুট হিসাবে (অধিকতম এক প্রান্ত সঙ্গে থেকে গ্রহণ করা হবে একটি (সসীম) নির্দেশ গ্রাফ xথেকে yকোন জন্য xএবং y) একটি মনোনীত নোড সঙ্গে, এবং নন-নেগেটিভ পূর্ণসংখ্যা প্রতিটি প্রান্ত সংযুক্ত (যে ট্র্যাক বাঁধা মানুষের সংখ্যা প্রতীক) । এছাড়াও, প্রতিটি নোডের কমপক্ষে একটি প্রস্থান প্রান্ত থাকে।

ট্রলিটি নির্দিষ্ট নোড থেকে শুরু হয়। প্রতিটি টার্ন, ট্রলিটি নোডে থাকলে x, ইউটিলিটিটি একটি প্রান্ত নির্বাচন করে (x,y)। এই প্রান্তের লোকেরা মারা যায়, এবং ট্রলি এখন প্রান্তে y। এই প্রক্রিয়া চিরকাল অব্যাহত থাকে।

নোট যে মানুষ শুধুমাত্র একবার, যদি প্রান্ত মরতে পারে, যাতে (x,y)রয়েছে nএটা বাঁধা মানুষ, এবং ট্রলি তাদের উপর রান, বলতে 100 বার, এটা এখনও শুধুমাত্র পরিণাম ডেকে আনবে nমৃত্যু।

আউটপুট

উপযোগবাদী তার পছন্দগুলি এমনভাবে করে যাতে মারা যায় এমন লোকের সংখ্যা কমাতে (যা সীমাবদ্ধ হওয়ার গ্যারান্টিযুক্ত, যেহেতু কেবলমাত্র সীমাবদ্ধ মানুষ)। আপনার প্রোগ্রাম এই নম্বর আউটপুট হবে।

ছক পূরণ করা

আপনি যে কোনও যুক্তিসঙ্গত উপায়ে ইনপুট গ্রাফ নিতে পারেন। উদাহরণস্বরূপ, আপনি এটিকে ম্যাট্রিক্স হিসাবে নিতে পারেন এবং মনোনীত নোডটিকে একটি লেবেলযুক্ত 0 হিসাবে গণনা করতে পারেন বা আপনি এর মতো কিছু ব্যবহার করতে পারেন x1,y1,n1;x2,y2,n2;...। উদাহরণস্বরূপ 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0স্ট্যান্ডার্ড ট্রলি সমস্যা উপস্থাপন (শেষে লুপগুলি সহ)।

Testcases

  • 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0 -> 1 (0 থেকে a, a to c (এক ব্যক্তিকে হত্যা করা) যান এবং তারপরে সি থেকে সি পর্যন্ত ট্রলির লুপিং চালিয়ে যান)।
  • 0,0,1;0,a,5;a,a,0 -> 1 (সর্বদা চিরকাল 1 জনের উপরে চলমান 0 থেকে 0 অবধি চলুন),
  • 0,a,5;0,b,1;a,a,1;b,b,6 -> ((০ -> এ -> এ -> এ -> এ -> ... (নোট করুন খ-এ যাওয়ার লোভী সমাধানটি ভুল হবে))
  • 0,a,1;0,b,5;a,b,1;b,a,1 -> 3 (0 -> এ -> খ -> এ -> খ -> ...)
  • 0,a,1;0,b,1;a,a,0;b,b,0 -> ১ (নোট করুন যে দুটি ভিন্ন বিকল্প রয়েছে যা ইউটিলিটিরা নিতে পারে যে উভয়ই কেবল একজনকে হত্যা করে)

এটি , তাই সংক্ষিপ্ত উত্তরটি জেতে! শুভকামনা।

দ্রষ্টব্য: কোনও অসুস্থ লুপ ডি লুপ থাকবে না এবং মাল্টিট্র্যাক বর্ষণ নিষিদ্ধ। এছাড়াও, যদিও আমি এই সমস্যাটি অসীমভের তিনটি আইন (/ গুলি) এর ক্ষেত্রে বিবেচনা করতে পছন্দ করি তবে পিটার টেলর স্যান্ডবক্সে উল্লেখ করেছেন যে এই সমস্যাটি গাণিতিকভাবে সবচেয়ে কম ওজনের র‍্যাও (নিজেই পিছনে ফিরে আসা পথ) সন্ধানের সমান is ।



2
@ বেটাডেকে হ্যাঁ, তবে ট্রলিতে আপগ্রেড হওয়ার কারণে তারা এই প্রশ্নের প্রয়োজনে নিয়মিত লোকের মতোই আচরণ করে।
পাইরুলেজ

উত্তর:


6

জেলি , 27 23 বাইট

ṗL$µṭ0FIm2ASµÐḟµQ⁴ySµ€Ṃ

এটি অনলাইন চেষ্টা করুন! (শেষ পরীক্ষার কেস)

নিষ্ঠুর সংস্করণ (সর্বাধিক লোককে বিদ্রূপ করা)

সংখ্যা হিসাবে ইনপুট নেয়। শেষ উদাহরণের জন্য, 1হয় aএবং 2হয় b0শুরুর নোড প্রথম যুক্তিটি হ'ল প্রান্তগুলির তালিকা (উদাহরণস্বরূপ [0,1],[0,2],[1,1],[2,2]), এবং দ্বিতীয় যুক্তিটি প্রান্তগুলির তালিকা এবং সেগুলির উপরে মানুষের সংখ্যা (উদাঃ)[[0,1],[0,2],[1,1],[2,2]],[1,1,0,0] )।

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

ṗL$µṭ0FIm2ASµÐḟµQ⁴ySµ€Ṃ
ṗL$                       - on the first argument, get the Cartesian power of it to its length.
                            this gives all paths of the length of the input. Cycles are implicit
   µ        µÐḟ           - get valid paths starting with 0 -- filter by:
    ṭ0                      - prepend 0
      F                     - flatten
       I                    - get the difference between elements
        m2                  - every second difference: 0 for each edge that starts at the node the previous edge ended at, nonzero otherwise.
          AS                - 0 iff all elements are 0
               µ    µ€    - on each path:
                Q           - remove repeat edges.
                 ⁴y         - translate according to the mapping in the second program argument
                   S        - Sum
                      Ṃ   - get the minimum of these.

@ শেগি উম্ম, আপনার অর্থ কী তা নিশ্চিত নন? জেলি আপনার চোখ বা কিছু আঘাত করে?
এরিক আউটগল্ফার 15

1
@ এরিকথ আউটগলফার তিনি প্রোগ্রামটির সংস্করণটির উল্লেখ করছেন যা বেশিরভাগ লোককে বিভক্ত করার চেষ্টা করে।
ফায়ার ফ্লেম 241

@ শেগি এটি একটি আকর্ষণীয় চ্যালেঞ্জ হবে।
পাইরুলেজ

9

পাইথন 3 , 80 বাইট

y=lambda d,s=0,p=[],f=0:f in p and s or min(y(d,s+d[f][t],p+[f],t)for t in d[f])

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

নোড আইডি দ্বারা কীড করা অভিধান হিসাবে ইনপুট নেয় T এন্ট্রিগুলি প্রতিবেশীদের অভিধান এবং নোড এবং প্রতিবেশীর মধ্যে ট্র্যাকের লোক সংখ্যা a যেমন, প্রথম পরীক্ষার ক্ষেত্রে:

{0: {1: 0}, 1: {2: 5, 3: 1}, 2: {2: 0}, 3: {3: 0}}

0 হল শুরুর নোড, 1 হ'ল নোড 'এ', 2 হ'ল নোড 'বি' ইত্যাদি,


1

পার্ল 6 , 90 74 বাইট

জো কিং -16 বাইটের জন্য ধন্যবাদ।

my&g=->\a,\b=0,\c=@,\d=0 {a{d}&&b||min map {g a,b+$^f,(|c,d),$^e},a{d}.kv}

রুটটো'র পাইথন সমাধানের বন্দর ।

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


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