হাইড্রা স্লেয়ার এর রিটার্ন


13

আপনি সেই হাইড্রাকে হত্যা করার পরে বেশ কয়েক বছর হয়ে গেছে , আপনি বহু বছর ধরে গৌরব অর্জন করেছিলেন, কিন্তু এখন লোকেরা আপনাকে ধুয়ে ডাকছে, হয়েছে a ঠিক আছে এর সময় আপনি তাদের ভুল প্রমাণ করার সময়, আপনি বিরক্তিকর হাইড্রার অবস্থান শুনেছেন। কেবল এটিকে হত্যা করুন এবং আপনার প্রাপ্য সমস্ত গৌরব অর্জন করা হবে।

আপনি আপনার তরোয়ালগুলি গ্রহণের জন্য অস্ত্রাগারে পৌঁছেছেন তবে তারা নিয়মিত তরোয়ালগুলির বাইরে চলে গেছে যা তারা রেখে গেছে সেগুলি সেক্টর। একটি এন-সেক্টর হাইড্রাতে মাথা সংখ্যাকে n দ্বারা বিভক্ত করবে, তবে কেবলমাত্র হেডের সংখ্যা এন দ্বারা বিভাজ্য হলে ব্যবহার করা যাবে।

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

লড়াইয়ের প্রতিটি পালা আপনি ব্যবহার করার জন্য একটি তরোয়াল বেছে নিতে পারেন, যদি এক টুকরো পরে হাইড্রার কেবল একটি মাথা থাকে তবে তা জন্মে না। আপনি কখনও কোনও পদক্ষেপ নাও করতে পারেন এবং যদি কোনও সম্ভাব্য পদক্ষেপ না পাওয়া যায় তবে আপনি হারাবেন।

যদি কোনও সমাধান সম্ভব না হয় তবে আপনি সমাধান ব্যতীত অন্য কিছু আউটপুট করতে পারেন, যেমন একটি খালি তালিকা, কিছুই নয়, শূন্য সংখ্যা ইত্যাদি etc.

এটি তাই উত্তরগুলি আরও ভাল হওয়ার সাথে সাথে তাদের বাইট গণনা হিসাবে স্কোর করা হবে।

পরীক্ষার মামলা

এখানে কয়েকটি সুপার বেসিক টেস্ট-কেস রয়েছে, অনুরোধের ভিত্তিতে আরও টেস্ট-কেস যুক্ত করা হবে।

24 heads, 1  heads per turn, [2,3] -> [3,3,2,3]
25 heads, 2  heads per turn, [2,3] -> No solutions
4  heads, 2  heads per turn, [2]   -> No solutions
4  heads, 3  heads per turn, [2,5] -> [2,5]
10 heads, 17 heads per turn, [2, 3, 7, 19] -> No solutions
10 heads, 6  heads per turn, [1,16] -> [1,16]
6  heads, 2  heads per turn, [2, 3, 5] -> [2, 5]
125 heads, 1  head per turn, [1, 2, 3, 127] -> [1, 1, 127]

হাইড্রা শুরু করতে কি কেবল 1 টি মাথা থাকতে পারে?
ইটিএইচ প্রডাকশনগুলি

@Etproductions আপনি যে কেস পরিচালনা করতে হবে না।
অ্যাডহক গার্ফ হান্টার

আমরা কি ধরে নিতে পারি যে তালিকাটি বাছাই করা হয়েছে?
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনস হ্যাঁ আপনি পারেন। দেখছি না কেন।
অ্যাডহক গার্ফ হান্টার

একটি 1-সেক্টর মূলত একটি "স্কিপ টার্ন" তরোয়াল?
নীল

উত্তর:


5

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

@ দ্য পাইরেটবেকে ধন্যবাদ 4 টি বাইট সংরক্ষণ করুন

(h,p,a)=>{for(b={[h]:[]};c=b,b=[];)for(d in c)for(e of a){d%e?0:q=b[d/e+p]=[...c[d],e];if(d==e)return q}}

আমি অনেক বেশি নিরাপদ প্রস্থের প্রথম লুপগুলির জন্য যে গভীরতা-প্রথম পুনরাবৃত্তিটি ব্যবহার করার চেষ্টা করছিলাম তা আমি আঁকিয়েছি। সমাধানটি যদি অ্যারে হিসাবে উপস্থিত থাকে তবে তা আউটপুট করে, এটি না থাকলে চিরকাল চলে। যদি এটি অনুমোদিত না হয় তবে অবশেষে এটি বন্ধ হয়ে যায় (বেশিরভাগ ক্ষেত্রে, যাইহোক):

(h,p,a)=>{for(b={[h]:[]};c=b,b=[],c+c;)for(d in c){for(e of a){a[[,d]]||d%e?0:q=b[d/e+p]=[...c[d],e];if(d==e)return q}a[[,d]]=1}}

3

জাভাস্ক্রিপ্ট, 191 190 বাইট

স্টেপ হেনের কাছে একটি বাইট ধন্যবাদ সংরক্ষণ করা

(h,t,s)=>eval(`r=[],d=0,q=[],s.map(a=>q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=>(a=h/w)==1?d=w:!(a%1)&!r[a+=t]?r[q.push([...p,w],a),a]=1:0);d?(q=[],p).push(d):0}d?p:[]`)

f=(h,t,s)=>eval(`r=[],d=0,q=[],s.map(a=>q.push([],h));while(q.length){p=q.shift(),h=q.shift(),s.map(w=>(a=h/w)==1?d=w:!(a%1)&!r[a+=t]?r[q.push([...p,w],a),a]=1:0);d?(q=[],p).push(d):0}d?p:[]`)

console.log(`[${f(24, 1, [2,3])}]`);
console.log(`[${f(25, 2, [2,3])}]`);
console.log(`[${f(4, 2, [2])}]`);
console.log(`[${f(4, 3, [2,5])}]`);
console.log(`[${f(10, 17, [2, 3, 7, 19])}]`);
console.log(`[${f(10, 6, [1,16])}]`);
console.log(`[${f(125, 1, [1, 16])}]`);
console.log(`[${f(1024, 3, [1, 2, 137])}]`);



2

পাইথন 2 , 169 195 222 বাইট

+26 বাইটগুলি খারাপ অস্ত্রের বাছাইয়ের ক্ষেত্রে চক্রীয় মাথা পুনর্বার সঠিকভাবে পরিচালনা করতে। (এটি নির্দেশ করার জন্য @ পাইরেট বেকে ধন্যবাদ)

+27 বাইটগুলি ত্রুটির কারণে সৃষ্ট কয়েকটি প্রান্তের কেস ঠিক করতে fix

lambda n,p,w:g(n,n,p,w[::-1])[:-1]
def g(n,b,p,w,a=[]):
 if b<2:return[1]
 for x in w:
	if n%x<1and n/x+p!=n and n not in a:
	 try:
		l=[x]+g(n/x+p,n/x,p,w,[n]+a)
	 	if l and l[-1]!=0:return l
	 except:return[0]
 return[0]

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


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



1

VB.NET (.NET 4.5), 439 + 35 (আমদানি) = 474 বাইট

প্রয়োজন Imports System.Collections.Generic

Const N=Nothing
Function Z(h,r,a,Optional c=N,Optional p=N,Optional ByRef s=N)
If c Is N Then
c=New List(Of Long)
p=New List(Of Long)
End If
If s IsNot N And s?.Count<c.Count Then Return N
If p.Contains(h)Then Return N
p.Add(h)
For i=0To a.Count-1
Dim w=a(i)
If h Mod w=0Then
c.Add(w)
If h\w=1And(s Is N Or s?.Count>c.Count)Then
s=New List(Of Long)
s.AddRange(c)
End If
Z(h\w+r,r,a,c,p,s)
c.RemoveAt(c.Count-1)
End If
Next
Z=s
End Function

ফাংশনটি Zদুটি Int64(হেড এবং হেড রেগ্রো হারের সংখ্যা), এবং একটি List(Of Int64)(সেক্টর) List(Of Int64) (the ordered choice of Sectors). Returnsনেবে এবং কোনও সমাধান না হলে কোনও কিছুই না ফিরিয়ে দেবে।

ধরুন সেক্টরগুলি বৃহত্তম থেকে ক্ষুদ্রতম পর্যন্ত সাজানো অর্ডারে উপস্থাপিত হয়।

OptionalRecursive কল রাষ্ট্র সংরক্ষণ করার জন্য পরামিতি। তারা সেক্টরের ব্যবহারের বর্তমান ক্রম, সেক্টরগুলির সবচেয়ে সংক্ষিপ্ততর ক্রম এবং যে মুখের মুখোমুখি হয়েছিল সেগুলি ট্র্যাক করে। যদি আমরা আবার একই সংখ্যক মাথার মুখোমুখি হই তবে এটি পৌঁছানোর জন্য আরও একটি ছোট উপায় থাকতে হবে।

সেক্টরগুলির একমাত্র অর্ডার যে বিষয়টি গুরুত্বপূর্ণ তা হ'ল 1এটি উপস্থিত থাকলে আমার শেষ হওয়া উচিত। অন্যথায়, হাইড্রা সীমানা ছাড়াই বাড়তে পারে কারণ আমি প্রতিটি সময়ে কেবল 1সেক্টরটি ব্যবহার করতে পারি এবং কখনও কোনও অন্য চেষ্টা করতে পারি না।

আমি Nপ্রতিনিধিত্ব করার জন্য একটি ধ্রুবক হিসাবে ঘোষণা করেছি Nothing, প্রতিবার ব্যবহার করতে চাইলে by বাইট শেভ করেছিলাম Nothing

And/ Orশর্ট সার্কিট নয়, সুতরাং ?.অবজেক্ট নাল ত্রুটিগুলি এড়াতে আমি নাল কন্ডিশনাল অপারেটর ( ) ব্যবহার করি । বাস্তব কোডে, আমি AndAlso/ OrElseযা শর্ট সার্কিট করতে ব্যবহার করব।

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


Z পাঠযোগ্যতার জন্য অ-গল্ফড

Public Function Z(currentHeads As Long, regrowRate As Integer, weapons As ISet(Of Long), Optional currentWeapons As List(Of Long) = Nothing, Optional previousHeads As List(Of Long) = Nothing, Optional shortestWeapons As List(Of Long) = Nothing) As List(Of Long)

    ' initial call
    If currentWeapons Is Nothing Then
        currentWeapons = New List(Of Long)
        previousHeads = New List(Of Long)
    End If

    ' we've made more moves than our best so far
    If shortestWeapons IsNot Nothing AndAlso shortestWeapons.Count <= currentWeapons.Count Then
        Return Nothing
    End If

    ' exit, we've been here before
    If previousHeads.Contains(currentHeads) Then
        Return Nothing
    End If

    ' keep track of previous state to prevent duplicate paths
    previousHeads.Add(currentHeads)

    For Each w In weapons

        ' save 1 for last
        If w = 1 Then Continue For

        If currentHeads Mod w = 0 Then
            currentWeapons.Add(w)

            If currentHeads \ w = 1 Then
                If shortestWeapons Is Nothing OrElse shortestWeapons.Count > currentWeapons.Count Then
                    shortestWeapons = New List(Of Long)(currentWeapons)
                End If
            End If

            Dim answer = A(currentHeads \ w + regrowRate, regrowRate, weapons, currentWeapons, previousHeads, shortestWeapons)
            If answer IsNot Nothing Then
                If shortestWeapons Is Nothing OrElse shortestWeapons.Count > answer.Count Then
                    shortestWeapons = New List(Of Long)(answer)
                End If
            End If

            currentWeapons.RemoveAt(currentWeapons.Count - 1)
        End If
    Next

    If weapons.Contains(1) Then
        currentWeapons.Add(1)

        Dim answer = A(currentHeads \ 1 + regrowRate, regrowRate, weapons, currentWeapons, previousHeads, shortestWeapons)
        If answer IsNot Nothing Then
            If shortestWeapons Is Nothing OrElse shortestWeapons.Count > answer.Count Then
                shortestWeapons = New List(Of Long)(answer)
            End If
        End If

        currentWeapons.RemoveAt(currentWeapons.Count - 1)
    End If

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