জাম্পের ন্যূনতম সংখ্যা


14

সংখ্যার ক্রম দেওয়া, শুরুর অবস্থান থেকে শেষের দিকে যেতে সর্বনিম্ন জাম্পের সন্ধান করুন এবং আবার শুরুর অবস্থানে ফিরে আসুন।

সিকোয়েন্সের প্রতিটি উপাদান সর্বাধিক সংখ্যক চলনকে বোঝায় যা একজন সেই অবস্থান থেকে সরে যেতে পারে।

যে কোনও পজিশনে আপনি সর্বাধিক কে মুভ করতে পারেন, যেখানে কে সেই অবস্থানের মধ্যে সঞ্চিত মান। শেষে পৌঁছানোর পরে, আপনি কেবল জাম্পিংয়ের জন্য সেই অবস্থানগুলি ব্যবহার করতে পারেন যা আগে জাম্পিংয়ের জন্য ব্যবহৃত হয় নি।

ইনপুটটি একক-ফাঁক দিয়ে পৃথক করা সংখ্যার ক্রম হিসাবে দেওয়া হবে। আউটপুট একটি একক সংখ্যা হওয়া উচিত যা ব্যবহৃত সর্বনিম্ন জাম্পের সংখ্যা। যদি শেষের দিকে যেতে এবং প্রারম্ভিক অবস্থানে ফিরে আসা সম্ভব না হয়, তবে -1 মুদ্রণ করুন

ইনপুট:

2 4 2 2 3 4 2 2

আউটপুট:

6 (3 টি শেষ পর্যন্ত পৌঁছাতে এবং 3 ফিরে আসতে)

ইনপুট

1 0

আউটপুট

-1

বিঃদ্রঃ

  • অনুমান করুন যে ক্রমের সমস্ত সংখ্যা অ-নেতিবাচক

সম্পাদনা 1

লাইন "সুতরাং, এটি পরিষ্কার হওয়া উচিত যে একজন সর্বদা সর্বশেষ অবস্থান থেকে লাফিয়ে উঠতে পারে।" বিভ্রান্তিকর হতে পারে, তাই আমি এটিকে প্রশ্ন থেকে সরিয়েছি। এটি প্রশ্নের কোনও প্রভাব ফেলবে না।

বিজয়ী মানদণ্ড:

সংক্ষিপ্ত কোড সহ বিজয়ী এক হবে।


3
Thus, it should be clear that one can always jump from the last position.- 1 0একটি পাল্টা নমুনা না ?
ড্যানিয়েল লুবারভ

@ ড্যানিয়েল নং জাম্পের সংখ্যা সেই পজিশনে সঞ্চিত মানের সমান হবে। শেষ অবস্থানটি সর্বদা এমন প্রার্থী যেখান থেকে যে কেউ লাফিয়ে উঠতে পারে যেহেতু এই অবস্থানটি আগে জাম্পিংয়ের জন্য ব্যবহৃত হয় নি।
20:33

1
এই বিবরণটি বিভ্রান্তিকর কারণ "লাফানো" দুটি পৃথক জিনিস বোঝাতে ব্যবহৃত হয় এবং কেবলমাত্র একটি প্রকৃত উদাহরণ দিয়ে, কোনটি ব্যবহার করে কোন অর্থটি বোঝায় তা মুছে ফেলা কঠিন। আমি এমন একটি বিবরণ পছন্দ করবো যা উল্লেখ করুন, "লাফান" এবং "চালগুলি" বলে। এই পরিভাষাটি দিয়ে আপনি বলবেন যে প্রতিটি পদক্ষেপে কিছু সংখ্যক লাফ রয়েছে। ইনপুটটিতে থাকা সংখ্যাগুলি সর্বোচ্চ সংখ্যক জাম্প সরবরাহ করে এবং আউটপুটটি নির্বিঘ্নে ন্যূনতম সংখ্যার চালানো প্রতিবেদন হিসাবে বর্ণনা করা যেতে পারে।
ব্রেডবক্স

1
বিজয়ী মানদণ্ড কী? কোড-গল্ফের পাশাপাশি আপনি কোড-চ্যালেঞ্জ ট্যাগ করেছেন তা পরিষ্কার নয়।
হাওয়ার্ড

@ ব্রিডবক্স হ্যাঁ আমি একমত, এটি অস্পষ্ট। আমি শীঘ্রই প্রশ্ন আপডেট করব।
22:53

উত্তর:


4

এপিএল (ডায়ালগ), 116

f←{{⊃,/{2>|≡⍵:⊂⍵⋄⍵}¨⍵}⍣≡1{(⍴⍵)≤y←⊃⍺:⍵⋄⍵[y]=0:0⋄x←⍵⋄x[y]←0⋄∇∘x¨,∘⍺¨y+⍳y⌷⍵},⍵}
{0≡+/⍵:¯1⋄(⌊/+/0=⍵)-+/0=x}↑⊃,/f¨⌽¨f x←⎕

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

      2 4 2 2 3 4 2 2
6
      1 0
¯1
      1 1 1 1
¯1
      3 1 2 0 4
3
      1
0

অভিগমন

পদ্ধতির একটি পুনরাবৃত্তি ফাংশন ব্যবহার করে একটি নিষ্ঠুর শক্তি অনুসন্ধান।

অবস্থান 1 থেকে শুরু করে বর্তমান অবস্থানে 0 তে মান নির্ধারণ করুন এবং বর্তমান অবস্থান থেকে লাফিয়ে তোলা যায় এমন পজিশনের একটি অ্যারে তৈরি করুন। নতুন অবস্থান এবং পরিবর্তিত অ্যারে নিজেই পাস করুন। বেস কেসগুলি তখন হয় যখন বর্তমান অবস্থানে মান 0 হয় (লাফ দিতে পারে না) বা শেষে পৌঁছায়।

তারপরে, উত্পন্ন প্রতিটি অ্যারের জন্য, এটিকে বিপরীত করুন এবং আবার অনুসন্ধান করুন। যেহেতু লাফানো অবস্থানগুলি 0 তে সেট করা আছে, আমরা সেখান থেকে আবার লাফাতে পারি না।

আমরা যে প্রান্তে পৌঁছেছি তাদের জন্য, সর্বনিম্ন 0 এর সংখ্যা রয়েছে এমন একটি সন্ধান করুন। প্রাথমিক অ্যারেতে 0 এর সংখ্যাটি বিয়োগ করে সম্পাদিত জাম্পের আসল সংখ্যা দেয়।


4

গণিত, 1973 চর

পাশবিক বল.

Min[Length/@Select[Join[{1},#,{n},Reverse@#2]&@@@Tuples[Subsets@Range[3,n=Length[i=FromDigits/@StringSplit@InputString[]]]-1,2],{}⋃#==Sort@#∧And@@Thread[i[[#]]≥Abs[#-Rest@#~Append~1]]&]]/.∞->-1 

খুব চিত্তাকর্ষক কাজ। এটি নিষ্ঠুর শক্তি হতে পারে তবে তা তবে এটি খুব মার্জিত।
ডেভিডসি

3

গণিত 351

[দ্রষ্টব্য: এটি এখনও পুরোপুরি গল্ফ হয় নি; এছাড়াও, প্রয়োজনীয় ফর্ম্যাটটি ফিট করার জন্য ইনপুটটি সামঞ্জস্য করা দরকার। এবং একই পদে নো-জাম্পিং-অন-দু'বার নিয়ম প্রয়োগ করা দরকার। কিছু কোড ফর্ম্যাটিং ইস্যু রয়েছে যা সম্বোধনের প্রয়োজন। তবে এটি একটি শুরু।]

প্রতিটি অবস্থানের সাথে সম্পর্কিত নোডগুলি সহ একটি গ্রাফ তৈরি করা হয়, অর্থাত প্রতিটি ইনপুট অঙ্ক জাম্পের প্রতিনিধিত্ব করে। DirectedEdge[node1, node2]সূচিত করে যে নোড 1 থেকে নোড 2 এ ঝাঁপ দেওয়া সম্ভব Sh

f@j_:=
(d={v=FromCharacterCode/@(Range[Length[j]]+96),j}\[Transpose];
w[n_,o_:"+"]:={d[[n,1]],FromCharacterCode/@(ToCharacterCode[d[[n,1]]][[1]]+Range[d[[n,2]]]  
If[o=="+",1,-1])};

y=Graph[Flatten[Thread[DirectedEdge[#1,#2]]&@@@(Join[w[#]&/@Range[8],w[#,3]&/@Range[8]])]];

(Length[Join[FindShortestPath[y,v[[1]],v[[-1]]],FindShortestPath[y,v[[-1]],v[[1]]]]]-2)
/.{0-> -1})

ব্যবহার

f[{2,4,2,2,3,4,2,2}]
f[{3,4,0,0,6}]
f[{1,0}]

6
3
-1


এটি আংশিক ভুল যেহেতু এটি দু'বার নিয়ম করে কোনও সংখ্যায় লাফিয়ে লাফিয়ে প্রয়োগ করে না, তবে এটি একটি শুরু, সুতরাং আমি এটির জন্য উজ্জীবিত হব। এটি সম্ভব হলে আমার কোনও ধারণা ছিল না :)
ডুরকনব

আপনি সঠিক. আমি নম্বরে-ঝাঁপিয়ে-নাম্বারকে দুবারের নিয়মটিকে উপেক্ষা করেছি আগামীকাল আমি এটিকে সংশোধন করার চেষ্টা করব।
ডেভিডসি

3

পাইথন 304

আমি মনে করি যে এই নতুন পদ্ধতির সমাধান [আশা করি!] [2,0] কেস এবং এর অনুরূপ সমস্ত সমস্যা সমাধান করে:

এই সংস্করণে ইনপুট ক্রমটি শেষ অবধি (যদি সম্ভব হয়) বিপরীত হয় এবং তারপরে আমরা বিপরীত ক্রম দিয়ে আবার প্রক্রিয়া শুরু করি। এখন আমরা গ্যারান্টি দিতে পারি যে প্রতিটি বৈধ সমাধানের জন্য জাম্পগুলির মধ্যে একটি শেষ উপাদানটিতে অবতরণ করে।

## Back and forward version

# Changed: now the possible jumps from a given L[i] position  
# are at most until the end of the sequence 
def AvailableJumps(L,i): return range(1,min(L[i]+1,len(L)-i))

# In this version we add a boolean variable bkw to keep track of the
# direction in which the sequence is being traversed
def Jumps(L,i,n,S,bkw):
    # If we reach the end of the sequence...
    # ...append the new solution if going backwards
    if (bkw & (i == len(L)-1)): 
            S.append(n)
    else:
        # ...or start again from 0 with the reversed sequence if going forward
        if (i == len(L)-1):
            Jumps(L[::-1],0,n,S,True)    
        else:
            Laux = list(L)
            # Now we only have to disable one single position each time
            Laux[i] = 0
            for j in AvailableJumps(L,i):
                Jumps(Laux,i+j,n+1,S,bkw)

def MiniJumpBF(L):
    S = []        
    Jumps(L,0,0,S,False)
    return min(S) if (S) else -1

এগুলি গল্ফযুক্ত সংস্করণগুলি:

def J(L,i,n,S,b):
    if (i == len(L)-1):
        S.append(n) if b else J(L[::-1],0,n,S,True)
    else:
        L2 = list(L)
        L2[i] = 0
        for j in range(1,min(L[i]+1,len(L)-i)):
            J(L2,i+j,n+1,S,b)
def MJ(L):
    S = []        
    J(L,0,0,S,False)
    return min(S) if (S) else -1

এবং কিছু উদাহরণ:

MJ( [2, 4, 2, 2, 3, 4, 2, 2] ) -->  6
MJ( [0, 2, 4, 2, 2, 3, 4, 2, 2] ) -->  -1
MJ( [3, 0, 0, 1, 4] ) -->  3
MJ( [2, 0] ) -->  -1
MJ( [1] ) -->  0
MJ( [10, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10] ) -->  4
MJ( [3, 2, 3, 2, 1] ) -->  5
MJ( [1, 1, 1, 1, 1, 1, 6] ) -->  7
MJ( [7, 1, 1, 1, 1, 1, 1, 7] ) -->  2

আরও গল্ফিংয়ের বিশাল সম্ভাবনা রয়েছে। তবে ইনপুট এবং আউটপুট পরিচালনা করার কোনও ব্যবস্থা নেই, যা এই সমস্যার অংশ।
মনিকা পুনরায় ইনস্টল করুন

1
আপনার কাছে প্রচুর অপ্রয়োজনীয় শ্বেতস্পেস রয়েছে ...
ডুরকনব

3

আর - 195

x=scan(nl=1)
L=length
n=L(x)
I=1:(2*n-1)
P=n-abs(n-I)
m=0
for(l in I)if(any(combn(I,l,function(i)all(P[i[c(1,k<-L(i))]]==1,n%in%i,L(unique(P[i]))==k-1,diff(i)<=x[P][i[-k]])))){m=l;break}
cat(m-1)

সিমুলেশন:

1: 2 4 2 2 3 4 2 2   # everything after 1: is read from stdin
6                    # output is printed to stdout

1: 1 0               # everything after 1: is read from stdin
-1                   # output is printed to stdout

ডি-golfed:

x = scan(nlines = 1)       # reads from stdin
n = length(x)
index    = 1:(2*n-1)       # 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
position = c(1:n, (n-1):1) # 1  2  3  4  5  6  7  8  7  6  5  4  3  2  1
value    = x[position]     # 2  4  2  2  3  4  2  2  2  4  3  2  2  4  2
is_valid_path = function(subindex) {
  k = length(subindex)
  position[subindex[1]] == 1                  & # starts at 1
  position[subindex[k]] == 1                  & # ends at 1
  n %in% subindex                             & # goes through n (end of vector)
  length(unique(position[subindex])) == k - 1 & # visits each index once (except 1)
  all(diff(subindex) <= value[subindex[-k]])
}
min_length = 0
for(len in index) {
  valid_paths = combn(index, len, FUN = is_valid_path)
  if (any(valid_paths)) {
    min_length = len
    break
  }
}
min_jumps = min_length - 1
cat(min_jumps)             # outputs to stout

2

পাইথন 271

এটি আমার সমাধান:

## To simplify the process we unfold the forward-backward sequence
def unfold(L): return L + L[:-1][::-1]

## Possible jumps from a given L[i] position
def AvailableJumps(L,i): return range(1,L[i]+1)

# To disable a used position, in the forward and backward sites
# (the first one is not really necessary)
def Use(L,i):
    L[i] = 0
    L[ len(L) - i - 1] = 0
    return L

def Jumps(L,i,n,S):
    if (i >= len(L)-1): 
        S.append(n)
    else:
        Laux = list(L)
        Use(Laux,i)
        for j in AvailableJumps(L,i):
            Jumps(Laux,i+j,n+1,S)

def MiniJump(L):
    S = []        
    Jumps(unfold(L),0,0,S)
    return min(S) if (S) else -1

উদাহরণ:

print MiniJump([2,4,2,2,3,4,2,2])
print MiniJump([0,2,4,2,2,3,4,2,2])

এবং এগুলি (আংশিকভাবে এখনই) গল্ফযুক্ত সংস্করণগুলি:

def J(L,i,n,S):
    if (i >= len(L)-1): S.append(n)
    else:
        La = list(L)
        La[len(La) - i - 1] = 0
        for j in range(1,L[i]+1):
            J(La,i+j,n+1,S)

def MJ(L):
     S = []        
     J(L + L[:-1][::-1],0,0,S)
     return min(S) if (S) else -1

কিছু উদাহরণ:

print MJ([2,4,2,2,3,4,2,2])
print MJ([0,2,4,2,2,3,4,2,2])
print MJ([3,4,0,0,6])

ভুল। ইনপুট [1] এ, আউটপুট 0 হওয়া উচিত (আপনার আউটপুট 1)। ইনপুট [3,0,0,1,4] এ, আউটপুট 3 হওয়া উচিত (আপনার আউটপুট -1)
কোডিং ম্যান

@ কোডিং ম্যান: ওফস, দুঃখিত। একটি এক্সট্রা জাম্প চেক ছিল। if (i> = len (L) -1): এস। অ্যাপেন্ড (এন) সমস্যার সমাধান করছে বলে মনে হচ্ছে
ট্রায়াদিক

তবুও ভুল আউটপুট দিচ্ছে। উদা: [২,০] ---> ১ (-১ হওয়া উচিত)।
22:53

@ কোডিং ম্যান: আমি মনে করি যে আমার সমাধানটি "এইভাবে, এটি পরিষ্কার হওয়া উচিত যে একজন সর্বদা সর্বশেষ অবস্থান থেকে ঝাঁপিয়ে পড়তে পারে।", যেহেতু আমি [২,০] ---> ১কে একটি বৈধ সমাধান হিসাবে বিবেচনা করি এটি শেষ প্রান্তে লাফ দেয়।
ট্রায়ডিক

1
আমি এই সমস্ত ভুলের জন্য ক্ষমা চাই। লাইন "সুতরাং, এটি পরিষ্কার হওয়া উচিত যে একজন সর্বদা সর্বশেষ অবস্থান থেকে লাফিয়ে উঠতে পারে।" বক্সচভডট্যশঞ. এটি কেবল এই বোঝাতে ব্যবহৃত হয়েছিল যে যখন আমরা ক্রমটিতে এগিয়ে যাই তখন শেষ অবস্থানটি কখনই ব্যবহৃত হত না used সুতরাং, আমরা পিছনে সরে গেলে এটি সর্বদা জাম্পিংয়ের জন্য ব্যবহৃত হতে পারে। তবে, [২,০] এর মধ্যে সর্বশেষ অবস্থানে মান 0 হয়, আপনি সর্বোচ্চ 0 টি পদক্ষেপে একটি লাফিয়ে তুলতে পারেন। অতএব, আপনি কখনই প্রারম্ভিক অবস্থানে পৌঁছাতে পারবেন না। প্রশ্ন আপডেট করা হয়েছে।
22:53

2

রুবি - 246

a=gets.split.map &:to_i
L=a.size;r=[];a.collect!{|v|([1,v].min..v).to_a};S=a[0].product *a[1..-1];S.each{|s|i=0;b=L==1&&s[i]!=0 ?0:1;(L*2).times{|c|r<<c if i==L-1&&b==0;break if !s[i]||s[i]==0;if i==L-1;b=i=0;s.reverse!end;i+=s[i]}}
puts r.min||-1

সিমুলেশন:

2, 4, 2, 2, 3, 4, 2, 2
6

0, 2, 4, 2, 2, 3, 4, 2, 2
-1

0
-1

1
0

2

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

এটি কীভাবে কাজ করে তা বুঝতে আপনাকে সহায়তা করার জন্য আমি এমন মন্তব্যগুলিকে অন্তর্ভুক্ত করেছি যাতে দেখানো হয় যে কোনও নির্দিষ্ট স্ট্রিং (u = "2 1 4 3 0 3 4 4 3 5 0 3") কীভাবে ম্যানিপুলেটেড হয়। আমি "স্ট্রিমের শিলাগুলির" সমন্বয়গুলি গণনা করি যা আশা করি hop এগুলি বাইনারি স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয়। আমি মন্তব্যে 0b0101101010 উদাহরণ দিয়েছি এবং এটি কীভাবে ব্যবহৃত হবে তা দেখায়। 1 এর প্রাথমিক ভ্রমণের জন্য উপলব্ধ শিলাগুলির অবস্থানের সাথে মিল; ফিরে আসার জন্য 0 এর। এই জাতীয় প্রতিটি বরাদ্দের জন্য, আমি প্রতিটি দিকের জন্য প্রয়োজনীয় নুন্যতম সংখ্যার নির্ধারণ করতে গতিশীল প্রোগ্রামিং ব্যবহার করি। আমি প্রথম দিকে কিছু সংমিশ্রণগুলি দূর করতে কয়েকটি সাধারণ অপ্টিমাইজেশনও সম্পাদন করি।

আমি অন্যান্য উত্তরে প্রদত্ত স্ট্রিংগুলি দিয়ে এটি চালিয়েছি এবং একই ফলাফল পেয়েছি। আমি প্রাপ্ত কিছু অন্যান্য ফলাফল এখানে:

"2 1 4 3 0 3 4 4 3 5 0 3"                             # =>  8
"3 4 3 5 6 4 7 4 3 1 5 6 4 3 1 4"                     # =>  7
"2 3 2 4 5 3 6 3 2 0 4 5 3 2 0 3"                     # => 10
"3 4 3 0 4 3 4 4 5 3 5 3 0 4 3 3 0 3"                 # => 11
"2 3 2 4 5 3 6 3 2 0 4 5 3 2 0 3 4 1 6 3 8 2 0 5 2 3" # => 14

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

"3 4 3 0 4 3 4 4 5 5 5 0 0 3 3 0 0 3 4 5 3 2 0 0 4 4 1 6 3 2 0 4 5 3 2 0 3 4 1 6 3 0 4 3 4 4 5 0 1"

কোডটি অনুসরণ করে।

I=99 # infinity - unlikely we'll attempt to solve problems with more than 48 rocks to step on

def leap!(u)
  p = u.split.map(&:to_i) # p = [2,1,4,3,0,3,4,4,3,5,0,3]
  s = p.shift        # s=2, p =   [1,4,3,0,3,4,4,3,5,0,3] # start
  f = p.pop          # f=3, p =   [1,4,3,0,3,4,4,3,5,0]   # finish
  q = p.reverse      #      q =   [0,5,3,4,4,3,0,3,4,1]   # reverse order
  # No path if cannot get to a non-zero rock from s or f
  return -1 if t(p,s) || t(q,f) 
  @n=p.size                  # 10 rocks in the stream
  r = 2**@n                  # 10000000000 - 11 binary digits 
  j = s > @n ? 0 : 2**(@n-s) #   100000000 for s = 2 (cannot leave start if combo number is smaller than j)
  k=r-1                      #  1111111111 - 10 binary digits

  b=I # best number of hops so far (s->f + f->s), initialized to infinity
  (j..k).each do |c|
    # Representative combo: 0b0101101010, convert to array
    c += r                     # 0b10 1 0 1 1 0 1 0 1 0
    c = c.to_s(2).split('').map(&:to_i)
                               # [1,0,1,0,1,1,0,1,0,1,0]
    c.shift                    #   [0,1,0,1,1,0,1,0,1,0] s->f: rock offsets available: 1,3,4,6,8
    d = c.map {|e|1-e}.reverse #   [1,0,1,0,1,0,0,1,0,1] f->s: rock offsets available: 0,2,5,7,9
    c = z(c,p)                 #   [0,4,0,0,3,0,4,0,5,0] s->f: max hops by offset for combo c
    d = z(d,q)                 #   [0,0,3,0,4,0,0,3,0,1] f->s: max hops by offset for combo c
    # Skip combo if cannot get from to a rock from f, or can't
    # get to the end (can always get to a rock from s if s > 0).
    next if [s,f,l(c),l(d)].max < @n && t(d,f)
    # Compute sum of smallest number of hops from s to f and back to s,
    # for combo c, and save it if it is the best solution so far.
    b = [b, m([s]+c) + m([f]+d)].min
  end
  b < I ? b : -1 # return result
end

# t(w,n) returns true if can conclude cannot get from sourch n to destination  
def t(w,n) n==0 || (w[0,n].max==0 && n < @n) end
def l(w) w.map.with_index {|e,i|i+e}.max end
def z(c,p) c.zip(p).map {|x,y| x*y} end

def m(p)
  # for s->f: p = [2,0,4,0,0,3,0,4,0,5,0] - can be on rock offsets 2,5,7,9
  # for f->s: p = [3,0,0,3,0,4,0,0,3,0,1] - can be on rock offsets 3,5,8,10
  a=[{d: 0,i: @n+1}]
  (0..@n).each do |j|
    i=@n-j
    v=p[i] 
    if v > 0
      b=[I]
      a.each{|h| i+v < h[:i] ? break : b << (1 + h[:d])}
      m = b.min
      a.unshift({d: m,i: i}) if m < I
    end
  end
  h = a.shift
  return h[:i]>0 ? I : h[:d]
end

0

Haskell,, 173 166 বাইট, 159 GHCi বাইট

এখানে সাধারণ সংস্করণটি রয়েছে:

আমদানি ডেটা.লিস্ট

t=length
j[_]=0
j l=y[t f|f<-fst.span(>0)<$>permutations[0..t l-1],u<-f,u==t l-1,all(\(a,b)->abs(b-a)<=l!!a)$zip(0:f)$f++[0]]
y[]=0-1
y l=minimum l+1

এখানে জিএইচসিআই উত্তর (একবারে লাইনটি রেখে দিন):

t=length
y[]=0-1;y l=minimum l+1
j[_]=0;j l=y[t f|f<-fst.span(>0)<$>Data.List.permutations[0..t l-1],u<-f,u==t l-1,all(\(a,b)->abs(b-a)<=l!!a)$zip(0:f)$f++[0]]

শুধু একটি ব্রুটফোর্স। সম্ভাব্য উত্তর তৈরি করুন। (অর্থাত্ শূন্য এবং নিম্নলিখিত উপাদানগুলির সাথে [0..n-1] এর ক্রমান্বন বাদ পড়েছে Then তারপরে উত্তরটি সঠিক কিনা তা পরীক্ষা করুন minimum ন্যূনতম দৈর্ঘ্য পান এবং একটি করে যোগ করুন Since

কীভাবে ব্যবহার করবেন: j[3,4,0,0,6]->3


Data.List.permutationsজিএইচসি তে কাজ করে না, তবে কেবল জিএইচসিতেই কাজ করে। হাস্কেল- তে আমাদের গল্ফিং বিধিমালিকাগুলি অনুসারে আপনার হয় আমদানি যুক্ত করা উচিত বা আপনার উত্তরটিকে "হাস্কেল জিএইচসিআই" হিসাবে চিহ্নিত করা উচিত। প্রথম বিকল্পটি সাধারণত এই সাইটে হাস্কেল গল্ফারদের দ্বারা পছন্দ হয়।
লাইকনি

পরিবর্তে a<-permutations[0..t l-1],let f=takeWhile(/=0)a, আপনি লিখতে পারেন f<-map(takeWhile(/=0))(permutations[0..t l-1]), যা আবার গল্ফ করা যেতে পারে f<-fst.span(>0)<$>permutations[0..t l-1]। এটি দিয়ে আপনি আমদানি যোগ করেও 166 বাইটে ফিরে এসেছেন: অনলাইনে চেষ্টা করে দেখুন!
লাইকোনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.