ছুটগুলি ট্রিগার করুন এবং জ্যাকপটটিকে সুরক্ষা দিন


23

আপনি একটি গেমশোতে অংশ নিতে যাচ্ছেন। চ্যালেঞ্জগুলির একটি নিম্নরূপ কাজ করে:

  • প্রথম ঘরে একটি বিশাল সংখ্যক অভিন্ন বল রয়েছে।
  • দ্বিতীয় ঘরে একটি ধারাবাহিক চিটস রয়েছে, যার প্রত্যেকটিতে একটি সেন্সর রয়েছে যা এটিতে কতগুলি বল রাখা হয়েছে তা গণনা করে। একটি বল যা কুঁচকে রাখা হয় তা পুনরুদ্ধার করা যায় না।
  • এটিতে একটি নির্দিষ্ট সংখ্যক বল (এটির ট্রিগার কাউন্ট ) স্থাপনের পরে প্রতিটি কুঁচকটি ট্রিগার করবে। এটি যখন ট্রিগার করে এটি আলোকসজ্জা করে, একটি শব্দ করে এবং আপনাকে সন্দেহ প্রকাশ করে দেয় যে এটি ট্রিগার করেছে।
  • Nপরবর্তী চ্যালেঞ্জ অব্যাহত রাখতে আপনাকে অবশ্যই চুটগুলি ট্রিগার করতে হবে।
  • আপনি ট্রিগার গণনা জানেন, কিন্তু গণনা এবং পাট মধ্যে চিঠিপত্র নয়।
  • প্রথম ঘর থেকে দ্বিতীয় দিকে বল নেওয়ার আপনার একটি সুযোগ রয়েছে। একবার আপনি একটি বলকে কুঁচকে রাখলে আপনি আর বেশি বলের জন্য ফিরে যেতে পারবেন না।
  • প্রতিটি বল যা আপনি জ্যাকপট থেকে অর্থ কেটে নেন।

স্পষ্টতই আপনি নিশ্চিত করতে চান যে আপনি চ্যালেঞ্জটি পেরিয়ে যাবেন তবে আপনি জ্যাকপটের অর্থের ক্ষতি হ্রাস করতে চান। আপনার কতটি বল প্রয়োজন তা জানাতে একটি প্রোগ্রাম, ফাংশন, ক্রিয়া ইত্যাদি লিখুন।

উদাহরণ

ধরুন ট্রিগার গণনাগুলি 2, 4 এবং 10 হয় এবং আপনাকে পাস করতে 2 টি ট্রিট দরকার trigger 10 টি বল পাস করার কৌশল রয়েছে: প্রথম কুঁচকে 4 বল অবধি দ্বিতীয় চুটে 4 টি পর্যন্ত এবং তৃতীয় ঘাটে 4 বল অবধি। যেহেতু তিনটি চুটের একটি মাত্র 2 বলের পরে ট্রিগার করবে, আপনি কেবলমাত্র 10 টি ব্যবহার করেন There এমন কোনও কৌশল নেই যা 10 টিরও কমের সাথে কাজ করার গ্যারান্টিযুক্ত, তাই সঠিক ফলাফল output

ইনপুট

ইনপুটটিতে পূর্ণসংখ্যার ট্রিগার গণনাগুলির একটি অ্যারে এবং একটি সংখ্যাসূচক থাকে যা ট্রিগারটিতে চুটের সংখ্যা দেয়। আপনি দুটি ক্রম দুটি ইনপুট নিতে পারেন, এবং প্রয়োজন হলে আপনি অ্যারের দৈর্ঘ্য সহ তৃতীয় ইনপুট নিতে পারেন।

আপনি ধরে নিতে পারেন যে সমস্ত ইনপুট শূন্যের চেয়ে বড়, এবং যে চুটের সংখ্যাটি ট্রিগার করতে হবে তা চুটসের সংখ্যার বেশি নয়।

আপনি ধরে নিতে পারেন যে গণনাগুলি বাছাই করা হয়েছে (আরোহণ বা উতরাই), যতক্ষণ আপনি নিজের উত্তরে এটি পরিষ্কারভাবে বর্ণনা করেন।

আউটপুট

আউটপুটটি একক পূর্ণসংখ্যার হওয়া উচিত, সর্বোত্তম কৌশল দ্বারা প্রয়োজনীয় বলগুলির সংখ্যা প্রদান করা উচিত।

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

বিন্যাস: N counts solution

1 [2 4 10] 6
2 [2 4 10] 10
3 [2 4 10] 16
1 [3 5 5 5 5 5 5 5 5 5] 5
2 [1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 8 11] 8
2 [1 2 6 6 6 6 6 6 6 10] 16
2 [1 2 3 3 4 4 6 6 6 11] 17
3 [1 2 3 4 5 5 6] 16
3 [2 4 7 7 7 7 7 7 7] 21
5 [1 2 2 3 3 3 3 3 5 9 9 11] 27
2 [5 15 15] 25
1 [4 5 15] 10
3 [1 4 4 4] 10
2 [1 3 4] 6
2 [1 3 3 8] 8

সতর্কতা: নিনজা চেষ্টা করবেন না!
এরিক আউটগল্ফার

1
আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন শেষ পরীক্ষার কেসটি 10 ​​দেয়? কমপক্ষে একটি ট্রিগার নিশ্চিত করার জন্য প্রতিটি জায়গায় কমপক্ষে 4 জনকে এক জায়গায় স্থান দেওয়া উচিত নয়? আমি সম্ভবত খুব বোবা এবং প্রশ্নটি ভালভাবে পড়িনি, তবে আমি তা পাই না।
মিঃ এক্সকোডার 19

2
@ রড একজনকে ট্রিগার দেওয়ার নিশ্চয়তা দেওয়ার আগে আপনার কেবল দুটিতে 5 টি রাখার দরকার ছিল, 5 * 2 = 10
এইচ.পি.উইজ

3
@ এইচ.পি.উইজ ধন্যবাদ, এখন এটি পেয়েছি। চ্যালেঞ্জটি এখন আরও জটিল বলে মনে হচ্ছে ....
মিঃ এক্সকোডার

1
@ মিঃ এক্সকোডার, হ্যাঁ, তবে আপনাকে সবচেয়ে খারাপ ক্ষেত্রে সফল হওয়ার বিষয়ে নিশ্চিত হতে হবে।
পিটার টেলর

উত্তর:


4

পাইথন, 222 198 বাইট

def S(G,P,T=0):
 T=T or[0]*len(P);r=[0]*(sum(t>=p for t,p in zip(T,P))>=G)
 for i,t in enumerate(T):
    if t<max(P):a=next(p for p in P if p>t)-t;T[i]+=a;r+=[a+S(G,P,sorted(T))];T[i]-=a
 return min(r)

ব্যবহার হয় S(2, (2, 4, 10))

এই প্রোগ্রামটি যে কোনও শালীন গতিতে পরীক্ষা করতে, ফাংশন সংজ্ঞা অনুসারে এটি রেখে স্মৃতি যুক্ত করুন:

old_s = S
mem = {}
def S(G, P, T=0):
    k = (G, tuple(P), T and tuple(T) or 0)
    if k in mem: return mem[k]
    r = old_s(G, P, T)
    mem[k] = r
    return r

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

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

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


215 বাইট অপসারণ করে continue
মিঃ এক্সকোডার 21


4

হাস্কেল, 124 117 100 98 91 80 78 বাইট

@ পিটার টেলরকে 11 বাইট সংরক্ষণ করা হয়েছে

0#_=0
n#a=minimum$zipWith(\x y->x*y+(n-1)#(snd.splitAt y$a))a[1..length a-n+1]

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

(#) আর্গুমেন্ট হিসাবে একটি পূর্ণসংখ্যা এবং অবতরণ ক্রমে পূর্ণসংখ্যার একটি তালিকা নেয়

ব্যবহার হয় 1#[10,4,2]

Explaination:

তালিকার প্রতিটি মানের জন্য, এক্স, আই (1-আইডেক্সেক্স), সেই উপাদানটি (বা x এর চেয়ে কম বা সমান কিছু উপাদানের) অপসারণের সেরা কৌশলটি হ'ল চিটে x বল pourালা।

প্রতিটি উপাদানের জন্য, এক্স, তালিকায় আমি অবস্থানে, (n #) পজিশনের বাইরে তালিকার x * i + ((n-1) #) গণনা i (এন 0 না হওয়া অবধি)। তারপরে এটি চেক করা সমস্ত সম্ভাবনার সর্বনিম্ন লাগে।


3

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

(%)0
(p%l)n|h:t<-l=p+min(p%t$n)(h%t$n-1)|n<1=p|1>0=1/0

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

আরোহী ক্রমে তালিকা নেয়।


স্বরে নোট করুন: পরের বার জোর দিয়ে বলুন যে আউটপুটটি একটি পূর্ণসংখ্যা টাইপ হওয়া উচিত।
পিটার টেলর

1
এটিকে বের করার জন্য আমি যথেষ্ট পরিমাণে হাস্কেলকে জানিনা, আপনি কি কোনও ব্যাখ্যা যোগ করতে পারেন?
orlp

2

পাইথন, 73 বাইট

f=lambda n,c:n and min(c[i]*-~i+f(n-1,c[-~i:])for i in range(len(c)-n+1))

এইচপিউইজের হাস্কেল উত্তরটির বন্দর। ইনপুটটি ক্রমবর্ধমান ক্রমে হওয়া দরকার।


1

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

{:A,,e!f<{$__(;A,+.-\Af=.*1bz}%:e<}

অনলাইন ডেমো

আরোহণ ক্রম অনুসারে বাছাই করা হয়েছে N countsএমনটি ধরে নিয়ে ইনপুট নেয় counts

ব্যবচ্ছেদ

1-ইনডেক্সেড অ্যারে হিসাবে অবতরণ ক্রমে গণনাগুলি চিহ্নিত করুন C(সুতরাং এর দ্বিতীয় উপাদানটি Cদ্বিতীয় বৃহত্তম গণনা)। মনে করুন যে আমরা চুটগুলি ট্রিগার করে বিজয়ী হয়েছি C[a_0], C[a_1], ... C[a_{N-1}]। তারপর সবচেয়ে খারাপ ক্ষেত্রে, প্রত্যেকের জন্য C[a_i]আমরা অন্তত করা আছে C[a_i]বল chutes প্রতিটি মধ্যে 1থেকে a_i। সুতরাং আমরা করা C[a_{N-1}]মধ্যে বাজে কথা a_{N-1}chutes অতিরিক্ত C[a_{N-2}]মধ্যে বাজে কথা a_{N-2}তাদের ...

Nগণনার প্রতিটি উপসেটের উপরে , যা আমাদের সবচেয়ে ছোট যোগফল দেয়? তারপরে আমাদের লক্ষ্য করা উচিত that গণনার সেই উপসেটটি দিয়ে জিততে।

এনবি কোডটি আরোহী ক্রমে গণনাগুলি আসলে ব্যবহার করে তবে আমি মনে করি অবতরণ ক্রমটি আরও স্বজ্ঞাত।

{         e# Define a block
  :A      e#   Store the sorted counts as A
  ,,e!f<  e#   Get all N-element subsets of A's indices
  {       e#   Map over these subsets S:
    $__   e#     Sort the subset and get a couple of copies
    (;A,+ e#     Remove the first element from one copy and append len(A)
    .-    e#     Pointwise subtraction, giving [S[0]-S[1] S[1]-S[2] ...]
    \Af=  e#     Get the counts [A[S[0]] A[S[1]] ...]
    .*    e#     Pointwise multiplication
    1bz   e#     Sum and take absolute value, giving the worst case score
  }%
  :e<     e#   Select the minimum worst case score
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.