এন-স্বতন্ত্রভাবে অ্যাডিটিভ সেট


10

মনে রাখবেন যে কোনও সেট নকল ছাড়াই আনর্ডারড is

সংজ্ঞা একটি এন -uniquely যুত সেট এস যার দৈর্ঘ্য হল কে একটি সেট যেমন যে সব এন মধ্যে -length সাব-সেট নির্বাচন এস বিভিন্ন নম্বরে সমষ্টি। অন্য কথায়, এস এর সমস্ত এন- দৈর্ঘ্যের সাবসেটের যোগফলগুলি পৃথক।

উদ্দেশ্যN যেকোন যুক্তিসঙ্গত বিন্যাসে কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রামকে ইনপুট হিসাবে একটি অ্যারে এবং একটি সংখ্যা দেওয়া হয়েছে, সন্ধান করুন এবং প্রত্যাবর্তন করুন বা সত্যবাদী বা মিথ্যা মান নির্ধারণ করুন (মিথ্যাটির জন্য ত্রুটিযুক্ত করা ঠিক আছে) ইনপুটটি এন কিনা তা বোঝায় - অনন্যরূপে যুক্ত।

আপনি ধরে নিতে পারেন যে প্রতিটি উপাদান কেবল একবারে প্রদর্শিত হবে এবং প্রতিটি সংখ্যা আপনার ভাষার নেটিভ ডেটাটাইপের মধ্যে। যদি প্রয়োজন হয় তবে আপনি ধরে নিতে পারেন যে ইনপুটটি সাজানো হয়েছে। সর্বশেষে, আপনি এটি ধরে নিতে পারেন 0 < N <= K

উদাহরণ

আসুন সেটটি বিবেচনা করুন S = {1, 2, 3, 5}এবং N = 2। এখানে সমস্ত অনন্য জুটির সমস্ত পরিমাণ যোগ করা হয়েছে S(অনন্যদের জন্য একমাত্র আগ্রহের পরিমাণগুলি):

1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8

আমরা দেখতে পাচ্ছি যে আউটপুটে কোনও সদৃশ নেই, সুতরাং এস 2-অনন্যরূপে যুক্ত।


আসুন এখন সেট বিবেচনা করুন T = {12, 17, 44, 80, 82, 90}এবং N = 4। এখানে দৈর্ঘ্যের সম্ভাব্য পরিমাণগুলি রয়েছে:

12 + 17 + 44 + 80 = 153
12 + 17 + 44 + 82 = 155
12 + 17 + 44 + 90 = 163
12 + 17 + 80 + 82 = 191
12 + 17 + 80 + 90 = 199
12 + 17 + 82 + 90 = 201
12 + 44 + 80 + 82 = 218
12 + 44 + 80 + 90 = 226
12 + 44 + 82 + 90 = 228
12 + 80 + 82 + 90 = 264
17 + 44 + 80 + 82 = 223
17 + 44 + 80 + 90 = 231
17 + 44 + 82 + 90 = 233
17 + 80 + 82 + 90 = 269
44 + 80 + 82 + 90 = 296

এগুলি সমস্ত অনন্য এবং তাই টি 4-স্বতন্ত্রভাবে সংযোজক।

পরীক্ষার কেস

[members], N => output
[1, 4, 8], 1 => true
[1, 10, 42], 1 => true                ; all sets trivially satisfy N = 1
[1, 2, 3, 4], 3 => true
[1, 2, 3, 4, 5], 5 => true
[1, 2, 3, 5, 8], 3 => true
[1, 2, 3, 4, 5], 2 => false           ;  1 +  4       =  5 =        2 + 3
[-2, -1, 0, 1, 2], 3 => false         ; -2 + -1 + 2   = -1 =   -2 + 0 + 1
[1, 2, 3, 5, 8, 13], 3 => false       ;  1 +  2 + 13  = 16 =    3 + 5 + 8
[1, 2, 4, 8, 16, 32], 3 => true
[1, 2, 4, 8, 16, 32], 4 => true
[1, 2, 4, 8, 16, 32], 5 => true
[1, 2, 4, 8, 16, 32], 6 => true
[3, 4, 7, 9, 12, 16, 18], 6 => true
[3, 4, 7, 9, 12, 16, 18], 3 => false  ; 3 + 4 + 12 = 19 = 3 + 7 + 9

মানে N <= K?
নিল

@ নিল হ্যাঁ, আমি করি। দুঃখিত!
কনর ও'ব্রায়ান

একটি ত্রুটি কিছু হিসাবে গণনা করা হয় falsey?
flawr

@ ফ্লোয়ার শিওর, আমি এটি মেনে নেব
কনর ও'ব্রায়ান

উত্তর:


3

এমএটিএল , 7 বাইট

XN!sSdA

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

রিটার্নস true(হিসেবে প্রদর্শিত 1) অথবা false(হিসেবে প্রদর্শিত 0)।

XN   % Take array S and number N. Generate all combinations of elements from S 
     % taken N at a time. Gives a 2D array where each combination is a row
!    % Transpose. Each combination is now a column
s    % Sum of each column: gives a row array. If N=1 computes the sum of
     % the only row, and so gives a number
S    % Sort vector
d    % Array of consecutive differences. For a single number gives an empty array
A    % True if all elements of the input array are nonzero (for an empty array
     % it also gives true)

4

জেলি, 7 বাইট

œcS€ṢIP

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

সত্যের জন্য ধনাত্মক সংখ্যা এবং মিথ্যাটির জন্য শূন্য প্রদান করে।

œc       find combinations
  S€     sum each combination
    Ṣ    sort the sums
     I   find the difference between each pair of sums 
           iff any sums are the same, this returns a list containing 0
      P  product of the elements of the resulting list

3

মতলব, 78 বাইট

function n=f(s,n);p=perms(s);k=sum(unique(sort(p(:,1:n)),'rows')');unique(k)-k

এই ফাংশনটি সত্যের nজন্য একটি ইতিবাচক মান (আসলে ) প্রদান করে এবং একটি মিথ্যা উত্তর হিসাবে ত্রুটি প্রদান করে ( এই মন্তব্য অনুসারে বৈধ )

ব্যাখ্যা:

function n=f(s,n);
p=perms(s); %create all permutations of the set

k=sum(unique(sort(p(:,1:n)),'rows')');
                  %just take the first n entries of each permutation
             %sort those entries and
      %filter out all duplicates (we sorted as the order should NOT matter)
  %then sum each of those candidates

unique(k)-k
%if all those sums are distinct, unique(k) will have the same size 
% as k itself, and therefore we can subtract, otherwise it will throw 
% an error as we try to subtract vectors of different sizes

কেন এটি ত্রুটি করে?
কনর ও ব্রায়ান

1
আমি কেবল একটি ব্যাখ্যা যুক্ত করেছি। ত্রুটি শেষ পংক্তি থেকে আসে। আমাদের মধ্যে সদৃশ থাকলে এটি একটি ত্রুটি ঘটায় k। পিএস: মতলব সিনট্যাক্স হাইলাইট শেষ পর্যন্ত কাজ করে !!!
flawr

একই ফিরে আসার জন্য ভাল ধারণা n!
লুইস মেন্ডো

2

পাইথ, 8 বাইট

{IsM.cFQ

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

       Q   eval input (provided as a 2-element array)
    .cF    splat over combination
  sM       sum each combination
{I         is the result invariant under { (dedup/uniq)?

কী splatমানে?
কনর ও ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ একই জিনিস এর অর্থ প্রতিটি অন্যান্য ভাষায়: কোনও ফাংশনে আর্গুমেন্ট হিসাবে একটি অ্যারে ব্যবহার করুন।
ডুরকনব

ওহ, ঠিক আছে, আমি বোবা: পি ধন্যবাদ
কনার ও'ব্রায়ান

2
অন্য যে কোনও ভাষায় আসলে এই ফাংশনটি রয়েছে
flawr

2
আমি যে বাগটি শেষ করেছিলাম তা ঠিক করেছিলাম Q
isaacg

2

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

import Data.List
n#s=(==)=<<nub$[sum x|x<-subsequences s,length x==n]

ব্যবহারের উদাহরণ: 6 # [3,4,7,9,12,16,18]-> True

সংজ্ঞাটির প্রত্যক্ষ বাস্তবায়ন: দৈর্ঘ্য n এর সমস্ত উপসর্গের যোগফলের একটি তালিকা তৈরি করুন এবং এটি সদৃশ অপসারণের সাথে সমান কিনা তা পরীক্ষা করুন।


2

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

(a,n)=>a.map(m=>{for(i=n;i--;)s[i].map(k=>s[i+1].push(m+k))},s=[...Array(n+1)].map(_=>[]),s[0]=[0])&&new Set(s[n]).size==s[n].length

1 থেকে এন পর্যন্ত অ্যাডিটিভ তালিকা তৈরি করে এবং তারপরে স্বতন্ত্রতার জন্য সর্বশেষটি পরীক্ষা করে।


2

ব্র্যাচল্যাগ , 20 বাইট

:1f:+aLdL
[L:I]hs.lI

তালিকা এবং তারপর ইনপুট হিসাবে পূর্ণসংখ্যা, এবং কোন আউটপুট, যেমন সম্বলিত একটি তালিকা আশা run_from_atom(':{[L:I]hs.lI}f:+aLdL', [[1:2:3:5]:2]).

ব্যাখ্যা

  • প্রধান ভবিষ্যদ্বাণী

               Input = [A:I]
    :1f        Find all ordered subsets of A of length I
       :+aL    Apply summing to each element of that list of subsets. Call that L
           dL  True if L minus all duplicate elements is still L
    
  • ভবিষ্যদ্বাণী 1: একটি তালিকার নির্দিষ্ট দৈর্ঘ্যের সমস্ত অর্ডারযুক্ত সাবসেটগুলি সন্ধান করুন

    [L:I]      Input = [L:I]
         hs.   Unify Output with an ordered subset of L
            lI True if I is the length of Output
    

2

জুলিয়া, 46 41 বাইট

x\n=(t=map(sum,combinations(x,n)))==tt

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

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

এটি (পুনরায়) \অ্যারে / ইনট আর্গুমেন্টের জন্য বাইনারি অপারেটরকে সংজ্ঞায়িত করে ।

combinations(x,n)x এর ঠিক n বিভিন্ন উপাদানগুলির সমস্ত অ্যারে প্রদান করে । আমরা এই অ্যারেগুলিতে মানচিত্র তৈরি করি এবং ফলাফলটি টিতে সংরক্ষণ করিsum

t∪tসঞ্চালিত অ্যারের সেট ইউনিয়ন টন নিজেই সঙ্গে, যা আর মত কাজ করেunique এই ক্ষেত্রে ।

পরিশেষে, আমরা তুলনা টি deduplicated সঙ্গে টি , ফিরে trueযদি এবং কেবল যদি সব অঙ্কের ভিন্ন।


2

পাইথন, 89 বাইট

from itertools import*
lambda s,n,c=combinations:all(x^y for x,y in c(map(sum,c(s,n)),2))

আইডিয়নে এটি পরীক্ষা করুন ।

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

c(s,n)s এর সমস্ত এন- সংমিশ্রণগুলি তালিকাভুক্ত করে , অর্থাত্, s এর বিভিন্ন n উপাদানের সমস্ত তালিকা । আমরা মানচিত্র ফলে তালিকা ধরে, এইভাবে দৈর্ঘ্যের sublists সব সম্ভব অঙ্কের কম্পিউটিং এনsum

ওয়ার্ডগুলির পরে, আমরা c(...,2)ফলাফলের অঙ্কগুলির সমস্ত জোড়া তৈরি করতে ব্যবহার করি । কোন দুটি অঙ্কের তাহলে x এবং Y সমান হয়, x^yফিরে আসবে 0 এবং allফিরে আসবে মিথ্যা । বিপরীতভাবে, যদি সব অঙ্কের অনন্য, x^yসবসময় truthy হবে, এবং anyফিরে আসবে সত্য


1

জে, 34 বাইট

load'stats'
[:*/@~:[:+/"1(comb#){]

সোজা-ফরোয়ার্ড পদ্ধতির জন্য, কেবলমাত্র ফাংশনের statsজন্য অ্যাড-অন প্রয়োজন comb। রিটার্নস 0মিথ্যা এবং 1সত্য জন্য।

combবিল্টিন ব্যবহারের বিকল্প হিসাবে , একটি 38 বাইট সমাধান রয়েছে যা পাওয়ার সেট উত্পন্ন করে এবং n এর আকারের সাবসেটগুলি বেছে নেয় ।

[:*/@~:(>@{[:(</.~+/"1)2#:@i.@^#)+/@#]

ব্যবহার

   f =: [:*/@~:[:+/"1(comb#){]
   2 f 1 2 3 5
1
   4 f 12 17 44 80 82 90
1
   3 f _2 _1 0 1 2
0
   6 f 3 4 7 9 12 16 18
1
   3 f 3 4 7 9 12 16 18
0

বাহ, statsমডিউল সম্পর্কে জানতাম না । খুব সুন্দর!
কনর ও'ব্রায়ান

আমি কেবল এটি সম্পর্কেও জানতে পেরেছি, আমি জে-তে অ্যাড-অনগুলিতে সত্যিকার অর্থে খুব বেশি কিছু পাইনি I আমি যদি আরও সাহসী হয়ে থাকি তবে আমি গ্রাফিকগুলি অ্যাড-অনগুলি চেষ্টা করতাম।
মাইল

0

রুবি , 50 বাইট

->s,n{!s.combination(n).map{|c|c.inject :+}.uniq!}

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

যদি সমস্ত উপাদান অনন্য হয়, uniq! ফেরত দেয় nil!(...).uniq!একটি ভাল স্বতন্ত্রতা পরীক্ষা জন্য হিসাবে হিসাবে ফলাফল, নেভিগেশন ।

এই প্রশ্ন পোস্ট করা হয়েছিল রুবি ২.৪.০-পূর্বরূপ ১ এর কয়েক সপ্তাহ আগে , যা চালু হয়েছিল Enumerable#sum, যা এখানে 9 বাইট সংরক্ষণ করবে।

41 বাইট (রুবি 2.4+)

->s,n{!s.combination(n).map(&:sum).uniq!}

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


0

আর , 41 বাইট

function(s,n)max(table(combn(s,n,sum)))<2

এর সমস্ত এন-দৈর্ঘ্যের সাবসেটগুলি যোগ করে এবং এই পরিমাণগুলির একটি ক্রমবর্ধমান সারণীর সমস্ত মান 1 হয় কিনা তা যাচাই করে নিন (সমস্ত পরিমাণগুলি অনন্য))

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

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