ताले और चाबी का खेल


12

हैं n बॉक्स, गिने 1-एन । प्रत्येक बॉक्स को बंद कर दिया जाता है, जैसे कि इसे केवल एक ही प्रकार की कुंजी (इसे 1-एन भी गिना जाता है ) द्वारा खोला जा सकता है । ये कुंजियाँ बेतरतीब ढंग से बक्से में बिखरी होती हैं (एक बॉक्स में किसी भी कुंजी की संख्या हो सकती है, एक कुंजी में डुप्लिकेट की कोई भी संख्या हो सकती है), और फिर सभी बॉक्स बंद हो जाते हैं। बहुत से बक्सों में एक खजाना (संख्या 0 ) भी बंद कर दिया गया है।

आपने सभी खजाने को पुनः प्राप्त करने के लिए एक ताला लगा दिया है। वह प्रत्येक बॉक्स के लिए शुल्क लेता है जिसे वह खुली दरार देता है। एक बॉक्स खोलने के लिए कोई शुल्क नहीं है जिसके लिए कुंजी पहले से ही उपलब्ध है।

इनपुट प्रत्येक बॉक्स की सामग्री है। आप इनपुट का प्रारूप तय कर सकते हैं।

खजाने पाने के लिए आवश्यक न्यूनतम लागत का उत्पादन करें।

टिप्पणियाँ

  1. आपके एल्गोरिथ्म में एक लंबा समय लग सकता है, लेकिन यह अप्रासंगिक है।
  2. सबसे छोटा कोड जीतता है।
  3. अमान्य इनपुट के बारे में परेशान होने की आवश्यकता नहीं है।

नमूना डेटा

यहाँ लाइन मैं कुंजी बॉक्स में उपस्थित का प्रतिनिधित्व करता है मैं

इनपुट

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
यह शायद से संबंधित है यह ?
Addison Crump


@VoteToClose अच्छा वीडियो। यह समान है, सिवाय इसके कि यह एक गणितीय पहेली और विशिष्ट एल्गोरिदम की बात करता है, बजाय एक सामान्यीकृत के।
भूत_न_थे_कोड

1
यह लकड़ी और स्टील के 100 बंद बक्से के बारे में इस पहेली से संबंधित लगता है: puzzling.stackexchange.com/q/17852/4551
xnor

4
@ghosts_in_the_code यह सादगी के बारे में नहीं बल्कि लचीलेपन के बारे में है। आमतौर पर, चुनौतियों को संरचित इनपुट की आवश्यकता होती है, जब तक कि डेटा प्रीप्रोसेस नहीं किया जाता है, किसी भी सुविधाजनक सूची प्रारूप की अनुमति देता है। भाषा पर निर्भर करता है कि आपके पास एक व्हाट्सएप से अलग फाइल का मतलब हो सकता है, या इसका मतलब [[1] [3 4] [] [] [2 6] [5]]या हो सकता है {{1},{3,4},{},{},{2,6},{5}}। इस तरह, अधिकांश भाषाएं कुछ के रूप में तुच्छ के रूप में इनपुट को पढ़ना कम कर सकती हैं i=eval(read())और चुनौती के मजेदार हिस्से पर ध्यान केंद्रित कर सकती हैं।
मार्टिन एंडर

जवाबों:


6

CJam, 59 52 50 49 45 43 42 बाइट्स

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

3 बाइट को बंद करने के लिए @ मार्टिनबटनर को धन्यवाद और 4 और के लिए मार्ग प्रशस्त किया!

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

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
क्या आप CJam समझ के उपहार के बिना हमारे लिए स्पष्टीकरण जोड़ सकते हैं? : D मैं जानना चाहता हूं कि यह कैसे काम करता है।
Addison Crump


array long &काम करता है, तो आप aसे निकाल सकते हैं 0a&। अफसोस की बात यह है कि आपको पकड़ना थोड़ा मुश्किल हो जाता है।
पीटर टेलर

@PeterTaylor दुर्भाग्य से, अगर मैं 0a&साथ देता हूं, तो मुझे 0&भी 0+साथ देना होगा 0aa+, क्योंकि 0 0&मिथ्या है।
डेनिस

@VoteToClose मैंने अपना उत्तर संपादित कर लिया है।
डेनिस

2

CJam (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आपके कार्यक्रम के साथ मिला ।
.मन

@qumonio, यह विशेष रूप से स्केलेबल नहीं है। मैंने प्रश्न में परीक्षण इनपुट की तुलना में बड़े इनपुट के साथ इसका परीक्षण नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह मानक 1 जीबी ढेर पर कितनी दूर जा सकता है।
पीटर टेलर

मैं यहाँ जेएस में एक सरणी के रूप में दिखाई गई 6 लाइन की कोशिश कर रहा था: [ [4,0], [1,3,4], [0], [6,0], [3,0], [5]]निश्चित रूप से इनपुट शैली के साथ जैसा कि मूल पोस्ट में दिखाया गया है।
Žमन 12

@qumonio, मेरे कंप्यूटर पर यह केवल 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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.