মেলা রাজার জন্য আটটি মুদ্রা


22

এটি অন্য ধাঁধাটির একটি "প্রতিপক্ষ", পাজলিং.এসই-তে ফেয়ার রাজার জন্য আটটি মুদ্রা

আপনি পটভূমির জন্য উপরের ধাঁধাটি পড়তে পারেন। এই ধাঁধা সম্পর্কে বিশদগুলি নীচে রয়েছে।

বিভিন্ন মানের 8 টি ধরণের কয়েনের একটি সেট তৈরি করা হয়েছে, রাজা আপনাকে সর্বোচ্চ এন এর সন্ধান করতে চান যে 0 থেকে N পর্যন্ত যে কোনও সংখ্যক দাম 8 টি মুদ্রা ছাড়াই এবং কোনও চার্জ ছাড়াই প্রদান করা যেতে পারে।

উদাহরণস্বরূপ, (গ্লোরফিন্ডেলের উত্তর থেকে নেওয়া)। যদি 1, 2, 5, 13, 34, 89, 233, 610 মানের মুদ্রার সেট দেওয়া হয়, আপনার প্রোগ্রামটি 1596 আউটপুট করা উচিত, কারণ 0 এবং 1596 (অন্তর্ভুক্ত) এর মধ্যে প্রতিটি সংখ্যা আর যোগফলের দ্বারা প্রতিনিধিত্ব করতে পারে প্রদত্ত তালিকা থেকে 8 টিরও বেশি সংখ্যার (সংখ্যাগুলি পুনরাবৃত্তি করতে পারে), যখন 1597 উপায়ে উপস্থাপন করা যাবে না।

একটি গাণিতিক ভাবে, যদি ইনপুট একটি সেট 8 ধনাত্মক পূর্ণসংখ্যা গঠিত S হয়, আকাঙ্ক্ষিত আউটপুট এন সন্তুষ্ট কোন সংখ্যা যে এন 0 এবং N মধ্যে, আছে X1, x2, X3, ..., X8 যেমন যে বিদ্যমান

এক্স1+ +এক্স2+ ++ +এক্স8=এনএবংএক্স1,এক্স2,,এক্স8{0}এস

আপনার লক্ষ্যটি হ'ল একটি প্রোগ্রাম, একটি ফাংশন বা স্নিপেট লিখুন যা ইনপুট হিসাবে 8 নম্বর নেয় এবং উপরে বর্ণিত সর্বাধিক এন আউটপুট দেয়।

নিয়মাবলী:

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

পরীক্ষার কেসগুলি (বেশিরভাগ উত্তরটি পাজলিংয়ের সাথে সংযুক্ত প্রশ্নের অধীনে নেওয়া হয়েছে):

[1, 2, 3, 4, 5, 6, 7, 8] => 64
[2, 3, 4, 5, 6, 7, 8, 9] => 0
[1, 3, 4, 5, 6, 7, 8, 9] => 72
[1, 2, 5, 13, 34, 89, 233, 610] => 1596
[1, 5, 16, 51, 130, 332, 471, 1082] => 2721
[1, 6, 20, 75, 175, 474, 756, 785] => 3356

এটি একটি , তাই প্রতিটি ভাষার সংক্ষিপ্ততম প্রোগ্রাম বা স্নিপেট জিতে!


1
চমৎকার ধাঁধা, তবে আমি ব্যক্তিগতভাবে মনে করি যে আমাদের জমাগুলি পরীক্ষার জন্য আরও কিছু পরীক্ষার কেস সহায়ক হবে।
মিঃ এক্সকোডার

ইনপুট আকারকে একটি প্যারামিটার তৈরি করা ভাল না? নিষ্ঠুর বলের পদ্ধতির সাথে লড়াই হবে 8
লুইস মেন্ডো

1
@iBug এর পরে নিয়মটি হ'ল "আধুনিক কম্পিউটারে এক মিনিটের মধ্যে দাখিলের শব্দটি চালানো" like এটি অস্পষ্ট, তবে সাধারণত যথেষ্ট ভাল, কারণ নিষ্ঠুর বল এবং দক্ষ পদ্ধতির মধ্যে পার্থক্য খুব বড়
লুই মেন্ডো

1
"সময় কয়েক মিনিটের" আপনার সময়সীমা দিয়ে ব্রুট ফোর্স এখনও সম্ভব। আমার উত্তরের একটি সামান্য পরিবর্তিত সংস্করণটি আমার 7 বছরের পুরানো ল্যাপটপের 1m20 সালে সর্বশেষ পরীক্ষার কেস চালায়।
নিমি

1
@ আরনাউল্ড স্পষ্ট হয়েছে
iBug

উত্তর:


14

পাইথন 3 , 113 62 বাইট

for i in[1]*3:x|={a+b for a in x for b in x}
while{i+1}&x:i+=1

এখানে xইনটসের সেট হিসাবে ইনপুট রয়েছে এবং iএটি আউটপুট।

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

(ধন্যবাদ: এরিক দ্য আউটগল্ফার, মি। এক্সকোডার, লিন)



x=0,*x1 বাইট সাশ্রয় করে। আরও ভাল, x+=0,2 সংরক্ষণ করে
মিঃ এক্সকোডার

পাইথন 2 এ 78 বাইট
লিন

9

জেলি , 12 বাইট

œċⱮ8Ẏ§ṢQJƑƤS

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

আমার ফোনে টিআইও-তে সমস্ত পরীক্ষার কেস চালাতে গড়ে ~ 3.7 সেকেন্ড সময় লাগে, তাই আশ্চর্যরকম এটি খুব দ্রুত।

ব্যাখ্যা

œċⱮ8Ẏ§ṢQJƑƤS     Monadic link / Full program.
  Ɱ8             Promote 8 to [1 ... 8] and for each value k:
œċ                    Generate all combinations of k elements from the list.
    Ẏ§           Tighten, then sum. Flatten to a 2D list then sum each.
      ṢQ         Sort the result and remove equal entries.
        JƑƤ      For each prefix of this list, return 1 if it is equal to its length range, 0 otherwise.
           S     Finally, sum the result (counts the 1's which is equivalent to what is being asked).

7

হাস্কেল, 56 50 বাইট

g c=[x|x<-[1..],all((/=x).sum)$mapM(0:)$c<$c]!!0-1

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

একটি নিষ্ঠুর শক্তি পদ্ধতির। যোগ 0কয়েন তালিকায় এবং 8 অকার্যকর সব সমন্বয় চেষ্টা করুন। প্রথম সংখ্যাটি nযে কোনও বাছাইয়ের যোগফলের সমান নয় এবং এটি সন্ধান করুন n-1

[1, 2, 5, 13, 34, 89, 233, 610]আমার 7 বছরের পুরানো ল্যাপটপ হার্ডওয়্যারের জন্য প্রায় 5m30s নেয় ।

সম্পাদনা করুন:-by বাইটস @ অর্জান জোহানসেনকে ধন্যবাদ

একটি আরও ছোট সংস্করণ (-২ বাইট, আবার @ অর্জান জোহানসেনকে ধন্যবাদ) is

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

g c=[x|x<-[1..],all((/=x).sum)$mapM(:0:c)c]!!0-1

তবে এটি উল্লেখযোগ্যভাবে আরও মেমরি ব্যবহার করে এবং আমার মেশিনে ভারী পেজিংয়ে চলে এবং "কয়েক মিনিটের মধ্যে" শেষ হয় না।


1
আপনি ব্যবহার করতে পারেন mapM(0:)$c<$c। (প্রকৃতপক্ষে mapM(:0:c)cকাজ করা উচিত, তবে প্রদত্ত পরীক্ষার ক্ষেত্রে টিআইওর সাথে সময় বের করা উচিত))
janরঞ্জন জোহানসেন

4

জেলি , 9 বাইট

Żœċ8§ḟ’$Ṃ

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

কিভাবে এটা কাজ করে

Żœċ8§ḟ’$Ṃ  Main link. Argument: A (array)

Ż          Prepend a 0 to A.
 œċ8       Take all combinations of length 8, with repetitions.
    §      Take the sum of each combination.
       $   Combine the two links to the left into a monadic chain.
      ’      Decrement all sums.
     ḟ       Filterfalse; keep only sums that do not appear in the decremented sums.
        Ṃ  Take the minimum.

2
Żṗ8§ḟ’$Ṃএকটি বাইট সংরক্ষণ করে, তবে আমি 8.5 মিনিটের কয়েকটি হিসাবে গণনা করি তা নিশ্চিত নই ।
ডেনিস


4

জাভাস্ক্রিপ্ট (ES6),  100 88 80  76 বাইট

এটি মূলত একটি নিষ্ঠুর শক্তি অনুসন্ধান, তবে এটির গতি বাড়ানোর জন্য ছাঁটাইয়ের সাথে উন্নত করা হয়। টিআইও-তে পরীক্ষার ক্ষেত্রে কার্যকর মৃত্যুর সময় 1 সেকেন্ডের কাছাকাছি।

ধরে নেওয়া যায় যে ইনপুট অ্যারেটি সর্বোচ্চ থেকে নীচে থেকে বাছাই করা হয়।

a=>[...Array(a[0]*9)].findIndex(g=(i=8,s)=>s*i>0?a.every(x=>g(i-1,s-x)):s)-1

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

মন্তব্য

a =>                      // a[] = input array
  [...Array(a[0] * 9)]    // create an array of 9 * max(a) entries
  .findIndex(             // find the position of the first truthy result
    g = (i = 8, s) =>     // g = recursive function taking a counter i, initialized to 8
                          //     and a sum s, initialized to the position in the above array
      s * i > 0 ?         //   if s is positive and i is not equal to 0:
        a.every(x =>      //     for each value x in a[]:
          g(i - 1, s - x) //       do a recursive call with i - 1 and s - x
        )                 //     end of every()
      :                   //   else:
        s                 //     yield s (s = 0 means success and makes findIndex go on)
  ) - 1                   // end of findIndex(); decrement the result


3

পরী / জিপি , 57 বাইট

a->n=-1;while(polcoeff((1+sum(i=1,8,x^a[i]))^8,n++),);n-1

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


এটি কি জেনারেটিং ফাংশন ব্যবহার করছে?
উজ্জ্বল করুন

1
@ ডনব্রাইট হ্যাঁ
আলেফাল্ফ

1
এটি দুর্দান্ত .. কয়েকটি উত্তর সমাধানের জন্য জোর করে চাপিয়ে দেবে না answers প্রচুর ভাষাগুলি সম্ভবত বহুপদী প্রতীকী বৈশিষ্ট্যগুলিতে নির্মিত না। পরী জিপি শীতল।
উজ্জ্বল ডন

2

পাইথন 2 , 125 115 111 বাইট

lambda c:sum(i==j for i,j in enumerate(sorted(set(map(sum,product([0]+c,repeat=8))))))-1
from itertools import*

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

ইনপুট হিসাবে পূর্ণসংখ্যার একটি তালিকা আশা করে।

ব্যাখ্যা:

# an anonymous function
lambda c:
                                                          # get all length-8 combinations of values, from (0,0,0,0,0,0,0,0) to (8,8,8,8,8,8,8,8)
                                                          # zero is added to ensure that combinations of fewer than 8 coins are represented Ex:(1,0,0,0,0,0,0,0)
                                                          product([0]+c,repeat=8)
                                                  # for each combination, sum the values
                                                  map(sum,.......................)
                                       # get unique values, then sort them smallest to largest
                                       sorted(set(................................))
             # for each index, value pair, return if the index is equal to the value
             i==j for i,j in enumerate(.............................................)
         # in Python arithmetic, False is 0 and True is 1. So, count how many items match their index.
         # Since zero was added to the list, there will always be one extra match (0==0). So offset by one.
         sum(........................................................................)-1
from itertools import*

2

পার্ল 6, 65 63 41 বাইট ( 39) 37 টি)

{@_=(0,|@_)X+(0,|@_)for ^3;($_ if $_==$++for @_.sort.unique)-1}

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

এটি একটি বেনামে ব্লক যা এটির হিসাবে ডেটা পাস করে passed (0,|@_)একটি দ্রুত উপায় একটি যোগ হয় 0থেকে@_ , এবং এমনকি যদিও এটা দুইবার সম্পন্ন, এটা এখনও একটি বিট খাটো চেয়ে এর @_.push: 0;যা পরে পরে স্পেস হবে _। এটি একটি নিষ্ঠুর শক্তি পদ্ধতির যা এটি 8 টি সংমিশ্রণে কিছুটা চিজ করে। ক্রস যোগ করার পরে, অনুক্রমিক মানগুলির জন্য একটি বেনামে তালিকা তৈরি করা হয়। গণিত অপারেটরগুলির সাথে তালিকাগুলি তাদের দৈর্ঘ্যের মূল্যায়ন করে, তাই -1 ডাবল শুল্ক টানছে: 0 এর জন্য অ্যাকাউন্টিং এবং ইনটকে জোর করে।

এটি এর মিষ্টি সময় নিতে (0,|@_)পারে (0,|@_.unique)তবে প্রথমটির আগে একটি বা উভয়কে পরিবর্তন করে forএটি যথেষ্ট পরিমাণে বাড়ানো যায়। এটি +7 (রানটাইম <60s) যোগ করে বা +14 স্কোর করার জন্য (রানটাইম <10) যদি আপনি মনে করেন প্রথম অত্যন্ত ধীর (আমি 60 সেকেন্ড পর এড়ানোর সময় সমাপ্ত লিঙ্ক কোড করল) হয়।

সম্পাদনা করুন: মন্তব্যগুলিতে জোকিং এটির উন্নতি করেছে (একই ধারণা, ক্রস অ্যাড, তারপরে শেষ টানা শেষ ফলাফলটি ফেরত দিন) অবাক করা 39 টি চর (41 বাইট):

{(@_=@_ X+0,|@_)xx 3;first *+1@_,^∞}

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

চূড়ান্ত সারণীতে 0 প্রয়োজন হয় না, কেবল একবারে 0 যুক্ত করার প্রয়োজনে কয়েকটি বাইট সংরক্ষণ করে। xx 3লুপ জন্য নকল (এখনও কয়েন 2 একটি ক্ষমতা হচ্ছে চিজ)। firstসাব ফেরৎ অসীম তালিকায় প্রথম সংখ্যা 0..*( ^Infখুব সম্ভব, কিন্তু স্থান সঞ্চয় করে না) যার +1ক্রস যোগ তালিকার একজন সদস্য নয়। আমার মতো এটিও ধীর গতির, সুতরাং যদি আপনি গাইডলাইনগুলির জন্য খুব ধীর বোধ করেন তবে প্রথম সমান হওয়ার পরে একটি হিসাবে +7 যুক্ত করুন unique


1
48 বাইট । প্রযুক্তিগতভাবে, uniqueএটির প্রয়োজন নেই, তবে এটির গতি অনেক বেড়ে যায়
জো কিং

@ জোকিং দুর্দান্ত, আমি কেন জানি না কেন আমি ব্যবহার সম্পর্কে ভেবে দেখিনি xx। আমি জানতাম সেট ফাংশনগুলি ব্যবহার করে চূড়ান্ত ট্যাবুলেশনটি আরও ছোট উপায়ে করার একটি উপায় থাকতে হবে তবে আমার মস্তিষ্ক কাজ করছে না।
user0721090601

হওয়া xx 1উচিতxx 3
জো কিং

@ জোকিং স্থির এছাড়াও আমি বুঝতে পারি যে দুটি চর (তবে কোনও বাইট নেই) ব্যবহার করে সংরক্ষণ করা যায়^∞
user0721090601

প্রকৃতপক্ষে, আপনি (1...*∉@_)-1ব্যবহারের পরিবর্তে কিছু বাইট সংরক্ষণ করতে পারেন first(যা আমি বুঝতে পারি যে আমি এখানে ব্যবহার করেছি একই পদ্ধতি )
জো কিং

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 171 145 115 বাইট

f=(s,n=3)=>n?f(s=new Set(a=[0,...s]),n-1,a.map(m=>a.map(n=>s.add(m+n)))):Math.min(...[...s].filter(m=>!s.has(m+1)))

এটি অনলাইন চেষ্টা করুন! @ মার্ক এর পাইথন 3 উত্তর এর পোর্ট। ফায়ারফক্স 30-57 এ 108 বাইট:

f=(s,n=3)=>n?f(new Set((for(n of s=[0,...s])for(m of s)n+m)),n-1):Math.min(...[...s].filter(m=>!s.has(m+1)))

1

ওল্ফ্রাম ভাষা (গণিত) , 46 বাইট

0//.x_/;Min[Tr/@FrobeniusSolve[#,x+1]]<9:>x+1&

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

ব্রুট ফোর্স পদ্ধতির: 8 টি মুদ্রায় যে মূল্য দেওয়া যায় না এমন মান পৌঁছে না হওয়া অবধি পূর্ণসংখ্যার গণনা পরীক্ষা করে। খুব, খুব ধীর (টিও টাইম আউট), তবে আমি মোটামুটি নিশ্চিত যে শর্তটি সঠিক।


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