একটি লক্ষ্য যোগফল করতে ওজন একটি বিদ্যমান সেট থেকে চয়ন করুন


9

ভারোত্তোলন করার সময়, আমি একটি বারে বেশ কয়েকটি প্লেট সংযুক্ত করে একটি নির্দিষ্ট ওজন তৈরি করতে চাই।

আমার কাছে নিম্নলিখিত প্লেট রয়েছে:

  • প্রতি 1 কেজি 6 টি প্লেট
  • ২.৫ কেজি প্রতি 6 প্লেট
  • প্রতিটি 5 কেজি 6 প্লেট
  • 10 কেজি প্রতিটি 6 প্লেট

বারটি নিজেই 10 কেজি ওজন করে।

এটি কেবল জোড়াগুলিতে প্লেটগুলি সংযুক্ত করার অনুমতি দেওয়া হয়েছে - এগুলি বারের প্রতিটি প্রান্তে সংযুক্ত থাকে এবং দুটি প্রান্তে বিন্যাসটি সম্পূর্ণ প্রতিসাম্যযুক্ত হতে হবে (যেমন এক প্রান্তে দুটি 5 কেজি প্লেট সংযুক্ত করা এবং 10 কেজি প্লেট অন্য প্রান্তটি সুরক্ষার কারণে নিষিদ্ধ)।

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

যদি বেশ কয়েকটি সমাধান থাকে তবে কোডটি অবশ্যই একটি মাত্র আউটপুট পাবে (ব্যবহারকারীকে বেছে নেবেন না - তিনি অন্যান্য জিনিস নিয়ে খুব ব্যস্ত)।

পরীক্ষার কেস:

12 -> [2 0 0 0] - 2 plates of 1 kg plus the bar of 10 kg
13 -> [0 0 0 0] - a special-case output that means "impossible"
20 -> [0 0 2 0] - 2 plates of 5 kg + bar
20 -> [0 4 0 0] - a different acceptable solution for the above
21 -> [6 2 0 0] - 6 plates of 1 kg + 2 plates of 2.5 kg + bar
28 -> [0 0 0 0] - impossible
45 -> [0 2 6 0] - a solution for a random number in range
112 -> [2 4 6 6] - a solution for a random number in range
121 -> [6 6 6 6] - maximal weight for which a solution is possible

যদি আপনার কোড বিপরীত ক্রমে সংখ্যাগুলি আউটপুট করে দেয় (ভারী প্লেট থেকে হালকা একের দিকে) তবে বিভ্রান্তি এড়াতে দয়া করে এটিকে স্পষ্টভাবে উল্লেখ করুন।


1
এটি ন্যূনতম মুদ্রা গণনা প্রশ্নটির দ্বিধা নয় ? এক ধরণের প্লেটের 6 টি সীমাবদ্ধতা ব্যতীত একই লোভী অ্যালগরিদম ব্যর্থ বলে আমি মনে করি না। আমি মনে করি এটি যথেষ্ট পার্থক্য নাও হতে পারে তবে আমি নিশ্চিত নই।
FryAmTheEggman

1
লোভী অ্যালগরিদম কাজ করে না (সংশোধন ছাড়াই নয়, কমপক্ষে) ঠিক কারণ সংখ্যাটি সীমাবদ্ধ
anatolyg


হ্যাঁ, আমি পোস্ট করার কারণটি ছিল যে এই পরিবর্তনটি যথেষ্ট পরিমাণে যথেষ্ট তাৎক্ষণিকভাবে আমি নিশ্চিত ছিল না। আমি সম্প্রদায়ে মতামত পাওয়ার চেষ্টা করার জন্য পোস্ট করেছি এবং সম্প্রদায়টি আমার সাথে একমত না বলে মনে হয় আমি আমার মন্তব্য সরিয়ে ফেলব।
FryAmTheEggman

আমরা কি কেবলমাত্র একের পরিবর্তে সমস্ত সমাধান আউটপুট করতে পারি?
লুইস মেন্ডো

উত্তর:


5

জেলি , 22 বাইট

4ṗạµ×2,5,10,20S€+⁵iƓịḤ

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

4ṗạµ×2,5,10,20S€+⁵iƓịḤ  Main link. No arguments

4                       Set the left argument and initial return value to 4.
 ṗ                      Take the Cartesian power of [1, 2, 3, 4] and 4, i.e.,
                        generate all 4-tuples of integers between 1 and 4.
  ạ                     Take the absolute difference of all integers in the
                        4-tuples and the integer 4. This maps [1, 2, 3, 4] to
                        [3, 2, 1, 0] and places [0, 0, 0, 0] at index 0.
   µ                    Begin a new, monadic chain. Argument: A (list of 4-tuples)
     2,5,10,20          Yield [2, 5, 10, 20].
    ×                   Perform vectorized multiplication with each 4-tuple in A.
              S€        Sum each resulting 4-tuple.
                +⁵      Add 10 to each sum.
                   Ɠ    Read an integer from STDIN.
                  i     Find its first index in the array of sums (0 if not found).
                     Ḥ  Unhalve; yield the list A, with all integers doubled.
                    ị   Retrieve the 4-tuple at the proper index.

6

এমএটিএল , 29 28 বাইট

4t:qEZ^!"[l2.5AX]@Y*10+G=?@.

কোন সমাধান নেই এমন ইনপুটগুলির জন্য এটি একটি খালি আউটপুট উত্পাদন করে (ত্রুটি ছাড়াই)।

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

ব্যাখ্যা

4           % Push 4
t:q         % Duplicate 4 and transform into range [0 1 2 3]
E           % Multiply by 2: transform into [0 2 4 6]
Z^          % Cartesian power. Each row is a "combination" of the four numbers
!           % Transpose
"           % For each column
  [l2.5AX]  %   Push [1 2.5 5 10]
  @         %   Push current column
  Y*        %   Matrix multiply. Gives sum of products
  10+       %   Add 10
  G=        %   Compare with input: are they equal?
  ?         %   If so
    @       %     Push current column, to be displayed
    .       %     Break loop
            %   Implicit end
            % Implicit end
            % Implicit display

5

গণিত, 70 বাইট

Select[FrobeniusSolve[{2,5,10,20},2#-20],AllTrue[EvenQ@#&&#<7&]][[1]]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং হয় একটি তালিকা বা ত্রুটি আউটপুট দেয় এবং {}[[1]]কোনও সমাধান না হলে ফিরে আসে ।


4

জেলি, 25 বাইট

×2,5,10,20S+⁵⁼³
4ṗ4’ÇÐfḢḤ

এখানে চেষ্টা করুন।


2,5,10,20->2,5,⁵,20
লিকি নুন

সত্যি ... ,ডায়াড না ? আমার পুরো জীবনটি একটি মিথ্যা
লিকি নুন

@ লিকিউন ,একটি ডায়াড তবে এটি আক্ষরিকর জন্যও ব্যবহার করা যেতে পারে। 2,5,⁵,20একটি আক্ষরিক যদিও নয় ( 2,5এবং 20আছে, কিন্তু ,, এবং ,পরমাণু হয়) তাই আপনি যদি লিঙ্ক একত্রিত করতে কিছু প্রয়োজন চাই।
ডেনিস

3

পাইথন 3, 112 বাইট

lambda n:[i for i in[[i//4**j%4*2for j in range(4)]for i in range(256)]if i[0]+2.5*i[1]+5*i[2]+10*i[3]+10==n][0]

একটি বেনাম ফাংশন যা টার্গেটের ভর দিয়ে আর্গুমেন্টের মাধ্যমে ইনপুট নেয় এবং প্রতিটি প্লেটের তালিকা হিসাবে তালিকা প্রদান করে। কোনও সমাধান উপস্থিত না থাকলে একটি ত্রুটি নিক্ষেপ করা হয়। এটি খাঁটি প্রাণঘাতী শক্তি।

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

lambda n                                   Anonymous function with input target mass n
...for i in range(256)                     Loop for all possible arrangement indices i
[i//4**j%4*2for j in range(4)]             Create a base-4 representation of the index i,
                                           and multiply each digit by 2 to map from
                                           (0,1,2,3) to (0,2,4,6)
[...]                                      Package all possible arrangements in a list
...for i in...                             Loop for all possible arrangements i
i...if i[0]+2.5*i[1]+5*i[2]+10*i[3]+10==n  Return i if it gives the target mass
[...]                                      Package all solutions in a list
:...[0]                                    Return the first list element. This removes any
                                           multiple solutions, and throws an error if there
                                           being no solutions results in an empty list

আইডিয়নে চেষ্টা করে দেখুন



1

পাইথ, 34 31 25 বাইট

h + fqQ +; s * VT [1 2.5 5;) ymm ^ U4 4] * 4] 0 
yMh + fqQ +; s * VT [2 5; y;) ^ U4 4] * 4] 0
yMhfqQ +; s * VT [2 5; y;) 4 U4 4

পরীক্ষা স্যুট.

অসম্ভবতা ত্রুটি।

এটি মূলত একটি হিংস্র শক্তি।

এটি বেশ দ্রুত, কারণ কেবলমাত্র 256 টির মতো সম্ভাব্য ব্যবস্থা রয়েছে possible


1

স্কালা, 202 বাইট

সিদ্ধান্ত নেওয়া স্কেলা এখানে খুব বেশি ভালবাসা পায় না, তাই আমি স্কালায় একটি (সম্ভবত অনুকূল নয়) সমাধান উপস্থাপন করি।

def w(i:Int){var w=Map(20->0,10->0,5->0,2->0);var x=i-10;while(x>0){
var d=false;for(a<-w.keys)if(a<=x & w(a)<6 & !d){x=x-a;w=w.updated(a,w(a)+2);d=true;}
if(!d){println(0);return;}}
println(w.values);}

প্রোগ্রামটি বিপরীত ক্রমে এবং পোস্টের সমাধানগুলির তুলনায় অতিরিক্ত জাঙ্কের আউটপুট দেয়। যখন কোনও সমাধান পাওয়া যায় না, 0 মুদ্রণ করুন।

দ্রষ্টব্য: আমি নতুনলাইনগুলি বা স্পেসগুলির কোনও অপসারণ করতে পারিনি কারণ স্কালা বোবা, তাই আমি মনে করি আকার হ্রাস করতে, পদ্ধতিটি অবশ্যই পুনরায় করা উচিত যদি না আমি কোনও স্পষ্ট কিছু মিস করি।


1

এপিএল, 40 বাইট

{2×(4⍴4)⊤⍵⍳⍨10+2×,⊃∘.+/↓1 2.5 5 10∘.×⍳4}

OIO ← 0 এ। ইংরেজীতে:

  1. 10+2×,∘.+⌿1 2.5 5 10∘.×⍳4: প্রতিটি ওজন প্রকারের ওজনের 4D বহিরাগত যোগফলকে গণনা করে সমস্ত সম্ভাব্য ওজনের অ্যারে তৈরি করুন;
  2. ⍵⍳⍨: প্রদত্ত সূচকটি অনুসন্ধান করুন। যদি পাওয়া না যায় তবে সূচকটি 1+ পদক্ষেপের অ্যারের ট্যালি 1;
  3. (4⍴4)⊤: বেস 4 এ সূচক উপস্থাপন করুন, 4D স্পেসে প্রদত্ত ওজনের দৈর্ঘ্যের সমন্বয় গণনা করুন;
  4. : সমস্যার স্থানে ফলাফল আনুন, যেখানে স্থানাঙ্কগুলি প্লেটের অর্ধেক সংখ্যার হিসাবে ব্যাখ্যা করা উচিত।

উদাহরণ: {2 × (4⍴4) +10 + 2 ×, ⊃∘। + / ↓ 1 2.5 5 10∘। ⍳ ⍳4} 112 2 4 6 6

বোনাস : যেহেতু এপিএল একটি অ্যারে ভাষা, তাই একবারে বেশ কয়েকটি ওজন পরীক্ষা করা যায়। এক্ষেত্রে ফলাফলটি স্থানান্তরিত হয়:

      {2×(4⍴4)⊤⍵⍳⍨10+2×,⊃∘.+/↓1 2.5 5 10∘.×⍳4}12 13 20 21 28 45 112 121
2 0 0 6 0 0 2 6
0 0 0 2 0 2 4 6
0 0 2 0 0 2 6 6
0 0 0 0 0 2 6 6

1

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

n=>`000${[...Array(256)].findIndex((_,i)=>i+(i&48)*9+(i&12)*79+(i&3)*639+320==n*32).toString(4)*2}`.slice(-4)

রিটার্নস 00-2ত্রুটি। বিকল্প সমাধান যা undefinedত্রুটিতে ফিরে আসে , এছাড়াও 109 বাইট:

n=>[...Array(256)].map((_,i)=>`000${i.toString(4)*2}`.slice(-4)).find(s=>+s[0]+s[1]*2.5+s[2]*5+s[3]*10+10==n)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.