তালা এবং কীগুলির একটি খেলা


12

আছে এন বক্স, সংখ্যাযুক্ত 1-এন । প্রতিটি বাক্সটি লক করা আছে, যেমন এটি কেবলমাত্র একই ধরণের কী দ্বারা খোলা যেতে পারে (এছাড়াও 1-এন নম্বরযুক্ত )। এই কীগুলি বাক্সগুলিতে এলোমেলোভাবে ছড়িয়ে ছিটিয়ে রয়েছে (একটি বাক্সে কীগুলির কয়েকটি সংখ্যক কী থাকতে পারে, একটি কীতে নকল সংখ্যা থাকতে পারে) এবং তারপরে সমস্ত বাক্স বন্ধ হয়ে যায় shut অনেকগুলি বাক্সে একটি ধন (সংখ্যাযুক্ত 0 ) লক করা হয়েছে।

সমস্ত ধন পুনরুদ্ধার করতে আপনি একটি তালাবন্ধক ভাড়া করেছেন h তিনি খোলা ফাটল প্রতিটি বক্সের জন্য তিনি চার্জ করেন। এমন কোনও বাক্স খোলার জন্য কোনও চার্জ নেই যার জন্য কীটি ইতিমধ্যে উপলব্ধ।

ইনপুট হ'ল প্রতিটি বাক্সের বিষয়বস্তু। আপনি ইনপুট বিন্যাস সিদ্ধান্ত নিতে পারেন।

কোষাগারগুলি পেতে প্রয়োজনীয় সর্বনিম্ন ব্যয় আউটপুট করুন।

মন্তব্য

  1. আপনার অ্যালগরিদমটি অনেক সময় নিতে পারে তবে এটি অপ্রাসঙ্গিক।
  2. সংক্ষিপ্ততম কোড জিতেছে।
  3. অবৈধ ইনপুট সম্পর্কে বিরক্ত করার দরকার নেই।

নমুনা তথ্য

এখানে লাইন আমি বাক্সে উপস্থিত কীগুলি উপস্থাপন করি i

ইনপুট

2 0
3
4 0
5 6 0
6
0

আউটপুট

1

ইনপুট

2 0
3 0

4 0
6
5 0

আউটপুট

3

ইনপুট

2 4 0
3 0

1 0
6
5 0

আউটপুট

2

ইনপুট

1
3 4


2 6
5

আউটপুট

0

2
এই সম্ভবত সঙ্গে জড়িত এই ?
অ্যাডিসন ক্রম্প

এছাড়াও সম্পর্কিত: puzzling.stackexchange.com/questions/23150/…
Leif Willerts

@ ভোটটোক্লস নিস ভিডিও। এটি একইরকম, ব্যাতিক্রম এটি কোনও গণিতের ধাঁধা এবং নির্দিষ্ট অ্যালগরিদমের কথা বলা ছাড়া সাধারণীকরণের কথা।
ভূত_স_ই_ কোড

1
এটি এই ধাঁধার সাথে সম্পর্কিত বলে মনে হচ্ছে কাঠ এবং স্টিলের প্রায় 100 টি লক করা বাক্স: puzzling.stackexchange.com/q/17852/4551
xnor

4
@ঘোস্ট_ইন_থো_ কোড কোড এটি সরলতার জন্য নয় নমনীয়তার বিষয়ে। সাধারণত, এমন চ্যালেঞ্জগুলির জন্য যেগুলি কাঠামোগত ইনপুট দরকার ততক্ষণ কোনও সুবিধাজনক তালিকা বিন্যাসের অনুমতি দেয়, যতক্ষণ না ডেটা প্রস্রোসেস করা হয় না। ভাষার উপর নির্ভর করে যা আপনার মতো একটি সাদা স্থানকে পৃথক করা ফাইলের অর্থ হতে পারে [[1] [3 4] [] [] [2 6] [5]]বা এর অর্থ হতে পারে বা হতে পারে {{1},{3,4},{},{},{2,6},{5}}। এইভাবে, বেশিরভাগ ভাষা ন্যূনতম কিছুতে ইনপুট পড়া হ্রাস করতে পারে i=eval(read())এবং চ্যালেঞ্জের মজার অংশটিতে ফোকাস করতে পারে।
মার্টিন ইন্ডার

উত্তর:


6

সিজেম, 59 52 50 49 45 43 42 বাইট

qN/ee::~e!{_0+{0a&}#>W%_{1$|(z@-},,\;}%:e<

@ মার্টিনব্যাটনারকে 3 বাইট বন্ধ করে আরও 4 টির পথ সুগম করার জন্য ধন্যবাদ!

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

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

qN/      e# Read all input and split it at linefeeds.
ee       e# Enumerate the lines.
         e# STACK: [[0 "i0 i1 ..."] [1 "j0 j1 ..."] ...]
::~      e# Apply ~ (bitwise NOT/evaluate) to each item of the pairs.
         e# STACK: [[-1 i0 i1 ...] [-2 j0 j1 ...] ...]
e!       e# Push all unique permutations of the resulting array.
{        e# For each permutation:
  _0+    e#   Push a copy and append 0 to it.
  {0a&}# e#   Find the first index of an element that contains 0.
  >      e#   Discard all previous elements of the array.
  W%     e#   Reverse the resulting array.
         e#   We now have a (partial) permutation that contains
         e#   all treasures and ends with a treasure.
  _      e#   Push a copy. The original (which contains lists, but no 
              numbers) will serve as accumulator.
  {      e#   Filter; for each list in the array:
    1$|  e#     Push a copy of the accumulator and perform set union.
    (    e#     Shift out the first element (bitwise NOT of 0-based index).
    z    e#     Apply absolute value to push the 1-based index.
    @-   e#     Perform set difference with the former state of the 
         e#     accumulator. This pushes an empty list iff the 1-based
         e#     index was already in the accumulator, i.e., iff we already
         e#     had a key.
  },     e#   Keep the element if we did not have the key.
  ,      e#   Count the kept elements.
  \;     e#   Discard the accumulator from the stack.
}%       e#
:e<      e# Get the minimum of all results.

2
আপনি সিজেএম বোঝার উপহার না দিয়ে আমাদের জন্য ব্যাখ্যা যুক্ত করতে পারেন? : ডি আমি কীভাবে এটি কাজ করে তা জানতে চাই।
অ্যাডিসন ক্রম্প

2
@ ভোটটোক্লোজ এই সিজেএএম 101
ইউজার 41805

array long &কাজ, তাই আপনি অপসারণ করতে পারেন aথেকে 0a&। দুঃখজনকভাবে এটি আপনাকে ধরতে কিছুটা শক্ত করে তোলে।
পিটার টেলর

@PeterTaylor দুর্ভাগ্যবশত, আমি যদি প্রতিস্থাপন 0a&সঙ্গে 0&আমিও প্রতিস্থাপন আছে 0+সঙ্গে 0aa+, যেহেতু 0 0&falsy হয়।
ডেনিস

@ ভোটটোক্লোজ আমি আমার উত্তর সম্পাদনা করেছি।
ডেনিস

2

সিজেএম (53 বাইট)

Nq+N/:a::~:A,_m*_.&{,}$_{{_Af=e_|}:PA,*A,,^0-P0&!}#=,

এটি অনলাইন অনুবাদকের পক্ষে বরং খুব ধীর।

ব্যবচ্ছেদ

Nq+N/:a::~:A      e# Parse the input into arrays and store in A
,_m*_.&           e# Generate (with duplicates) a powerset of [0 1 ... n]
{,}$              e# Sort by size
_{                e# Create a copy and search for first index satisfying...
  {_Af=e_|}:P     e#   Store in P a block which does a reachability expansion
  A,*             e#   Apply it n times (no path can be longer than n)
  A,,^0-          e#   Invert to get the unreached nodes (except 0)
  P               e#   Apply P again to see what's reached from the unreached nodes
  0&!             e#   Check that it doesn't include [0]
}#
=,                e# Look up the powerset element at that index and find length

আমি java.lang.OutOfMemoryError: Java heap spaceআপনার প্রোগ্রামের সাথে পেয়েছি ।
Mআমন

@ কুমোনিও, এটি বিশেষভাবে স্কেলেবল নয়। আমি এটি পরীক্ষার ইনপুটগুলির চেয়ে বড় ইনপুটগুলির সাথে পরীক্ষায় নিই না, সুতরাং এটি স্ট্যান্ডার্ড 1 জিবি হিপ থেকে কতদূর যেতে পারে তা আমি নিশ্চিত নই।
পিটার টেলর

আমি এখানে 6 টি লাইন জেএসে অ্যারে হিসাবে দেখানো চেষ্টা করছিলাম: [ [4,0], [1,3,4], [0], [6,0], [3,0], [5]]অবশ্যই মূল পোস্টে প্রদর্শিত ইনপুট শৈলীর সাথে।
Mআমন

@ কুমোনিও, আমার কম্পিউটারে এটি কেবল 128MB গাদা দিয়ে ইনপুট জরিমানা করে, এটি ডিফল্টর চেয়ে কম।
পিটার টেলর

0

হাস্কেল, 173 বাইট

l আপনি কল করতে চান এক।

আমার ছদ্ম-এর Mapপরিবর্তে ( [(Int,[Int])]পরিবর্তে [[Int]]) ব্যবহার করা উচিত কিনা তা নিশ্চিত নয় ।

l=o[].map(map read).map words.lines
o[]b|0`notElem`concat b=0|0<1=1+minimum[o[n]b|n<-[1..length b],b!!(n-1)/=[]]
o(n:k)b=o(filter(/=0)(k++b!!(n-1)))(take(n-1)b++[]:drop n b)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.