সংখ্যার নূন্যতম সংখ্যা হ'ল n


15

এখানে প্রথম প্রশ্ন, এটি ডুপ্লিকেট বা খারাপ চ্যালেঞ্জ হলে আমাকে চিত্কার করবেন না।

ভূমিকা

আমি নিজেই এই চ্যালেঞ্জটি ভেবেছিলাম, এবং মনে হয় এটি শিক্ষানবিশ কোড-গল্ফারদের জন্য একটি ভাল বেসিক ধাঁধা। এটি কোন কোড-গল্ফিংয়ের ভাষা শিখতে হবে তা সিদ্ধান্ত নিতে আমাকে সহায়তা করতে পারে।

চ্যালেঞ্জ

পূর্ণসংখ্যার একটি অ্যারে দেওয়া যা এর চেয়ে কম বা সমান n, আউটপুট বা সঠিক পরিমাণে যোগ হওয়া অ্যারে থেকে সর্বনিম্ন সংখ্যার সংখ্যা প্রদান করে n

আপনি কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম লেখার জন্য চয়ন করতে পারেন।

ইনপুট

আপনি নিরাপদে ধরে নিতে পারেন 0 <= n < 2^31

একটি অ্যারে বা যে কোনও ধরণের তালিকা নিন ( vectorসি ++ বা জাভা LinkedListঅনুমোদিত) এর সাথে nএবং একটি alচ্ছিক প্যারামিটার lengthযা অ্যারের দৈর্ঘ্য নির্দিষ্ট করে।

আপনি nকোনও কমা বা কোনও স্থান দ্বারা পৃথককৃত স্পেস-বিভাজিত স্ট্রিং হিসাবেও ইনপুটটি নিতে পারেন :

1 5 7 3 7 3 6 3 2 6 3,10

1 5 7 3 7 3 6 3 2 6 3 10

যদি এটি সহজ হয়।

আউটপুট

আউটপুট, বা যে সমষ্টি আপ ঠিক করতে অ্যারে থেকে সংখ্যার ন্যূনতম সংখ্যা আসতে n। উপরের উদাহরণ ব্যবহার করে:

1 5 7 3 7 3 6 3 2 6 3,10

আপনার প্রোগ্রামটি মুদ্রণ করা উচিত:

2

কারণ সংখ্যার ন্যূনতম সংখ্যা পর্যন্ত যোগফল 10হয় 2( 7এবং 3)।

কোনও সমাধান না হওয়ার ক্ষেত্রে, খালি স্ট্রিং ব্যতীত, 0কোনও নেতিবাচক, "কোনও সমাধান নয়" (যদিও এটি স্মার্ট হবে না), (প্রস্তাবিত), বা অন্য কোনও মিথ্যা মানটি মুদ্রণ করুন বা প্রত্যাবর্তন করুন ।

উদাহরণ ইনপুট এবং আউটপুট

ইনপুট:

1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12

আউটপুট:

2
3
-1

স্কোরিং

এটি কোড-গল্ফ, তাই বাইট জেতে সংক্ষিপ্ততম কোড।

শীর্ষ উত্তর ক্রিসমাস গ্রহণ করা হবে।


আমি আপনার বৈশিষ্ট্য সম্পাদনা করেছি, কারণ আমরা সাধারণত ফাংশন এবং প্রোগ্রামগুলির জন্য একই আই / ও পদ্ধতিগুলিকে অনুমতি দিই; theকমত্য এখানে দেখুন । আপনি যদি একমত না হন তবে নির্দ্বিধায় ফিরে যান।
lirtosiast

আমরা কি falseকোনও সমাধান ছাড়া কেসগুলির জন্য আউটপুট দিতে পারি ?
ETH প্রোডাকশনস

পছন্দ করুন
TheCoffeeCup

পাইথের খালি স্ট্রিংটি মিথ্যা বলে আপনি কি খালি আউটপুটটিকে মিথ্যা বলে বিবেচনা করেন?
lirtosiast

@ থমাসকওয়া আমি খালি স্ট্রিং আউটপুট পছন্দ করি না, তবে আপনি আপনার উত্তরে "যদি
এক্সকে

উত্তর:


7

পাইথ, 12 11 বাইট

lhafqsTQyEY

এটি nপ্রথম লাইনের ইনপুট এবং দ্বিতীয় লাইনে তালিকা হিসাবে নেয় ।

lhafqsTQyEY     (Implicit: Q = 1st line of input; E = 2nd line)
         E      The list
        yE      Powerset (sorted by increasing length; empty set first)
   f            Filter by lambda T:
     sT         sum(T)
    q                  ==
       Q                  Q
   fqSTQyE      Sublists that sum to Q, sorted by increasing length
  a       Y     append an empty array (in case none match)
lh              take the length of the first element (0 for empty array)

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


1
আপনার কোড এবং আপনার ব্যাখ্যা মেলে না।
isaacg

@ আইস্যাক এখন ঠিক আছে।
lirtosiast

5

জাপট , 30 21 18 বাইট

দেখা যাচ্ছে সেখানে আরও কার্যকর পদ্ধতি ছিল। ;)

Uà f_x ¥V} ml n- g

এটি অনলাইন পরীক্ষা! (দ্রষ্টব্য: সামঞ্জস্যের কারণে n-পরিবর্তিত হয়েছে n@X-Y})

এটি ইনপুটটিকে একটি স্পেস- বা কমা-বিভাজিত অ্যারে হিসাবে নেয়, তার পরে একটি সংখ্যা। undefinedসমাধান ছাড়াই পরীক্ষার ক্ষেত্রে আউটপুট ।

Uà f_  x ¥ V} ®   l} n- g
UàfmZ{Zx ==V} mZ{Zl} n- g

            // Implicit: U = input array, V = input integer
Uà fZ{   }  // Generate all possible combinations of U, then filter to only items Z where
Zx ==V      //   the sum of Z is equal to V.
mZ{Zl}      // Map each remaining combination to its length.
n-          // Sort by subtraction; smaller items end up in the front.
g           // Take the first item.
            // Implicit: output last expression

আমি বিশ্বাস করতে পারি না যে আমি এই সংস্করণটির কথা ভাবিনি যখন আমি এইটি প্রথম লিখলাম ...

তখন থেকে বেশ কয়েকটি অপ্টিমাইজেশন করা হয়েছে যা এখানে কার্যকর হয়:

  • Uপ্রোগ্রামের শুরুতে একটি সাধারণত বাদ যায়।
  • Ãএর জন্য একটি শর্টকাট
  • n এখন ডিফল্টরূপে সঠিকভাবে সংখ্যা সাজান।

এগুলির প্রত্যেকটি মোট 15 টির জন্য একটি বাইট বন্ধ করে দেয়:

à f_x ¥VÃml n g

এটি অনলাইন পরীক্ষা!


এটি 21 বাইট নয়, 25 বাইট
অ্যালবার্ট রেনশওয়া

1
@ অ্যালবার্টরেনশা জপ্ট আইসিআই_8859-1 এনকোডিং সমর্থন করে , যার অধীনে এই অক্ষরগুলির প্রতিটি 1 বাইট। আপনি এই প্রোগ্রামটি একটি IEC_8859-1- এনকোডযুক্ত পাঠ্য ফাইল হিসাবে সংরক্ষণ করতে পারেন, তারপরে এটি অনলাইন দোভাষীর কাছে আপলোড করুন ।
ইটিএইচ প্রডাকশনগুলি 10:18

আহ! আমাকে জানানোর জন্য ধন্যবাদ
অ্যালবার্ট রেনশওয়া

1

গণিত, 73 65 বাইট

Min[Length/@Select[IntegerPartitions[#2,#2,#],Sort@#==Union@#&]]&

খাঁটি ফাংশন, কোনও সমাধান না হলে ফিরে আসে ।


1

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

এটি যেমনটি হোক তেমন গল্ফ হয় না তবে আমি পরে এটিতে কাজ করব।

from itertools import*
def s(a,n):
 for i in range(len(a)):
  for j in permutations(a,i+1):
   if sum(j)==n:return i+1
 return 0


1

সিজেম, 34 বাইট

0q~_,2,m*\f.*{:+1$=},\;0f-{,}$0=,+

এটি অনলাইনে চেষ্টা করুন । ইনপুট ফর্ম্যাটটি হল মানগুলির তালিকার সমষ্টি, যেমন:

18102 [143 1623 1646 16336 1624 983 122]

দ্রষ্টব্য যে কোনও সমাধান না পাওয়া গেলে এটি একটি ব্যতিক্রম বাড়িয়ে তুলবে। কমান্ড লাইন থেকে সিজেএম চালানো হলে ব্যতিক্রমটি স্ট্ডারে যায় এবং সঠিক ফলাফলটি ( 0) এখনও স্টাডাউটে মুদ্রিত হয়। সুতরাং এটি প্রতিষ্ঠিত sensকমত্যের সাথে মিলিত হয় কি সাবমিশনগুলিকে কোনও ত্রুটির সাথে প্রস্থান করার অনুমতি দেওয়া উচিত?

কোডটি আপনার প্রত্যাশার চেয়ে লম্বা দেখাচ্ছে। মূল কারণ হ'ল সিজেমের সংমিশ্রণ উত্পন্ন করার জন্য কোনও বিল্ট-ইন নেই। বা কমপক্ষে এটি আমার অজুহাত, এবং আমি এটি আঁকড়ে আছি।

ব্যাখ্যা:

0       Push 0 result for exception case.
q~      Get and interpret input.
_,      Copy and get length of input value list.
2,      Push [0 1].
m*      Cartesian power. This generates all possible lists of 0/1 values with the
        same length as the input value list.
\       Swap input value list to top.
f.*     Apply element-wise product of input value list with all 0/1 lists.
        We now have all combinations of values, with 0 in place of unused values.
{       Start filter block.
  :+      Sum values.
  1$      Copy target sum to top.
  =       Compare.
},      Filter.
\;      Swap target sum to top and discard.
0f-     Remove 0 values. We now have all solution lists.
{,}$    Sort by length.
0=      Get first solution, which after sorting is the shortest.
        This will raise an exception if the list of solutions is empty, bailing
        out with the initial 0 on the stack.
,       Get length of solution.
+       Add the 0 we initially pushed for the exception case.

1

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

f=(a,n,m=1e999,x)=>n&&a.map((v,i)=>(x=[...a],x.splice(i,1),x=f(x,n-v)+1)<m?m=x:0)&&m

ব্যাখ্যা

একটি লাগে Arrayএর Numbers এবং একটি Numberআর্গুমেন্ট হিসাবে। Infinityকোনও ফলাফল না হলে একটি সংখ্যা ফেরত দেয় । এটি একটি পুনরাবৃত্ত ফাংশন যা nপ্রতিটি উপাদানকে একের পর এক অ্যারে থেকে বিয়োগ করে অপসারণ করে n == 0

f=(a,n,m=1e999,x)=> // m and x are not passed, they are here to declare them in the local
                    //     scope instead of globally, initialise m to Infinity
  n&&               // if n == 0, return 0
  a.map((v,i)=>     // iterate over each number in a
    (x=[...a],      // x = copy of a
    x.splice(i,1),  // remove the added number from the array
    x=f(x,n-v)+1)   // x = result for the numbers in this array
      <m?m=x:0      // set m to minimum result
  )
  &&m               // return m

পরীক্ষা

এই পরীক্ষায় এটি ক্রোমে (কেবল ফায়ারফক্সের পরিবর্তে) কাজ করার জন্য ডিফল্ট আর্গুমেন্টের পরিবর্তে পরে সেট mহয় Infinity


1

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

import Data.List
n#l=head$sort[length x|x<-subsequences l,sum x==n]++[0]

0কোনও সমাধান না হলে ফিরে আসে ।

ব্যবহারের উদাহরণ: 10 # [1,5,7,3,7,3,6,3,2,6,3]-> 2

lযোগফলের ইনপুট তালিকার সমস্ত উপ-তালিকা সন্ধান করুন n। এই জাতীয় প্রতিটি উপ-তালিকা দৈর্ঘ্য নিন এবং বাছাই করুন। সংযোজন ক0 এবং প্রথম উপাদানটি নিন।

একটি Singleton তালিকা আউটপুট, যেমন জন্য অনুমোদিত হয়, তাহলে [2], আমরা 7 বাইট সংরক্ষণ করতে পারেন: n#l=minimum[length x|x<-subsequences l,sum x==n]। কোনও সমাধান না হলে, খালি তালিকা []ফিরে আসে।

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