আপনি কত তিনটি ফলের পাই তৈরি করতে পারেন?


32

একটি থ্রি-ফলের পাই তিনটি আলাদা ফলের তৈরি । আপনার কাছে থাকা ৫ টি ফলের পরিমাণ থেকে আপনি সবচেয়ে বেশি তিন-ফলের পাইগুলি কী তৈরি করতে পারেন?

উদাহরণস্বরূপ, সাথে

1 apple
1 banana
4 mangoes 
2 nectarines
0 peaches

আপনি 2 পাই করতে পারেন:

apple, mango, nectarine
banana, mango, nectarine

ইনপুট: পাঁচটি অ-নেতিবাচক পূর্ণসংখ্যা বা তাদের একটি তালিকা।

আউটপুট: সর্বাধিক সংখ্যক তিন-ফলের পাইগুলি আপনি সেই পরিমাণে ফলের থেকে তৈরি করতে পারেন। সবচেয়ে কম বাইট জেতা

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

1 1 4 2 0
2
2 2 2 2 2
3
0 6 0 6 0
0
12 5 3 2 1
5
1 14 14 3 2
6
0 0 1 0 50
0

লিডারবোর্ড:


আমি বিশ্বাস করি আপনার উদাহরণটি দুটি অতিরিক্ত বিকল্প অনুপস্থিত: অ্যাপল, কলা, আম এবং অ্যাপল, কলা, নেকটারিন। সুতরাং 1 1 4 2 0পরীক্ষার ক্ষেত্রে আউটপুট উত্পাদন করা উচিত: 4.
কোবল্টডাক্ক

@ কোবাল্টডাক্ক তবে আপনি যদি নিজের প্রথম পাইতে (অ্যাপল / কলা / আম) অ্যাপল এবং কলা ব্যবহার করেন তবে আপনার দ্বিতীয় পাইতে (অ্যাপল / কলা / নেকটারিন) অ্যাপল বা কলা ব্যবহার করার দরকার নেই।
অ্যাডমবর্কবার্ক

2
@ টিমি ডি: আহ, বুঝেছি পাইগুলি একইসাথে তৈরি করা হয়েছিল তা পরিষ্কার ছিল না।
কোবল্টডাক্ক

@ কোবল্টডাক্ক আমি বিশ্বাস করি সেগুলি একসাথে তৈরি করতে হবে না, তবে আপনি যে ফলগুলি প্রথমটির জন্য ব্যবহার করেছিলেন তা পুনরায় ব্যবহার করে আপনি প্রতারণা করতে পারবেন না।
মিস্টার লিস্টার

@জনাব. লিস্টার: শব্দার্থক। এটি যথেষ্ট যে এখানে একটি নিয়ম ছিল যা দ্ব্যর্থক ছিল (কমপক্ষে একজন পাঠকের কাছে) এবং এরপরে স্পষ্ট করে দেওয়া হয়েছে।
কোবল্টডাক্ক

উত্তর:


34

পাইথ, 19 18 14 বাইট

-২ বাইট @ ফ্রাইআমডেজিগম্যান দ্বারা

@ আইসএইচজি দ্বারা 14-বাইট প্রোগ্রাম

আমি দাবি করি যে আরোহণের তালিকা থেকে পাইগুলির সংখ্যাটি [x1,x2,x3,x4,x5]হ'ল:

floor(min((x1+x2+x3+x4+x5)/3,(x1+x2+x3+x4)/2,x1+x2+x3))

অথবা কোডে:

JSQhS/Ls~PJ_S3

[টিআই-বেসিক এবং এপিএল প্রোগ্রামগুলির সংশোধন ইতিহাস দেখুন]

সঠিকতার প্রমাণ

দিন

s3 = x1+x2+x3
s4 = x1+x2+x3+x4
s5 = x1+x2+x3+x4+x5

আমরা দেখাতে চাই যে P(X)=floor(min(s5/3,s4/2,s3))সর্বদা x1≤x2≤x3≤x4≤x51 of 5 ফলের সংখ্যার তালিকার জন্য পাইগুলির সর্বাধিক সংখ্যক ।

প্রথমত, আমরা দেখাই যে তিনটি সংখ্যাই উপরের সীমানা।

  • যেহেতু s5মোট ফল রয়েছে এবং প্রতিটি পাইতে তিনটি ফল রয়েছে ⌊s5/3⌋এটি একটি উপরের আবদ্ধ।

  • যেহেতু এমন s4ফল রয়েছে যা ফল 5 নয় এবং প্রতিটি পাইতে কমপক্ষে দু'টি অ -5 ফল প্রয়োজন, ⌊s4/2⌋এটি একটি উচ্চতর আবদ্ধ।

  • যেহেতু এমন s3ফল রয়েছে যা ফল 4 বা ফল 5 নয় এবং প্রতিটি পাইতে কমপক্ষে একটি ফল প্রয়োজন, s3এটি একটি উপরের আবদ্ধ।

দ্বিতীয়ত, আমরা দেখাই যে তিনটি বৃহত পাইল থেকে ফল নেওয়ার পদ্ধতিটি সর্বদা সীমাবদ্ধ করে। আমরা এটি অন্তর্ভুক্তির মাধ্যমে করি।

বেস কেস: 0 পাই অবশ্যই যে কোনও বৈধ তালিকা থেকে গঠিত হতে পারে P(X)>=0

প্ররোচিত পদক্ষেপ: যে কোনও তালিকা দেওয়া আছে Xযেখানে P(X) > 0, আমরা একটি পাই বেক করতে পারি, X'সাথে তালিকার পিছনে রেখে P(X') >= P(X)-1। বৃহত্তম তিনটি পাইল থেকে ফল নিয়ে আমরা এটি করি 3,4,5, তারপরে প্রয়োজনে রিসর্ট করুন। আমাকে সহ্য কর; কিছু ক্ষেত্রে কাজ আছে।

  • যদি x2<x3, তবে ফলগুলি সরানোর পরে আমাদের তালিকাটি বাছাই করতে হবে না। আমরা ইতিমধ্যে একটি বৈধ আছে X'। আমরা জানি P(X') = P(X)-1যেহেতু s5'3 কম (কারণ 1 1 5 প্রকারের তিনটি ফল সরানো হয়েছিল), s4'2 কম, এবং s3'1 কম। P(X')ঠিক একইভাবে পি (এক্স) এর চেয়ে কম।
  • যদি x3<x4, তবে আমরা একইভাবে সম্পন্ন করেছি।
  • এখন আমরা কেসটি কোথায় নিয়ে যাই x2=x3=x4। আমাদের এবার তালিকাটি পুনরায় সাজানো দরকার।

    • তাহলে x5>x4, তাহলে আমরা পাইলস 4 এবং 2. সুইচিং দ্বারা আপনি তালিকাটি নতুন করে সাজানো s5'এবং s4'এখনও যথাক্রমে 3 এবং 2 এর কমে, কিন্তু s3'=s3-2। এর কারণ হল, তাহলে একটা সমস্যা হয় না x2=x3=x4, তারপর 2*x4<=s3> - 2*x4+s3 <= 2*s3-> (x4 + s4)/2 <= s3। আমাদের দুটি উপ-কেস রয়েছে:
    • সমতা, অর্থাত্ (x4,x3,x2,x1)=(1,1,1,0), এর ক্ষেত্রে P(X)= 1এবং আমরা পরিষ্কারভাবে পাইলস থেকে পাই তৈরি করতে পারি 5,4,3, বা:

    • (s4+1)/2 <= s3, s4অতিরিক্ত ক্ষেত্রে হ্রাস হওয়ার 1অর্থ পি (এক্স) এর অতিরিক্ত হ্রাস হওয়ার অর্থ নয়।

  • এখন আমরা কেস যেখানে বাকি আছে x1<x2=x3=x4=x5। এখন s3এছাড়াও, 1 কমে গেছে করা হবে যাতে আমরা প্রয়োজন (s5/3+1)হতে <=s4/2; যে 8x5+2x1+2<=9x5+3x1, বা x5+x1>=2। এর চেয়ে ছোট সমস্ত ক্ষেত্রে ম্যানুয়ালি পরীক্ষা করা যায়।

  • যদি প্রতিটি সংখ্যা সমান হয়, তবে এটি স্পষ্ট যে আমরা সীমাটি অর্জন করতে পারি ⌊s5/3⌋, যা অন্যান্য দুটি তুলনায় সর্বদা কম — আমরা কেবল ধারাবাহিকভাবে সংখ্যার মধ্য দিয়ে যাই।

অবশেষে আমরা শেষ করেছি। আমি কিছু অনুপস্থিত থাকলে দয়া করে মন্তব্য করুন এবং আমি আরও মার্জিত প্রমাণের জন্য একটি ছোট অনুদান দিচ্ছি।


আমি মনে করি আপনার দাবি @ ফ্রিমাথিগেমম্যানের পুনরাবৃত্ত সমাধানের সাথে মেলে।
স্পার

@ স্পার আমি ফ্রিমাথিগামম্যানের পদ্ধতিটি ব্যবহার করে আমার বেঁধে পৌঁছানোর চেষ্টা করছি।
lirtosiast

2
এটি লুপে রূপান্তরিত করে 4 বাইট দ্বারা গল্ফ করা যেতে পারে:JSQhS/Ls~PJ_S3
isaacg

3
আমি বিশ্বাস করি যে পাই প্রতি nউপাদান এবং kউপাদানগুলির জন্য আমি একটি প্রমাণ পেয়েছি , তবে এই মন্তব্য বাক্সটির জন্য এটি অনেক দীর্ঘ । আপনি যে কোনও ত্রুটি খুঁজে পেতে পারেন তা উল্লেখ করুন, যাতে আমরা এটি প্রমাণিত হতে পারি।
মেগো

7

সিজেম, 34

q~L{J2be!\f{\.-_W#){j)7}|;}0+:e>}j

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

ব্যাখ্যা:

q~          read and evaluate the input array
L{…}j       calculate with memoized recursion and no initial values
             using the input array as the argument
  J2b       convert 19 to base 2 (J=19), obtaining [1 0 0 1 1]
  e!        get permutations without duplicates
             these are all the combinations of three 1's and two 0's
             which represent the choices of fruit for one pie
  \         swap with the argument array
  f{…}      for each combination and the argument
    \       swap to bring the combination to the top
    .-      subtract from the argument array, item by item
    _       duplicate the resulting array
    W#)     does it contain the value -1? (calculate (index of W=-1) + 1)
    {…}|    if not
      j     recursively solve the problem for this array
      )7    increment the result, then push a dummy value
    ;       pop the last value (array containing -1 or dummy value)
  0+        add a 0 in case the resulting array is empty
             (if we couldn't make any pie from the argument)
  :e>       get the maximum value (best number of pies)

পুনরাবৃত্তির মূল্য বাইটগুলি স্মরণে রাখে? রান-টাইম সীমা নেই।
xnor

2
@ এক্সনোর আমি মনে করি এটি আসলে এখানে 1 বাইট সংরক্ষণ করে :)
অদিতসু

7

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

f x=maximum$0:[1+f y|y<-mapM(\a->a:[a-1|a>0])x,sum y==sum x-3]

এটি ফাংশনটি সংজ্ঞায়িত করে fযা ফলের তালিকায় নিয়ে যায় xএবং সর্বাধিক সংখ্যক পাইগুলি দেয় returns

ব্যাখ্যা

আমরা পাইগুলির সংখ্যা পুনরাবৃত্তভাবে গণনা করি। অংশটি কোনও ধনাত্মক এন্ট্রি হ্রাস করে mapM(\a->a:[a-1|a>0])xপ্রাপ্ত সমস্ত তালিকার তালিকার মূল্যায়ন করে x। যদি x = [0,1,2], এর ফলাফল

[[0,1,2],[0,1,1],[0,0,2],[0,0,1]]

বাইরের অংশটি []একটি তালিকা বোধগম্য: আমরা yউপরের তালিকার মধ্যে সমস্তটি দিয়ে পুনরাবৃত্তি করি এবং যাদের সমষ্টি সমান নয় তাদের ফিল্টার আউট sum(x)-3করি, সুতরাং আমরা সমস্ত তালিকা পাই যেখানে 3 টি পৃথক ফল পাই হিসাবে তৈরি করা হয়েছে। তারপরে আমরা fএই তালিকাগুলিতে পুনরাবৃত্তির সাথে মূল্যায়ন করব , 1প্রত্যেকটিতে যুক্ত করব এবং সেগুলির সর্বাধিক এবং 0(বেস কেস, যদি আমরা কোনও পাই তৈরি করতে না পারি) নিই।


7

সি #, 67

আপনার রান আউট হওয়া অবধি সবচেয়ে বেশি ফলগুলি দিয়ে পুনরাবৃত্তি অনুসারে এক পাই করুন ite

int f(List<int>p){p.Sort();p[3]--;p[4]--;return p[2]-->0?1+f(p):0;}

পরীক্ষার মামলা এখানে


সি # এর সাথে পরিচিত নয়, তবে আপনি সম্ভবত p[2]--একই সাথে চেকিং করতে পারেন p[2]>-1?
xnor

ভাল কথা, আমি উত্তরটি এক সেকেন্ডে আপডেট করব।
এক্সএমআইএম

6

পাইথ, 29

Wtt=QS-Q0=Q+tPPQtM>3.<Q1=hZ;Z

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

ইনপুট তালিকাটি বাছাই করে এবং শূন্যগুলি সরিয়ে দেয়। তারপরে, আপনার কাছে 3 টি ফল রয়েছে যতক্ষণ না প্রথম এবং দুটি শেষ উপাদান হ্রাস করুন এবং এর মধ্যে বাছাইয়ের আগে এবং আবার শূন্যগুলি সরিয়ে দেওয়ার আগে অবশিষ্ট উপাদানগুলিকে তালিকায় যুক্ত করুন। তারপরে একটি কাউন্টারকে 1 দ্বারা বৃদ্ধি করুন।

এটি কেবলমাত্র তাত্ক্ষণিকভাবে এতক্ষণ দীর্ঘ মাত্র 5 টি ফল রয়েছে যেহেতু এটি খুব বড় ফলের ফলগুলি, যেমন 1000,1000,1000,1000,1000এক সেকেন্ডের নীচে সমাধান করতে পারে ।


আপনি কি প্রমাণ করতে পারবেন যে এটি সঠিক?
অ্যাডিটসু

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

@ ফ্রাইআম TheEggman আমি কি ঠিক বুঝতে পারি যে আপনি দুটি সবচেয়ে সাধারণ ফল এবং বিরল ফল নিচ্ছেন?
xnor

@ এক্সনর হ্যাঁ, এটি সঠিক। এটা কি কাজ করে না?
FryAmTheEggman

1
@ টিমিমিডি না, আমি (মনে করি) করতে হবে না, তবে এই কার্যকারিতাটি সরাতে কোনও বাইটের জন্য ব্যয় করতে হবে না (এটি আসলে আরও বেশি খরচ হয়)। এটি বলেছিল, আমি প্রত্যাশা করি যে রেটো কোরাদির সমাধান বেশিরভাগ ভাষায় সংক্ষিপ্ত এবং স্পষ্টতই থমাস আরও সংক্ষিপ্ত। আমি মনে করি যে আপনি পুনরায় বাছাই না করার কারণটি আপনি সম্পর্কিত যে 3 টি ছোট পাইল থেকে নেওয়া তা বিবেচ্য নয়।
FryAmTheEggman

6

পাইথন, সাধারণ সমাধান, 128 92 বাইট

@ এক্সনোর থেকে -36 বাইট, আপনি দা রিয়েল এমভিপি

g=lambda l,k:0if k>sum(l)else-(-1in l)or-~g(map(sum,zip(sorted(l),[0]*(len(l)-k)+[-1]*k)),k))

def g(a,k):b=[i for i in a if i];return 0if len(b)<k;c=sorted(b,reverse=True);return 1+g([c[i]-(k-1>i)for i in range(len(c))],k)

এটি যতক্ষণ না আমার প্রমাণ সঠিক হিসাবে কাজ করে । যদি এটি না হয় তবে আমাকে কেন এটি ঠিক করার চেষ্টা করতে পারি তা আমাকে জানান। যদি এটি আপত্তিজনক নয়, আমাকে জানান, এবং আমি কয়েক কাপ কফির পরে এটি আক্রমণ করব।


সবকিছু এখন আমার কাছে টাইট মনে হচ্ছে।
lirtosiast

@ মেগো এই বিষয়ে কাজ করার জন্য ধন্যবাদ! আপনি কি এসই পোস্টে প্রমাণ অন্তর্ভুক্ত করতে পারেন? একটি সাধারণ উদ্বেগ রয়েছে যে এই বছরগুলি পরে পড়া কেউ মৃত লিঙ্ক খুঁজে পেতে পারে। ল্যাটেক্স ফর্ম্যাটিংটি বেশিরভাগই কেবল ম্যাথজ্যাক্সে কাজ করা উচিত।
এক্সনর

@ মেগো ওফস, আমি ভুলে গিয়েছিলাম যে ম্যাথজ্যাক্স এখানে সক্ষম নয়। হুম, আমি কি করব জিজ্ঞাসা করব।
xnor

আমি এই প্রমাণের জন্য অনুদান প্রদান করছি। অভিনন্দন!
xnor

@ মেগো নোপ, আমি মনে করি আপনার ম্যাথক্লাউড লিঙ্কটি আমাদের মধ্যে সেরা।
xnor

5

পাইথন 2, 78 বাইট

ইনপুট হিসাবে 5 নম্বর নেওয়া: 91 89 88 বাইট

s=sorted([input()for x in[0]*5])
while s[2]:s[2]-=1;s[3]-=1;s[4]-=1;s.sort();x+=1
print x

সম্পাদনা : 1 বাইট সংরক্ষণ s=sorted([input()for x in[0]*5])করে পরিবর্তন করা হচ্ছে s=sorted(map(input,['']*5));x=0

ইনপুট হিসাবে 5 সংখ্যা নেয় এবং তৈরি করা যায় এমন সম্ভাব্য পাইগুলির সংখ্যা মুদ্রণ করে। এটি বেটো কাউন্টের উন্নতির সাথে রেটো কোড়াদির উত্তর হিসাবে একই পন্থা নেয় takes তবে মনে হয়েছিল যে পাইথনে এই প্রশ্নের কোনও উত্তর অনুপস্থিত।

আপনার পরামর্শের জন্য @ থমাসকওয়া এবং @ এসএসটকে ধন্যবাদ।

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

 s=sorted([input()for x in[0]*5]) takes 5 numbers as input, puts them in a list 
                                  and sorts it in ascending order. The result
                                  is then stored in s 

 while s[2]:                      While there are more than 3 types of fruit 
                                  we can still make pies. As the list is                     
                                  sorted this will not be true when s[2] is 0. 
                                  This takes advantage of 0 being equivalent to False.

 s[2]-=1;s[3]-=1;s[4]-=1          Decrement in one unit the types of fruit 
                                  that we have the most

 s.sort()                         Sort the resulting list

 x+=1                             Add one to the pie counter

 print x                          Print the result

নোট করুন যে চলকটি xকখনই সংজ্ঞায়িত হয় না তবে প্রোগ্রামটি কিছু ফুটো পাইথন ২. 2. এর সুবিধা গ্রহণ করে। sতালিকার বোধগমির সাথে তালিকাটি সংজ্ঞায়িত করার সময় পুনরাবৃত্ত হওয়ার জন্য ব্যবহৃত চলকটিতে ( [0]*5এই ক্ষেত্রে) শেষ মানটি সংরক্ষণ করা হয়।

বিষয়গুলিকে আরও পরিষ্কার করার জন্য:

>>>[x for x in range(10)]
>>>x
9

ইনপুট হিসাবে একটি তালিকা নিচ্ছেন: 78 বাইট

একটি তালিকাতে ইনপুট পরিবর্তন করার পরামর্শ দেওয়ার জন্য @xnor @xsot এবং @ ThomasKwa ধন্যবাদ Thanks

s=sorted(input());x=0
while s[2]:s[2]-=1;s[3]-=1;s[4]-=1;s.sort();x+=1
print x

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

এটি উপরের কোডের একই পদ্ধতিতে কাজ করে, তবে এই ক্ষেত্রে ইনপুটটি ইতিমধ্যে একটি তালিকা তাই এটি তৈরি করার দরকার নেই এবং ভেরিয়েবল xসংজ্ঞায়িত করতে হবে।

দাবি অস্বীকার: গল্ফ করাতে এটি আমার প্রথম প্রচেষ্টা এবং এটি এখনও গল্ফ করা যেতে পারে বলে মনে হয়, তাই বাইট গণনা হ্রাস করার জন্য যে কোনও পরিবর্তন করা যেতে পারে suggest


1
আপনাকে ইতিমধ্যে একটি তালিকায় ইনপুট রাখার অনুমতি দেওয়া হয়েছে; s[2]>0-> s[2], যেহেতু স্তূপের সংখ্যাটি সর্বদা অবিস্মরণীয়।
lirtosiast

থমাস কোওয়া নির্দেশ করে বলেছেন যে আপনি ধরে নিতে পারেন ইনপুটটি ইতিমধ্যে একটি তালিকা হিসাবে দেওয়া হয়েছে, তাই আপনি ঠিক করতে পারেন s=sorted(input())। এছাড়াও, আপনার বর্তমান বাইট গণনা 89; নিউলাইনগুলি একক চর হিসাবে গণনা করে।
xnor

@ThomasKwa ইতিমধ্যে নির্দিষ্ট আপনি একটি তালিকা হিসাবে ইনপুট গ্রহণ করতে পারে যে, কিন্তু আপনি যদি বহু-লাইন ইনপুট গ্রহণ পীড়াপীড়ি, একটি বাইট সংরক্ষণ করতে নিম্নলিখিত সঙ্গে প্রথম লাইন প্রতিস্থাপন করুন: s=sorted(map(input,['']*5));x=0
xsot

4

সিজেম, 23 বাইট

0l~{\)\$2/~+:(+_2=)}g;(

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

এটি প্রতিটি পুনরাবৃত্তির 3 বৃহত্তম পাইল থেকে ফল নেয় এবং পুনরাবৃত্তির সংখ্যা গণনা করে।

আমার কাছে গাণিতিক প্রমাণ নেই যা এটি সর্বদা সঠিক ফলাফল দেয়। এটি প্রদত্ত পরীক্ষার উদাহরণগুলির জন্য করে, এবং আমি বিশ্বাস করব যে কেউ আমাকে কাউন্টার উদাহরণ না দেয় ততক্ষণ এটি সমস্ত ক্ষেত্রে কাজ করে।

আমি নিজেকে বোঝানোর জন্য যে স্বজ্ঞাতসুলভ ব্যাখ্যাটি ব্যবহার করেছি: পাইগুলির সংখ্যা বাড়ানোর জন্য, আপনার যতটা পাইল সম্ভব তত ফাঁকা রাখতে হবে। এর কারণ আপনি 3 বা ততোধিক খালি পাইলস পাওয়ার সাথে সাথে আরও পাই তৈরির ক্ষমতা হারাবেন।

সর্বদা বৃহত্তম পাইল থেকে ফল নিয়ে এটি অর্জন করা হয়। আমি একটি মামলার কথা ভাবতে পারি না যেখানে ছোট স্তূপ থেকে ফল নেওয়া আরও বড় স্তূপ থেকে ফল নেওয়ার চেয়ে ভাল অবস্থার দিকে নিয়ে যায়।

আমার মাথায় কিছুটা বেশি আনুষ্ঠানিক যুক্তি আছে। আমি এটিকে শব্দ / সূত্রের মধ্যে রাখার কোনও উপায় চিন্তা করার চেষ্টা করব।


আমি ইন্ডাকশন ব্যবহার করার চেষ্টা করেছি; একটি আনুষ্ঠানিক প্রমাণ পেতে আমরা সম্ভবত আমাদের ধারণাগুলি একত্রিত করতে পারি।
lirtosiast

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

3

> <>, 76 বাইট

0&4\/~}&?!/
@:@<\!?:}$-1@@$!?&+&:)@:@
,:&:@(?$n;/++:&+::2%-2,:&:@(?$&~+:3%-3

> <> এ বাছাই করা সহজ নয়! এই প্রোগ্রামটি সত্য হিসাবে থমাস কোওয়া দ্বারা প্রমাণিত প্রমাণের উপর নির্ভর করে, যা অবশ্যই পরীক্ষার কেসগুলির ক্ষেত্রে দেখা যায়।

5 ইনপুট নম্বরগুলি প্রোগ্রামের শুরুতে স্ট্যাকটিতে উপস্থিত থাকার আশা করা হচ্ছে।

প্রথম দুটি লাইন স্ট্যাকের উপর নম্বরগুলি বাছাই করে এবং তৃতীয়টি floor(min((x1+x2+x3+x4+x5)/3,(x1+x2+x3+x4)/2,x1+x2+x3))টমাসের উত্তর থেকে নেওয়া গণনা সম্পাদন করে ।


আপনি যদি তিন / চারটি উপাদানের সমস্ত যোগফল এবং তার ন্যূনতম গণনা করেন তবে এটি আরও খাটো হবে?
lirtosiast

@ থমাসকওয়া আমার কাছে দেখে মনে হচ্ছে এর মধ্যে ইনপুট সেটটির ক্রমবিন্যাসগুলি সন্ধান করা, প্রতিটিটির শীর্ষস্থানীয় 3 এবং 4 টি উপাদানকে সংযুক্ত করে এবং এর মধ্যে সবচেয়ে ছোটটি অন্তর্ভুক্ত করা হবে? আমি মনে করি না যে ক্রম / গণনা পদ্ধতির আমি ব্যবহার করেছি, বিশেষত স্ট্যাক-ভিত্তিক ভাষায় যে অনুমতিগুলি খুঁজে পেয়েছি তার চেয়ে কম হবে। যদি স্ট্যাক-ভিত্তিক ভাষায় ক্রমাগত উত্পাদন করতে কোনও হস্তক্ষেপের অ্যালগরিদম সম্পর্কে জানা থাকে তবে আমি দেখতে আগ্রহী: ও)
Sok

2

পাইথন 2, 59 বাইট

h=lambda l,k=3:k*'_'and min(h(sorted(l)[:-1],k-1),sum(l)/k)

একটি সাধারণ পদ্ধতি যা যে কোনও nএবং জন্য কাজ করে kk=33 পাই ডিফল্ট অনুসারে ফল করে তোলে, কিন্তু আপনি একটি ভিন্ন মান পাস করতে পারেন। পুনরাবৃত্তিটি পাইথন 2 এর চেয়ে বড় স্ট্রিংগুলি ব্যবহার করে, খালি স্ট্রিংটি অনন্তের বেস কেসটিকে উপস্থাপন করে।

এই পদ্ধতিটি এই সত্যটি ব্যবহার করে যে সর্বদা সর্বাধিক সাধারণ ফল গ্রহণ করা সর্বোত্তম so তাই আমরা ফলগুলির প্রতিটি সম্ভাব্য র‌্যাঙ্ককে একটি সীমিত ফ্যাক্টর হিসাবে বিবেচনা করি। আমি নীচে সেই সত্যটি পুনরায় সংশোধন করেছি।


মেগো এর প্রমাণ আমাকে এই আরও প্রত্যক্ষ প্রমাণ সম্পর্কে ভাবতে বাধ্য করেছে যে বারবার সর্বাধিক সাধারণ ফল গ্রহণ করা সর্বোত্তম। এটি kফলের পাইগুলির সাথে বলা হয়েছে ।

উপপাদ্য: বারবার kসর্বাধিক সাধারণ ফল গ্রহণ করলে পাইগুলির সর্বোত্তম সংখ্যা পাওয়া যায়।

প্রুফ: আমরা দেখাব যে Nপাইগুলি যদি সম্ভব হয় তবে সর্বাধিক সাধারণ-ফল কৌশলটি কমপক্ষে Nপাই তৈরি করে । Nপাইগুলিকে বৈধ রাখার সময় আমরা পাইগুলির মধ্যে ফল পরিবর্তনের মাধ্যমে এই কৌশলটি দ্বারা উত্পাদিতগুলির সাথে মিলে যায়।

আসুন এটি তৈরি করুন যাতে প্রথম পাই (একে কল করুন p) সর্বাধিক সাধারণ ফল ধারণ করে। যদি এটি এখনও না হয় তবে এতে অবশ্যই একটি ফল থাকতে হবে iতবে আরও সাধারণ ফল নয় j। তারপরে, বাকী পাইগুলিতে ফলের jচেয়ে কঠোর পরিমাণে বেশি ফল পাওয়া যায় iএবং অন্য কোনও পাইq অবশ্যই থাকে jতবে তা নয় i। এর পরে, আমরা ফল অদলবদল করতে পারেন iপাই থেকে pফল সঙ্গে jপাই থেকে q, যা রাখে Nপাই স্বতন্ত্র ফল হচ্ছে।

একই পদ্ধতি পুনরাবৃত্তি করুন pরয়েছে kসবচেয়ে সাধারণ ফল।

তারপরে, পাই সেট করুন p একদিকে রেখে এবং পরবর্তী পাইতে সর্বাধিক সাধারণ অবশিষ্ট ফলগুলি তৈরি করতে এই প্রক্রিয়াটি পুনরাবৃত্তি করুন। পাইগুলি সর্বাধিক-সাধারণ-ফলের স্থিতির দ্বারা উত্পাদিত ক্রম না হওয়া পর্যন্ত এটি চালিয়ে যান।


1

পাওয়ারশেল, 92 বাইট

$a=($args|sort)-ne0;while($a.count-ge3){$a[0]--;$a[-1]--;$a[-2]--;$a=($a-ne0;$c++}($c,0)[!$c]

FryAmTheEggman এর উত্তরের মতো একই লোভী-ভিত্তিক অ্যালগরিদম ব্যবহার করে ... পাওয়ারশেলে কেবলমাত্র প্রচুর শব্দযুক্ত ....

$a=($args|sort)-ne0  # Take input arguments, sort them, remove any 0's
while($a.count-ge3){ # So long as we have 3 or more fruit piles
  $a[0]--            # Remove one from the first element...
  $a[-1]--           # ... the last element ...
  $a[-2]--           # ... and the second-to-last.
  $a=$a-ne0          # Remove any 0's from our piles
  $c++               # Increment how many pies we've made
}                    #
($c,0)[!$c]          # Equivalent to if($c){$c}else{0}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.