অঙ্কের সেটগুলি সন্ধান করুন


15

আমি এই সাইটটি পড়া উপভোগ করেছি; এটি আমার প্রথম প্রশ্ন। সম্পাদনা স্বাগত।

প্রদত্ত ধনাত্মক পূর্ণসংখ্যা এন এবং মি , সব আদেশ পার্টিশন গনা মি ঠিক মধ্যে এন অংশের ধনাত্মক পূর্ণসংখ্যা অংশ, এবং মুদ্রণ তাদের কমা এবং নতুন লাইন দ্বারা সীমায়িত। যে কোনও অর্ডার ঠিক আছে তবে প্রতিটি পার্টিশন অবশ্যই একবারে উপস্থিত হবে।

উদাহরণস্বরূপ, এম = 6 এবং এন = 2 দেওয়া, সম্ভাব্য পার্টিশনগুলি হ'ল ধনাত্মক পূর্ণসংখ্যার জোড় যা 6 এর সমষ্টি:

1,5
2,4
3,3
4,2
5,1

নোট করুন যে [1,5] এবং [5,1] হ'ল আলাদা অর্ডার করা পার্টিশন। আউটপুট হ'ল aboveচ্ছিক ট্রেলিং নিউলাইন সহ উপরের বিন্যাসে ঠিক হওয়া উচিত। (সম্পাদনা: পার্টিশনের সঠিক ক্রমটি কোনও ব্যাপার নয়)। ইনপুট / আউটপুট মানক কোড-গল্ফ I / O এর মাধ্যমে ।

মি = 7, এন = 3 এর জন্য আরেকটি উদাহরণ আউটপুট:

1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1

1 সপ্তাহের পরে বাইটের মধ্যে সবচেয়ে ছোট কোড।

আবার, প্রয়োজনে সম্পাদনা করুন।

সংযোজন:

@ টিমিডি জিজ্ঞাসা করেছিল যে প্রোগ্রামটি কোন আকারের পূর্ণসংখ্যার ইনপুট সমর্থন করে। উদাহরণগুলির বাইরে কোনও শক্ত নূন্যতম নেই; প্রকৃতপক্ষে, আউটপুট আকার তাত্ক্ষণিকভাবে বৃদ্ধি পায়, মোটামুটি মডেল: লাইন = ই ^ (0.6282 এন - 1.8273) দ্বারা।

n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432

উত্তরের কি ইচ্ছামত বড় পূর্ণসংখ্যার সমর্থন করা প্রয়োজন, বা 2 ^ 31-1 এর মতো যুক্তিসঙ্গত উপরের আবদ্ধটি উপযুক্ত?
অ্যাডমবর্কবর্ক

4
"সেট" শব্দটি বিভ্রান্তিকর কারণ আদেশের বিষয়টি গুরুত্বপূর্ণ। আমি মনে করি আপনি যে শব্দটির সন্ধান করছেন সেটি অর্ডার পার্টিশনযুক্ত।
xnor

2
যদিও এটি পরিবর্তন করার প্রয়োজন নেই তবে আমাদের কাছে সাধারণত এটির চেয়ে কম আউটপুট ফর্ম্যাট থাকে।
lirtosiast

আমি আপনার শব্দ পরিবর্তন করেছি ফাংশন আর্গুমেন্ট, প্রম্পটগুলি এবং অন্যান্য I / O পদ্ধতিগুলির মাধ্যমে যা আমরা সাধারণত গ্রহণযোগ্য বলে বিবেচনা করি through
লিরটোসিয়াসট

@TimmyD, আউটপুট আকার বৃদ্ধি বরং explosively যাতে এটা চেষ্টা করতে ব্যবহারিক নয় মিটার এবং এন গত কয়েকশ, ঘাঁটান 2 ^ 31-1।
কুনিকুলাস

উত্তর:


7

পাইথ, 14 বাইট

V^SQEIqsNQj\,N

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

V^SQEIqsNQj\,N   implicit: Q = first input number
  SQ             create the list [1, 2, ..., Q]
    E            read another number
 ^               cartesian product of the list
                 this creates all tuples of length E using the numbers in SQ
V                for each N in ^:
     IqsNQ          if sum(N) == Q:
          j\,N         join N by "," and print

এছাড়াও 14 বাইট, ভিন্ন পদ্ধতি: jjL\,fqsTQ^SQE
পুর্কাকুডারী

6

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

def f(n,m,s=''):[f(i,m-1,',%d'%(n-i)+s)for i in range(n)];m|n or print(s[1:])

একটি পুনরাবৃত্ত ফাংশন যা প্রতিটি আউটপুট স্ট্রিং তৈরি করে এবং প্রিন্ট করে। সংশ্লিষ্ট সম্ভাব্য হ্রাসকৃত যোগফল n, এবং একটি কম সংখ্যক যোগফল এবং সেই সংখ্যার সাথে mএকটি স্ট্রিং উপসর্গ sসহ সমাধান সন্ধানের জন্য প্রতিটি সম্ভাব্য প্রথম সংখ্যা চেষ্টা করে । যদি প্রয়োজনীয় যোগফল এবং পদগুলির সংখ্যা উভয়ই সমান হয় তবে আমরা চিহ্নটি আঘাত করেছি, তাই আমরা প্রাথমিক কমাটি কেটে ফল মুদ্রণ করব। এটি m|n0 (ফ্যালসি) হিসাবে চেক করা হয়েছে।

পাইথন 2-তে 79 টি অক্ষর:

def f(n,m,s=''):
 if m|n==0:print s[1:]
 for i in range(n):f(i,m-1,','+`n-i`+s)

4

সিজেম, 22 বাইট

q~:I,:)m*{:+I=},',f*N*

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

q~                      Read and evaluate all input. Pushes n and m.
  :I                    Save m in I.
    ,:)                 Turn it into [1 ... I].
       m*               Push all vectors of {1 ... I}^n.
         {    },        Filter; for each vector:
          :+I=            Check if the sum of its elements equals I.
                        Keep the vector if it does.
                ',f*    Join all vectors, separating by commas.
                    N*  Join the array of vectors, separating by linefeeds.

3

পাইথ, 20 18 বাইট

-2 বাইট @ ডেনিস দ্বারা!

jjL\,fqQlT{s.pM./E

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

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


3

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

n#m=unlines[init$tail$show x|x<-sequence$replicate n[1..m],sum x==m]

ব্যবহারের উদাহরণ:

*Main> putStr $ 2#6
1,5
2,4
3,3
4,2
5,1

এটি কীভাবে কাজ করে: sequence $ replicate n listআঁকানো nফর্মের সমস্ত সংমিশ্রণ তৈরি করে list। আমরা সব ধরনের নেওয়া xএর [1..m]যেখানে sumসমান munlinesএবং init$tail$showপ্রয়োজনীয় আউটপুট ফর্ম্যাট উত্পাদন করে।


3

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

{↑1↓¨,/',',¨⍕¨↑⍺{⍵/⍨⍺=+/¨⍵},⍳⍵/⍺}

mবাম আর্গুমেন্ট nহিসাবে ডান আর্গুমেন্ট হিসাবে নেয় ।

প্রায় অর্ধেক ( {এবং এর মধ্যে ) প্রয়োজনীয় ফর্ম্যাটের জন্য।


2

গণিত, 65 বাইট

StringRiffle[Permutations/@#~IntegerPartitions~{#2},"
","
",","]&

IntegerPartitionsকাজটি করে বাকিটি কেবল টিপলগুলি অর্ডার করতে এবং ফলাফলটি ফর্ম্যাট করতে।


2

পাইথন 3, 112

from itertools import*
lambda m,n:'\n'.join(','.join(map(str,x))for x in product(range(m),repeat=n)if sum(x)==m)

আমি কিছুক্ষণের মধ্যে 1 টি লাইনার পরিচালনা করতে পারি নি। :)


1

পাইথন 2.7, 174 170 152 বাইট

চর্বি উত্তর। কমপক্ষে এটি পাঠযোগ্য :)

import sys,itertools
m=int(sys.argv[1])
for k in itertools.product(range(1,m),repeat=int(sys.argv[2])):
    if sum(k)==m:print str(k)[1:-1].replace(" ","")

আপনি কমা পরে >, পরে replaceএবং পরে স্থানগুলি সরাতে পারেন ।
অ্যালেক্স এ।

1

জুলিয়া, 105 বাইট

f(m,n)=for u=∪(reduce(vcat,map(i->collect(permutations(i)),partitions(m,n)))) println("$u"[2:end-1])end

এটি এমন একটি ফাংশন যা দুটি পূর্ণসংখ্যার যুক্তি পড়ে এবং ফলাফলটি একক ট্রেইলিং লাইনের সাথে STDOUT এ লিখে দেয়।

Ungolfed:

function f(m::Integer, n::Integer)
    # Get the integer partitions of m of length n
    p = partitions(m, n)

    # Construct an array of all permutations
    c = reduce(vcat, map(i -> collect(permutations(i)), p))

    # Loop over the unique elements
    for u in unique(c)
        # Print the array representation with no brackets
        println("$u"[2:end-1])
    end
end

0

পার্ল 6 , 54 বাইট

যদি আউটপুট তালিকার একটি তালিকা হতে পারে

{[X] (1..$^m)xx$^n .grep: $m==*.sum} # 36 bytes
my &code = {[X] (1..$^m)xx$^n .grep: $m==*.sum}
say .join(',') for code 7,3;

বর্তমানে এটি যেভাবে বলা হচ্ছে তা আমাকে joinল্যাম্বডায় একটি যুক্ত করতে হবে ।

{say .join(',')for [X] (1..$^m)xx$^n .grep: $m==*.sum} # 54 bytes
{...}( 7,3 );
1,1,5
1,2,4
1,3,3
1,4,2
1,5,1
2,1,4
2,2,3
2,3,2
2,4,1
3,1,3
3,2,2
3,3,1
4,1,2
4,2,1
5,1,1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.