প্রতিস্থাপনের সাথে সংমিশ্রণগুলি তৈরি করুন


10

এন উপাদানগুলির একটি সেট থেকে আকার কে এর প্রতিস্থাপন (বা পুনরাবৃত্তির সাথে সংমিশ্রণ) সহ সমস্ত সংমিশ্রণের তালিকা তৈরি করুন ।

প্রতিস্থাপনের সাথে সংমিশ্রণটি হল একটি আনর্ডারড মাল্টিসিট যা এতে প্রতিটি উপাদানও এন উপাদানগুলির সংগে থাকে। মনে রাখবেন যে:

  • এটি অনিয়ন্ত্রিত। সুতরাং ভিন্ন অর্ডার সহ পূর্ববর্তী মুদ্রিত সেটটি আবার মুদ্রণ করা উচিত নয়।
  • এটি একটি মাল্টিসেট। একই উপাদানটি একাধিকবার প্রদর্শিত হতে পারে (তবে প্রয়োজন হয় না)। প্রতিস্থাপন এবং একটি সাধারণ সংমিশ্রণের মধ্যে এটিই একমাত্র পার্থক্য।
  • সেটে ঠিক K উপাদান থাকা উচিত ।

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

ইনপুটটি হয় এন এবং কে হওয়া উচিত , যেখানে উপাদানগুলি প্রথম এন পজিটিভ বা অ-নেতিবাচক পূর্ণসংখ্যা হয়, বা এন উপাদানগুলি এবং কে , যেখানে আপনি এন উপাদানগুলি একে অপরের থেকে পৃথক বলে ধরে নিতে পারেন ।

প্রদত্ত সেট থেকে আকার কে দিয়ে প্রতিস্থাপনের সাথে আউটপুটটি সমস্ত সংমিশ্রনের তালিকা হওয়া উচিত । আপনি যে কোনও ক্রমে সেগুলি এবং সেগুলির প্রতিটিতে উপাদান মুদ্রণ করতে পারেন can

আপনি প্রতিস্থাপনের সাথে বিল্টিন উত্পাদনকারী সংমিশ্রণগুলি ব্যবহার করতে পারবেন না। তবে আপনি বিল্টিনগুলি সাধারণ সংমিশ্রণ, ক্রমবিন্যাস, টিপলস ইত্যাদি তৈরি করতে ব্যবহার করতে পারেন

এটি কোড-গল্ফ, সংক্ষিপ্ততম কোড জয়।

উদাহরণ

Input: 4 2
Output: [0 0] [0 1] [0 2] [0 3] [1 1] [1 2] [1 3] [2 2] [2 3] [3 3]

উত্তর:


8

জেলি, 4 বাইট

2 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

ṗṢ€Q

ইনপুট হয় nএবং kআদেশ হিসাবে কমান্ড-লাইন আর্গুমেন্ট হিসাবে। উপাদান ব্যবহার 1করার জন্য n

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

ব্যাখ্যা

ṗ     # Get k-th Cartesion power of n.
 Ṣ€   # Sort each tuple.
   Q  # Remove duplicates.

8

সিজেএম (8 বাইট)

{m*:$_&}

অনলাইন ডেমো

ব্যবচ্ছেদ

{    e# Declare block (anonymous function); parameters are n k
  m* e# Cartesian product, which implicitly lifts n to [0 1 ... n-1]
  :$ e# Sort each element of the Cartesian product, to give them canonical forms
  _& e# Deduplicate
}

3

গণিত, 31 29 বাইট

2 বাইট সংরক্ষণের জন্য এ সিমন্সকে ধন্যবাদ।

{}⋃Sort/@Range@#~Tuples~#2&

একটি নামবিহীন ফাংশন সেই ক্রমে পূর্ণসংখ্যার যুক্তিগুলি গ্রহণ করে nএবং kতালিকার একটি তালিকা ফেরত দেয় returning উপাদান হতে হবে 1করার n। পিটারের সিজেএম উত্তর হিসাবে একই কাজ করে।


@ jimmy23013 একজনের সম্পর্কে আমি অবগত নই।
মার্টিন ইন্ডার

আমার মনে হয় আপনি দুটি বাইট সংরক্ষণ করতে পারবেন{}∪Sort/@Range@#~Tuples~#2&
একটি সিমন্স

@ এশ্মোনস ভাল ধারণা, আপনাকে ধন্যবাদ!
মার্টিন এন্ডার

3

MATL , 11 বাইট

( কার্টেসিয়ান শক্তির উপর ভিত্তি করে একটি 9-বাইট সমাধান রয়েছে , তবে পিটার টেলর ইতিমধ্যে তা করেছে Let's আসুন আমরা কিছু আলাদা চেষ্টা করি)।

প্রতিস্থাপনের সাথে সংমিশ্রণগুলি নিম্নরূপ প্রতিস্থাপন ছাড়াই সংমিশ্রণে হ্রাস করা যেতে পারে। আমরা n Cr kউদাহরণস্বরূপ n=3, এটি চাই k=2:

0 0
0 1
0 2
1 1
1 2
2 2

আমরা গণনা করতে পারি n+k-1 C k:

0 1
0 2
0 3
1 2
1 3
2 3

এবং তারপরে 0 1 ... k-1প্রতিটি সারি থেকে বিয়োগ :

+q:2GXn2G:-

ব্যাখ্যা:

+q     % take two inputs n, k and compute n+k-1
:      % range [1,2...,n+k-1]
2G     % push second input, k
Xn     % combinations without replacement
2G:    % range [1,2,...,k]
-      % subtract with broadcast. Display

কোডটি ভাষা / সংকলকের 13.1.0 প্রকাশে কাজ করে যা চ্যালেঞ্জের চেয়ে আগের is

আপনি এটি অনলাইন চেষ্টা করতে পারেন ! নোট করুন যে অনলাইন সংকলকটি 14.0.0 প্রকাশের জন্য আপডেট করা হয়েছে, সুতরাং এতে Xnপরিবর্তন করা দরকার XN


3

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 71 বাইট

f=(n,k)=>k?[for(m of Array(n).keys())for(a of f(m+1,k-1))[...a,m]]:[[]]

আমি keys()একবারের জন্য ব্যবহার করতে হবে ।


2

রুবি, 56 55 বাইট

দুটি সমাধান, আশ্চর্যজনকভাবে উভয় একই দৈর্ঘ্য:

->n,k{[*1..n].repeated_permutation(k).map(&:sort).uniq}
->n,k{(a=[*1..n]).product(*[a]*(k-1)).map(&:sort).uniq}

আরে, আপনি বলেছিলেন যে আমরা পারমিটেশন বিল্টিন ব্যবহার করতে পারি ...

এই কেবল সব পুনরাবৃত্তি উত্পন্ন একাধিক বিন্যাসন (দ্বিতীয়টি পুনরায় কার্তেসিয়ান পণ্য উত্পন্ন করে) এবং যেগুলি সাজানো ক্রমে নেই তা সরিয়ে দেয়।

0...n-> দিয়ে বাইট সংরক্ষণের জন্য মার্টিনকে ধন্যবাদ 1..n!


1

পাইথ, 7 বাইট

{SM^UQE

পিটারের উত্তরের মতো একই অ্যালগরিদম ব্যবহার করে।

    UQ   range(input())
      E  input()
   ^     repeated Cartesian product of ^^, ^ times
 SM      map(sort)
{        uniq

1

পাইথন, 63 বাইট

f=lambda n,k:n*k and[l+[n]for l in f(n,k-1)]+f(n-1,k)or[[]][k:]

একটি পুনরাবৃত্তি পদ্ধতি। একাধিক kউপাদানকে মাল্টিসেট তৈরি 1করতে n, আমরা যে কোনওটিকে বেছে নিই:

  • আরেকটি দৃষ্টান্ত অন্তর্ভুক্ত করুন n, এবং এটি একটি multiset করতে থাকে k-1থেকে উপাদানগুলি 1থেকেn
  • আরেকটি দৃষ্টান্ত অন্তর্ভুক্ত করবেন না n, এবং এটি একটি multiset করতে থাকে kকরার থেকে উপাদানগুলি 1থেকেn-1

হয় kবা nপৌঁছে গেলে আমরা সমাপ্তি করি 0এবং এটি kপৌঁছে গেলে 0আমরা খালি তালিকার একটি বেস কেস দিই। যদি তা না হয় তবে আমাদের কাছে ভুল সংখ্যা রয়েছে এবং তাই খালি তালিকা দিন give


1

পাইথন 3, 81 80

পুনরাবৃত্তির সমাধান:

t=lambda n,k,b=0:[[]]if k<=0 else [[i]+l for i in range(b,n)for l in t(n,k-1,i)]

ফাংশন থেকে শুরু করে রেঞ্জের t(n, k, b)সমস্ত- kসংখ্যক মাল্টি-সাবসেটের তালিকা প্রদান bকরে n। এই তালিকাটি খালি যদি k <= 0। অন্যথায়, আমরা মাল্টি-সাবসেটের ক্ষুদ্রতম উপাদানের উপর ভিত্তি করে সমস্যাটি ভেঙে ফেলি, যা আমরা দ্বারা চিহ্নিত করি i

প্রত্যেকের জন্য iথেকে সীমার মধ্যে bথেকে n, আমরা সব উৎপন্ন kক্ষুদ্রতম উপাদান সঙ্গে -multi-সাব-সেট নির্বাচন iদিয়ে শুরু দ্বারা [i]এবং তারপর প্রতিটি সংযোজন (k-1)থেকে পরিসীমা -multi-উপসেট iথেকে n, যা আমরা যাও recursively ডাকে প্রাপ্ত t(n, k-1, i)


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! এটি একটি সুন্দর প্রথম উত্তর। আপনি কোডটি কীভাবে কাজ করে তার একটি ব্যাখ্যা সরবরাহ করতে পারেন?
অ্যালেক্স এ।

দুর্দান্ত লাগছে। চমৎকার সমাধান!
অ্যালেক্স এ।

1

ডায়ালগ এপিএল , 22 বাইট

{∪{⍵[⍋⍵]}¨↓⍉⍺⊥⍣¯1⍳⍺*⍵}

প্রয়োজন ⎕IO←0 , যা অনেকগুলি এপিএল সিস্টেমে ডিফল্ট। বাম আর্গুমেন্ট হিসাবে কে গ্রহণ করে, n টিকে আর্গুমেন্ট হিসাবে।

⍳⍺*⍵0 1 2 ... kⁿ
⍺⊥⍣¯1বেস কে
ট্রান্সপোজ রূপান্তর
করুন ম্যাট্রিক্সকে তালিকাগুলির তালিকায় পরিণত করুন
{⍵[⍋⍵]}¨প্রতিটি সাজান ...
অনন্য


1

জে, 18 বাইট

[:~.#~<@/:~@#:i.@^

@ অ্যাডামের সমাধানগুলিতে অনুরূপ পদ্ধতির ব্যবহার ।

{24 বাইটের জন্য কার্টেসিয়ান পণ্য ব্যবহার করে আরেকটি পদ্ধতি । kএলএইচএস এবং nআরএইচএসে লাগে ।

~.@:(/:~&.>)@,@{@(#<@i.)

ব্যবহার

   f =: [:~.#~<@/:~@#:i.@^
   4 f 2
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│0 0│0 1│0 2│0 3│1 1│1 2│1 3│2 2│2 3│3 3│
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘

ব্যাখ্যা

[:~.#~<@/:~@#:i.@^ Input: n on LHS and k on RHS
                 ^ Compute n^k
              i.@  Create a range [0, 1, ... n^k-1]
    #~             Create k copies on n
            #:     On each value in the range above, convert each digit to base-n
                   and take the last k digits of it
        /:~@       For each array of digits, sort it in ascending order
      <@           Box each array of digits
[:~.               Take the distinct values in the array of boxes and return it

1

Clojure, 94 বাইট

(defn f[k n](if(= 1 k)(for[i(range n)][i])(sort(set(for[i(f(dec k)n)j(range n)](conj i j))))))

পরিবর্তিত প্যারামিটার ক্রম নোট করুন: 1 ম হয় kএবং 2 য় হয় n। এটি 1 বাইট ইন বাঁচিয়েছে (f(dec k)n)


0

গণিত, 36 বাইট

{##}&~Array~Table@##~Flatten~(#2-1)&

দয়া করে আমাকে বলুন কোন [] গুলি ব্যবহার করার জন্য একটি 1/6 বোনাস আছে ... অথবা ## এর অনেকগুলি ব্যবহারের জন্য?

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