লক্ষ্য সংযোজন যুক্ত সংযোজনগুলি তৈরি করুন


14

চ্যালেঞ্জ

মনে করুন আপনার কাছে সংখ্যার একটি তালিকা এবং একটি লক্ষ্য মান রয়েছে। আপনার সংখ্যার সমস্ত সংমিশ্রণের সেট সন্ধান করুন যা লক্ষ্য মান পর্যন্ত যুক্ত হয়, তালিকা সূচক হিসাবে ফিরে আসে।

ইনপুট এবং আউটপুট

ইনপুটটি সংখ্যার একটি তালিকা (প্রয়োজনীয়ভাবে অনন্য নয়) এবং একটি লক্ষ্য সংমিশ্রনের নম্বর নেবে। আউটপুটটি খালি খালি তালিকার একটি সেট হবে, প্রতিটি ইনপুট তালিকার মূল অবস্থানের সাথে সম্পর্কিত পূর্ণসংখ্যার মানগুলি তালিকা করে।

উদাহরণ

Input: values = [1, 2, 1, 5], target = 8
Output: [ [0,1,3], [1,2,3] ]

Input: values = [4.8, 9.5, 2.7, 11.12, 10], target = 14.8
Output: [ [0,4] ]

Input: values = [7, 8, 9, -10, 20, 27], target = 17
Output: [ [1,2], [0,3,4], [3,5] ]

Input: values = [1, 2, 3], target = 7
Output: [ ]

স্কোরিং

এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী!


6
সম্পর্কিত , সম্ভবত একটি ডুপ।
জিউসেপ

আমি মনে করি এটি একটি ডুপ তবে আমি পুরানোটিকে বন্ধ করব কারণ এটি পুরানো।
পোস্ট রক গার্ফ হান্টার

4
ভাসমান পয়েন্ট সংখ্যাগুলি কী চ্যালেঞ্জটিতে সত্যিই কিছু যুক্ত করে? Conক্যমত্য কী তা নিশ্চিত নয় তবে তারা সম্ভবত বহু ভাষায় নির্ভুল ত্রুটি ঘটায়।
আর্নল্ড

আমি ভাসমান পয়েন্টগুলি হ্যাঁ করার জন্য ইচ্ছুক ছিলাম, হ্যাঁ
সোর্পজেম

14
ব্লেহ, সূচকগুলি? আমি মনে করি মানগুলির তালিকা ফিরিয়ে দেওয়া এটি একটি উত্তম চ্যালেঞ্জ হবে, যদিও আমি অনুমান করি যে উপগ্রহগুলিতে বারবার মানগুলি কীভাবে মোকাবেলা করা হয় তা নিয়ে একটি প্রশ্ন উত্থাপন করে।
xnor

উত্তর:


3

হুশ , 10 বাইট

ηλfo=¹ṁ⁰tṖ

1-ইন্ডেক্স। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

ηλfo=¹ṁ⁰tṖ  Inputs are a number n (explicit, accessed with ¹) and a list x (implicit).
η           Act on the incides of x
 λ          using this function:
         Ṗ   Take all subsets,
        t    remove the first one (the empty subset),
  f          and keep those that satisfy this:
      ṁ⁰      The sum of the corresponding elements of x
   o=¹        equals n.

এটি হুসের সর্বশেষতম সংযোজন ব্যবহার করে η(সূচকগুলিতে কাজ করে)। ধারণা যে ηএকটি উচ্চ অর্ডার ফাংশন লাগে α(এখানে ইনলাইন ল্যামডা ফাংশন) এবং একটি তালিকা x, এবং কলের αএর ইন্ডেক্স ফাংশন উপর x(যা উপরে প্রোগ্রামে) এবং সূচকের x। উদাহরণস্বরূপ, ṁ⁰সূচকগুলির একটি উপসেট গ্রহণ করে, মানচিত্রগুলি xতাদের উপর সূচক করে এবং ফলাফলগুলি যোগ করে।


9

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

বাক্য গঠন সিনট্যাক্সে ইনপুট নেয় (list)(target)

a=>s=>a.reduce((b,_,x)=>[...b,...b.map(y=>[...y,x])],[[]]).filter(b=>!b.reduce((p,i)=>p-a[i],s))

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

এটি দ্বিতীয় পরীক্ষার ক্ষেত্রে ব্যর্থ হবে যদি আইইইইই 754 যথার্থ ত্রুটির কারণে 4.8 এবং 10 অদলবদল হয় - 14.8 - 4.8 - 10 == 0তবে তবে 14.8 - 10 - 4.8 != 0। আমি মনে করি এটি ঠিক আছে , যদিও মেটাতে কোথাও আরও প্রাসঙ্গিক রেফারেন্স থাকতে পারে।

মন্তব্য

a => s =>                 // given an array a[] of length N and an integer s
  a.reduce((b, _, x) =>   // step #1: build the powerset of [0, 1, ..., N-1]
    [ ...b,               //   by repeatedly adding to the previous list b[]
      ...b                //   new arrays made of:
      .map(y =>           //     all previous entries stored in y[]
        [...y, x]         //     followed by the new index x
      )                   //   leading to:
    ],                    //   [[]] -> [[],[0]] -> [[],[0],[1],[0,1]] -> ...
    [[]]                  //   we start with a list containing an empty array
  )                       // end of reduce()
  .filter(b =>            // step #2: filter the powerset
    !b.reduce((p, i) =>   //   keeping only entries b
      p - a[i],           //     for which sum(a[i] for i in b)
      s                   //     is equal to s
    )                     //   end of reduce()
  )                       // end of filter()

7
একজন নয় দু'জন reduce? আমি এটি upvote করতে হবে।
নীল

1
@ নীল কম পরিচিত "হ্রাসকৃত মানচিত্র"
লর্ড ফারকোয়াড


7

আর , 85 84 বাইট

function(l,k){N=combn
o={}
for(i in I<-1:sum(l|1))o=c(o,N(I,i,,F)[N(l,i,sum)==k])
o}

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

1-ইন্ডেক্স।

combnসাধারণত একটি ফেরত দেয় তবে এর পরিবর্তে matrixসেটিংস simplify=Fএকটি ফেরত listদেয়, যা আমাদের cসমস্ত ফলাফল একসাথে অনকেটনেট করার অনুমতি দেয় । combn(I,i,,F)সূচকগুলির সমস্ত সংমিশ্রণ প্রদান করে এবং সমানগুলি N(l,i,sum)==kনির্ধারণ করতে আমরা সেই তালিকাতে সূচি হিসাবে নিই k


7

জে , 32 31 বাইট

(=1#.t#])<@I.@#t=.1-[:i.&.#.1"0

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

                  1-[:i.&.#.1"0         Make a list of all masks
                                        for the input list. We flip the bits
                                        to turn the unnecessary (0...0)         
                                        into (1...1) that would be missing.
                                        Define it as t.

(=1#.t#])                               Apply the masks, sum and
                                        compare with the target

         <@I.@#                         Turn the matching masks into 
                                        lists of indices

আমি একটি সুনির্দিষ্ট সংজ্ঞা কম্পোজিশনের সব দেওয়া সাহায্য করবে মত মনে, কিন্তু দুর্ভাগ্যবশত আমি শুধুমাত্র একই দৈর্ঘ্য করেছেন: 4 :'<@I.t#~x=1#.y#~t=.#:}.i.2^#y'এটি অনলাইন চেষ্টা করুন!
কোলে

5

জাপট , 14 বাইট

m, à f_x!gU ¥V

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

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

m, à f_x!gU ¥V   Implicit: U = input array, V = target sum
m,               Turn U into a range [0, 1, ..., U.length - 1].
   à             Generate all combinations of this range.
     f_          Filter to only the combinations where
       x           the sum of
        !gU        the items at these indices in U
            ¥V     equals the target sum.
                 Implicit: output result of last expression

সাথে দুর্দান্ত কৌশল m,। আমি Êo à k@VnXx@gXএকই বাইট গণনা ছিল।
শেগি


4

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

x#t=[i|i<-tail$concat<$>mapM(\z->[[],[z]])[0..length x-1],t==sum[x!!k|k<-i]]

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


[1, 2, -1, 5]#0 --> [[],[0,2]]খালি খালি তালিকার একটি সেট প্রয়োজন।
ফ্রাউনফ্রোগ

টুইটারে সংশোধন করা হয়েছে।
ক্রিশ্চিয়ান লুপাস্কু

4

জেলি , 11 বাইট

ị³S=
JŒPçÐf

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

1-ইন্ডেক্স। 4 বাইটগুলি কেবলমাত্র উপাদানগুলির পরিবর্তে সূচকগুলি ফেরত দেওয়ার জন্য ব্যয় করেছে।

-1 বাইট ইউজারকে ধন্যবাদ 202729
-1 বাইট ধন্যবাদ জোনাথন অ্যালানকে



@ ব্যবহারকারী 202729 দুর্দান্ত, ধন্যবাদ!
হাইপারনিউটারিনো

1
-1 বাইট: দ্য অপ্রয়োজনীয় যদি আপনি ব্যবহার করেন çবদলে Ç
জোনাথন অ্যালান

জনাথন অ্যালান
হাইপারনিউটারিনো


2

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

lambda a,t:[[e for e,_ in x]for r in range(len(a))for x in combinations(list(enumerate(a)),r+1)if sum(y for _,y in x)==t]
from itertools import*

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

0-ইন্ডেক্স। 44 বাইটগুলি কেবলমাত্র উপাদানগুলির পরিবর্তে সূচকগুলি ফেরত দেওয়ার জন্য ব্যয় করেছে।


2

ব্র্যাচল্যাগ , 18 15 বাইট

hiᶠ⊇Shᵐ+~t?∧Stᵐ

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

-3 বাইট কারণ এটি এখন জেনারেটর হিসাবে কাজ করে(সম্ভবত আরও বেশি গল্ফ করা সম্ভব, তবে সূচকগুলি ব্যবহারের প্রয়োজনীয়তার জন্য কাজ করা জটিলতর))

    S              The variable S
   ⊇               is a sublist of
  ᶠ                the list of all
 i                 pairs [element, index] from
h                  the first element of
                   the input;
     hᵐ            the first elements of each pair
       +           add up to
        ~t         the last element of
          ?        the input
           ∧       which isn't necessarily
            S      S,
             tᵐ    from which the last elements of each pair
                   are output.

hiᶠ⊇z+ʰXh~t?∧Xtএকই দৈর্ঘ্য আসে।
নিরবিচ্ছিন্ন স্ট্রিং


1

এপিএল (এনএআরএস), ৪৯ টি চর, ৯৮ বাইট

{∨/b←⍺=+/¨{∊⍵⊂w}¨n←{⍵⊤⍨k⍴2}¨⍳¯1+2*k←≢w←⍵:⍸¨b/n⋄⍬}

1-ইন্ডেক্স; পরীক্ষা:

  f←{∨/b←⍺=+/¨{∊⍵⊂w}¨n←{⍵⊤⍨k⍴2}¨⍳¯1+2*k←≢w←⍵:⍸¨b/n⋄⍬}
  ⎕fmt 8 f 1 2 1 5
┌2──────────────┐
│┌3────┐ ┌3────┐│
││2 3 4│ │1 2 4││
│└~────┘ └~────┘2
└∊──────────────┘
  ⎕fmt   14.8  f  4.8 9.5 2.7 11.12 10
┌1────┐
│┌2──┐│
││1 5││
│└~──┘2
└∊────┘
  ⎕fmt 17 f 7, 8, 9, ¯10, 20, 27
┌3──────────────────┐
│┌2──┐ ┌2──┐ ┌3────┐│
││4 6│ │2 3│ │1 4 5││
│└~──┘ └~──┘ └~────┘2
└∊──────────────────┘
  ⎕fmt 7 f 1 2 3
┌0┐
│0│
└~┘

মন্তব্য:

{∨/b←⍺=+/¨{∊⍵⊂w}¨n←{⍵⊤⍨k⍴2}¨⍳¯1+2*k←≢w←⍵:⍸¨b/n⋄⍬}
                             ⍳¯1+2*k←≢w←⍵         copy ⍵ in w, len(⍵) in k, return 1..2^(k-1) 
                 n←{⍵⊤⍨k⍴2}¨                     traslate in binary each element of  1..2^(k-1) and assign the result to n
          {∊⍵⊂w}¨                                for each binary element of n return the elemets of ⍵ in the place where there are the 1s
    b←⍺=+/¨                                       sum them and see if the sum is ⍺, that binary array saved in b
  ∨/                                     :⍸¨b/n   if or/b, get all the elements of n that are 1s for array b, and calculate each all indexs
                                               ⋄⍬ else return Zilde as void set

0

পাইথ, 11 বাইট

fqvzs@LQTyU

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

fqvzs@LQTyUQ   Implicit: Q=input 1 (list of numbers), z=input 2 (target value, as string)
               Trailing Q inferred
          UQ   Generate range [0-<length of Q>)
         y     Powerset of the above
f              Keep elements of the above, as T, when the following is truthy:
      L T        Map elements of T...
     @ Q         ... to the indicies in Q
    s            Take the sum
 q               Is the above equal to...
  vz             z as an integer
               Implicit print of the remaining results
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.