हाइड्रा कातिल बनें


13

आप क्षेत्र के सर्वश्रेष्ठ और सबसे प्रसिद्ध नायक हैं। हाल ही में ऐसी अफवाहें सामने आई हैं कि पास के खड्ड में एक हाइड्रा लटका हुआ है। बहादुर और गुणी नायक होने के नाते आप आप हैं, आप आज कुछ समय बाद इसकी जाँच करेंगे।

हाइड्रा के साथ समस्या यह है कि हर बार जब आप उनके सिर काटने की कोशिश करते हैं तो कुछ नए वापस आ जाते हैं। सौभाग्य से आपके लिए आपके पास तलवारें हैं जो एक ही बार में कई सिर काट सकती हैं। लेकिन वहाँ एक पकड़ है, अगर हाइड्रा में आपकी तलवार की कटौती की तुलना में कम सिर हैं, तो आप हाइड्रा पर हमला करने में सक्षम नहीं होंगे। जब हाइड्रा में बिल्कुल शून्य सिर होता है, तो आपने इसे मार दिया है।

द बिसेसर नामक एक विशेष तलवार भी है जो हाइड्रा के आधे सिर काट देगा, लेकिन केवल अगर सिर की संख्या भी हो। सिर की संख्या विषम होने पर बिसेसर का उपयोग बिल्कुल नहीं किया जा सकता है। यह शून्य सिर काटने से अलग है।

तो आपने फैसला किया है कि आप हाइड्रा को मारने का सबसे अच्छा तरीका जानने के लिए एक कंप्यूटर प्रोग्राम लिखेंगे।

कार्य

आपको इनपुट के रूप में दिया जाएगा

  • हाइड्रा के प्रमुखों की संख्या के साथ शुरू होता है
  • हाइड्रा के प्रत्येक शीर्ष पर हेड्स की संख्या होती है
  • प्रत्येक के उपयोग के लिए उपलब्ध तलवारों की एक सूची (प्रत्येक या तो एक द्विभाजक है या प्रत्येक मोड़ के लिए निश्चित संख्या में कटौती करता है)

आपको उन चालों की एक सूची तैयार करनी चाहिए जो हाइड्रा को कम से कम संख्या में मोड़ देगी। यदि हाइड्रा को मारने का कोई तरीका नहीं है, तो आपको संकेत करने वाले कुछ अन्य मूल्य का उत्पादन करना चाहिए (और खाली सूची ठीक है यदि आपकी भाषा दृढ़ता से टाइप की गई है)। यदि हाइड्रा को मारने के लिए कई इष्टतम तरीके हैं, तो आप उनमें से किसी एक या सभी को आउटपुट कर सकते हैं।

यह एक प्रश्न है, इसलिए उत्तर बाइट्स में दिए जाएंगे, कम बाइट बेहतर होने के साथ।

परीक्षण के मामलों

अधिक अनुरोध पर उपलब्ध है

5 heads, 9 each turn,  [-1,-2,-5] -> [-5]
12 heads, 1 each turn, [/2,-1] -> No solution
8 heads, 2 each turn,  [-9, -1] -> [-1,-9]
3 heads, 23 each turn, [/2,-1,-26] -> [-1,-1,-26,-26,-26,-26,-26,-26,-26,-26]
16 heads, 1 each turn, [/2, 4, 2] -> [/2,-4,/2,-4]

यह प्रश्न हाइड्रैसलेयर के मुख्य मैकेनिक का एक सरलीकृत संस्करण है । यदि आप इस तरह की पहेली को पसंद करते हैं, तो मैं इसे बाहर की जाँच करने की सलाह देता हूं, इसकी बहुत मजेदार है। मेरा खेल से कोई जुड़ाव नहीं है।


1
प्रत्येक मोड़ पर बढ़ने वाले सिर की संख्या स्थिर है, हाँ? कटे हुए सिर की संख्या पर निर्भर नहीं?
केस्मार्ट

1
@ काम सही है।
तदर्थ गार्फ हंटर

यदि द्विभाजक केवल काम करता है यदि सिर भी हैं तो इसका मतलब यह है कि यदि वे विषम हैं तो यह कुछ भी नहीं करता है? @ThePirateBay का समाधान तब [/ 2, -26] होगा
dj0wns

1
@ dj0wns बिज़ेक्टर का उपयोग तब नहीं किया जा सकता जब वे विषम हों।
तदर्थ गार्फ हंटर

@ नन्हें जो सही लगता है, ख़ुशी से [/2, -2, /2, -2, -4]काम भी करता है।
तदर्थ गार्फ हंटर

जवाबों:


3

जावास्क्रिप्ट, 230 223 बाइट्स

f=(h,t,s)=>{m=h-Math.min(...s),d=1,q=[],s.map(a=>q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=>!(a=w?h+w:h/2)?d=w:!(a%1)&a>0&a<m&!f[a+=t]?f[q.push([...p,w],a),a]=1:0);d<1?(q=[],p).push(d):0}return d<1?p:[]}

_=_=>f=(h,t,s)=>{m=h-Math.min(...s),d=1,q=[],s.map(a=>q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=>!(a=w?h+w:h/2)?d=w:!(a%1)&a>0&a<m&!f[a+=t]?f[q.push([...p,w],a),a]=1:0);d<1?(q=[],p).push(d):0}return d<1?p:[]}

console.log(`[${_()(5, 9,  [-1,-2,-5])}]`);
console.log(`[${_()(12, 1, [0,-1])}]`);
console.log(`[${_()(8, 2,  [-9,-1])}]`);
console.log(`[${_()(1, 2,  [0,-4])}]`);
console.log(`[${_()(3, 2,  [0,-4,-1])}]`);
console.log(`[${_()(3, 4,  [0,-4,-1])}]`);
console.log(`[${_()(3, 23, [0,-1,-26])}]`);
console.log(`[${_()(16, 1, [0,-4,-2])}]`);

Ungolfed संस्करण:

f=(heads,turn,swords)=>{
  max=heads-Math.min(...swords);

  found=1;
  flags=[];
  queue=[];
  swords.map(a=>queue.push([],heads));

  while(queue.length){
    path=queue.shift();
    heads=queue.shift();

    swords.map(sword=>{
      after=sword?heads+sword:heads/2;

      if(!after){
        found=sword;
      }else if(!(after%1)&after>0&after<max&!flags[after+=turn]){
        flags[after]=1;
        queue.push([...path,sword],after);
      }
    });

    if(found<1){
      path.push(found);
      break;
    }
  }

  return found<1?path:[];
}

द्विभाजक का प्रतिनिधित्व किया जाता है 0

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.