সংক্ষিপ্ত শক্তি সেট বাস্তবায়ন


22

সমস্যা সংজ্ঞা

প্রদত্ত সেটের পাওয়ারসেটটি মুদ্রণ করুন। উদাহরণ স্বরূপ:

[1, 2, 3] => [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

প্রতিটি উপাদান আলাদা লাইনে মুদ্রিত করতে হয়, সুতরাং উপরের উদাহরণটি মুদ্রিত হবে:

[]
[1]
[2]
...
[1, 2, 3]

উদাহরণ কোড (ডি তে পাইথনের উদাহরণ এখানে ):

import std.stdio;

string[][] powerset(string[] set) {
    if (set.length == 1) {
        return [set, []];
    }

    string[][] ret;
    foreach (item; powerset(set[1 .. $])) {
        ret ~= set[0]~item;
        ret ~= item;
    }

    return ret;
}

void main(string[] argv) {
    foreach (set; powerset(argv[1 .. $]))
        writeln(set);
}

ইনপুট

উপাদানগুলি আর্গুমেন্ট হিসাবে পাস করা হবে। উদাহরণস্বরূপ, উপরে প্রদত্ত উদাহরণটি এমন একটি প্রোগ্রামে প্রেরণ করা হবে powerset:

powerset 1 2 3

যুক্তিগুলি বর্ণমালা হবে।

বিধি

  1. আইও ছাড়া কোনও লাইব্রেরি নেই
  2. আউটপুট অর্ডার করতে হবে না
  3. পাওয়ারসেট সংরক্ষণ করতে হবে না, কেবল মুদ্রিত হবে
  4. সেটে থাকা উপাদানগুলিকে অবশ্যই সীমিত করতে হবে (যেমন 1,2,3, [1,2,3]এবং ['1','2','3']গ্রহণযোগ্য তবে তবে)123 তা নয়)
    • চলমান ডিলিমিটারগুলি ভাল (উদাঃ 1,2,3, == 1,2,3)
  5. বাইট সংখ্যা অনুসারে সেরা নির্ধারিত হয়

সেরা জমাটি প্রথম জমা দেওয়ার 10 দিনেরও কম পরে সিদ্ধান্ত নেওয়া হবে।




2
যদি কেবল এই চ্যালেঞ্জটি ডিফল্টগুলিকে মঞ্জুর করার জন্য আপডেট করা হয় যেমন ফিরে আসা এবং ফাংশনগুলি। পাইথন 54 বাইট হতে হবে: lambda L:reduce(lambda r,x:r+[s+[x]for s in r],L,[[]])
mbomb007

আমি কেবল মুদ্রণে একমত নই ... কেন ডেটা, ভেরিয়েবলটি রাখার অনুমতি দিচ্ছি না ... কেন কলামে মুদ্রণ এবং সারিতে নয়?
রোজলুপি

উত্তর:


15

গণিত 16

কোড

Subsets স্থানীয় গণিত।

Column@Subsets@s

কোডটি (কলাম ব্যতীত) ওল্ফ্রামআল্ফায় যাচাই করা যেতে পারে । (আমাকে পরিবর্তে বন্ধনী ব্যবহার করতে হয়েছিল @; তারা একই জিনিস বোঝাতে চেয়েছিল।

ব্যবহার

s={1,2,3}
Column@Subsets@s

আউটপুট


এই পদ্ধতিতে (55 টি অক্ষর) @ w0lf দ্বারা প্রস্তাবিত পদ্ধতির ব্যবহার করে।

s #&/@Tuples[{0,1},Length@s]/.{0:>Sequence[]}//Column

ভাঙ্গন

Tuples জেনারেট করেন, গঠিত 0এবং 1'দৈর্ঘ্যের গুলিLength[s]

Tuples[{0, 1}, Length@s]

{{0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {1, 0, 0}, {1, 0, 1}, { 1, 1, 0}, {1, 1, 1}

প্রতিটি টিপল দিয়ে মূল তালিকা (ভেক্টর) গুণ করুন:

s # & /@ Tuples[{0, 1}, Length@s]

{{0, 0, 0}, {0, 0, 3}, {0, 2, 0}, {0, 2, 3}, {1, 0, 0}, {1, 0, 3}, { 1, 2, 0}, {1, 2, 3}

এর মুছুন 0%"পূর্ববর্তী আউটপুট" এর জন্য শর্টহ্যান্ড।

% /। {0:> সিকোয়েন্স []}

{{}, {3}, {2}, {2, 3}, {1}, {1, 3}, {1, 2}, {1, 2, 3}

কলামে প্রদর্শন করুন:

গণিত গ্রাফিক্স


@ টিজেমসন আমার পোস্ট করা উচিত কিনা তা নিয়ে আমার গুরুতর সন্দেহ ছিল, তবে আমি ভেবেছিলাম যে কিছু লোক এটি বিল্ট-ইন রয়েছে তা জেনে আকর্ষণীয় মনে হতে পারে।
ডেভিডসি

আমি এটি আকর্ষণীয় মনে করি :)
ডঃ বেলিসেরিয়াস

আপনি কি ছেড়ে দিতে পারেন sএবং লাইনটির শেষে ইনপুটটি রাখতে পারেন ?
সলোমন উকো

15 বাইট: Subsets/*Columnএকটি বেনামে ফাংশন তৈরি করে যা একটি তালিকা নেয় এবং কলামগুলিতে প্রদর্শনটি ফিরিয়ে দেয়।
রোমান

9

সি, 118 115

সহজ ফরম্যাটিং সহ প্রায় 20 টি অক্ষর সংরক্ষণ করতে পারে, এখনও কোড গল্ফ পদগুলিতে কোনওভাবেই জিততে পারে না।

x,i,f;
main(int a,char**s){
    for(;x<1<<a;x+=2,puts("[]"+f))
        for(i=f=0;++i<a;)x&1<<i?f=!!printf("%c%s","[,"[f],s[i]):0;
}

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

/a.out 1 2 3
[]
[1]
[2]
[1,2]
[3]
[1,3]
[2,3]
[1,2,3]

খুশী হলাম। কিছু টিপ: কে & R এর শৈলী ( main(a,s)char**s;{...}), f|=x&1<<i&&printfচেয়ে খাটো ?:
ugoren

পিছনে কী আছে x+=2(এবং কোথায় গেল s[0]) সবেমাত্র সন্ধান করলেন । সত্যিই দুর্দান্ত কৌশল।
ugoren

আপনার উত্তরটি গল্ফ করতে অস্বীকার করছে কারণ এটি "এখনও কোনওভাবেই গল্ফের কোডে জিততে পারে না।" উত্তরটিকে চ্যালেঞ্জের জয়ের মানদণ্ডের জন্য গুরুতর প্রতিযোগী করে না।
পিপ্পারি

7

গল্ফস্ক্রিপ্ট, 22 18 টি অক্ষর

~[[]]{{+}+1$%+}@/`

সম্পূর্ণ ভিন্ন অ্যালগরিদম সহ গল্ফস্ক্রিপ্টে আর একটি প্রচেষ্টা। ইনপুট ফর্ম্যাট ডাব্লু0এলএফ এর উত্তরের মতোই। ( অনলাইন পরীক্ষা )


+1 দুর্দান্ত সমাধান! খনিটি পাঠযোগ্যতার জন্য রিফ্যাক্টর করা হয়েছে :
পি

5

গল্ফস্ক্রিপ্ট (৪৩ টি চর)

এটি বেশ দীর্ঘ বলে মনে হতে পারে তবে অনুমিতিটি অনুসরণ করার এটি প্রথম সমাধান: ইনপুট হ'ল কমান্ড-লাইন আর্গুমেন্ট থেকে এবং আউটপুটটি নিউলাইন-সীমিত হয়।

"#{ARGV.join('
')}"n/[[]]\1/{`{1$+.p}+%}%p;

যেমন

$ golfscript.rb powset.gs 1 2 3
["1"]
["2"]
["2" "1"]
["3"]
["3" "2"]
["3" "1"]
["3" "2" "1"]
[]

উদ্ধৃতিগুলি প্রয়োজনীয় নয়, যদি এটি কোনও পার্থক্য করে।
21:58

@ টেজেমসন, মুদ্রণের সবচেয়ে সংক্ষিপ্ততম উপায় ব্যবহার করে উদ্ধৃতিগুলি এসেছে। এই মানগুলি পূর্ণসংখ্যার পরিবর্তে স্ট্রিংয়ের সত্যতা হ'ল গল্ফস্ক্রিপ্টের কমান্ড-লাইন আর্গুমেন্টগুলিতে সরাসরি অ্যাক্সেস করতে অক্ষমতা থেকে: এটি রুবিতে একটি দোভাষীকে ব্যাখ্যা করতে এবং ফলাফলকে একটি স্ট্রিংয়ে রাখার উপর নির্ভর করতে হয়।
পিটার টেলর

4

বেক (82)

{for(;i<2^NF;i++){for(j=0;j<NF;j++)if(and(i,(2^j)))printf "%s ",$(j+1);print ""}}

ধরুন ফাইল পাওয়ারসেট.ওক, ব্যবহারে সংরক্ষণ করা হয়েছে

$ echo 1 2 3 | awk -f powerset.awk

1
2
1 2
3
1 3
2 3
1 2 3

পিএস যদি আপনার অ্যাজকে না থাকে এবং () ফাংশন না করে int(i/(2^j))%2তবে এর সাথে প্রতিস্থাপন করুন তবে গণিতে দুটি যোগ করুন।


(2^j)-> 2^jআপনাকে 2 বাইট সাশ্রয় করে; .awkফাইল এছাড়াও একটি trailing ছাড়া কাজ করে \n, তাই আপনার আর বাইট বন্ধ শেভ পারে।
mklement0

3

জাভাস্ক্রিপ্ট, 98

দুঃখের বিষয়, একটি ভাল অংশ আউটপুট বিন্যাসে ব্যয় করা হয়।

for(n in a=eval(prompt(i=p=[[]])))
    for(j=i+1;j;)
        p[++i]=p[--j].concat(a[n]);
alert('[]'+p.join('\n'))

ইনপুট

একটি জাভাস্ক্রিপ্ট অ্যারে নেয়। (উদাঃ [1,2,3])

আউটপুট

[]
1
1,2
2
2,3
1,2,3
1,3
3

3

পাইথন ( 70৪ টি চর)

def p(a,v):
 if a:i,*a=a;p(a,v);p(a,v+[i])
 else:print v
p(input(),[])

হিসাবে ইনপুট জন্য 1,2,3বা [1,2,3]আউটপুট হয়:

[]
[3]
[2]
[2, 3]
[1]
[1, 3]
[1, 2]
[1, 2, 3]

[a[0]]=a[:1]
ugoren

ইনপুট 1,2,3 a[:1]কাজ করে না। টিপল + তালিকার অনুমতি নেই। আরও ভাল সমাধানের অস্তিত্ব
এএমকে

+1 এর জন্যi,*a=a
প্রিমো

i,*a=aপাইথন 3 না ? এটি আমার 2.7.1 এ কাজ করে না।
ugoren

২. 2..২০১ Nor তেও নয়। এটি ব্যাখ্যা করতে পারে যে আমি আগে কখনই সেই কৌশলটি দেখিনি ... বেশিরভাগ কোড গল্ফ সার্ভারগুলি ২.7.x চালিত হয়।
primo

3

পাইথন 70 67 বাইট

def p(a,*v):
 i=0;print v
 for n in a:i+=1;p(a[i:],n,*v)
p(input())

ইউগোরেনের সমাধান হিসাবে ইনপুট একই পদ্ধতিতে নেওয়া হয় । নমুনা I / O:

$ echo [1,2,3] | powerset.py
()
(1,)
(2, 1)
(3, 2, 1)
(3, 1)
(2,)
(3, 2)
(3,)

1
আপনি কিছু def p(a,*v)এবং তারপর সংরক্ষণ করতে পারেন p(a[i:],n,*v)। আউটপুট কিছুটা কুরুচিপূর্ণ হয়ে ওঠে, তবে এখনও ঠিক আছে।
ugoren

খুব চালাক, টিপটির জন্য ধন্যবাদ।
primo

3

জে, 19 অক্ষর

   (<@#~#:@i.@(2&^)@#)

   (<@#~#:@i.@(2&^)@#) 1 2 3
┌┬─┬─┬───┬─┬───┬───┬─────┐
││3│2│2 3│1│1 3│1 2│1 2 3│
└┴─┴─┴───┴─┴───┴───┴─────┘

আউটপুটে এসকিআই বক্সিং বলা হয় boxingএবং হেটেরোজেন সংগ্রহ সরবরাহ করে (বিভিন্ন অ্যারে বিভিন্ন দৈর্ঘ্যের জন্য)।


2

গল্ফস্ক্রিপ্ট 48

~:x,:§2\?,{[2base.,§\-[0]*\+x\]zip{~{}{;}if}%p}%

এই প্রোগ্রামটি পাওয়ারসেট আইটেমগুলি তৈরি করতে 0 থেকে দৈর্ঘ্যের (ইনপুট) সংখ্যার বাইনারি উপস্থাপনা ব্যবহার করে।

ইনপুট

ইনপুট ফর্ম্যাটটি গল্ফস্ক্রিপ্ট অ্যারে ফর্ম্যাট (উদাহরণ [1 2 3]:)

আউটপুট

আউটপুটটি পাওয়ার লাইনের প্রতিনিধিত্ব করে নতুন লাইনের দ্বারা পৃথক করা অ্যারেগুলির একটি সংগ্রহ। উদাহরণ:

[]
[3]
[2]
[2 3]
[1]
[1 3]
[1 2]
[1 2 3]

অনলাইন পরীক্ষা

প্রোগ্রামটি এখানে অনলাইনে পরীক্ষা করা যায় ।


দুর্দান্ত, তবে আপনি কি নতুন লাইনের সাথে সীমানা ফেলতে পারেন?
বিটগ্যামিট

@ টিজেমসন একই চরিত্রের গণনা রেখে আমি নতুন লাইনের মাধ্যমে সীমিত আউটপুট পরিচালনা করতে পেরেছি। আমার উত্তর আপডেট করুন।
ক্রিশ্চিয়ান লুপাস্কু

2

হাস্কেল (96)

আমদানি কন্ট্রোল.মোনাদ
আমদানি সিস্টেম। পরিবেশ
প্রধান = getArgs >> = মানচিত্র প্রিন্ট.ফিল্টারএম (\ _-> [মিথ্যা ..])

যদি আমদানির Control.Monadঅনুমতি না দেওয়া হয় তবে এটি 100 টি অক্ষরে পরিণত হয় :

আমদানি সিস্টেম। পরিবেশ
প্রধান = getArgs >> = mapM মুদ্রণ.পি
pz = কেস z এর {[] -> [[]]; x: y-> পি y ++ মানচিত্র (x:) (পিআই)}


2

এপিএল (26)

কোনও argvসমতুল্য নেই বলে কীবোর্ড থেকে ইনপুট পড়ুন ।

↑⍕¨(/∘T)¨↓⍉(M/2)⊤⍳2*M←⍴T←⎕

ব্যবহার:

      ↑⍕¨(/∘T)¨↓⍉(M/2)⊤⍳2*M←⍴T←⎕
⎕:
      1 2 3
3    
2    
2 3  
1    
1 3  
1 2  
1 2 3

ব্যাখ্যা:

  • T←⎕: ইনপুট পড়ুন, স্টোর ইন করুন T
  • M←⍴T: এর দোকান দৈর্ঘ্য Tমধ্যেM
  • (M/2)⊤⍳2*Mজন্য বিট নিদর্শন উৎপন্ন 1পর্যন্ত 2^Mব্যবহার Mবিট।
  • ↓⍉: ম্যাট্রিক্সকে বিভক্ত করুন যাতে প্রতিটি বিট প্যাটার্ন পৃথক হয়
  • (/∘T)¨: প্রতিটি বিট প্যাটার্নের জন্য, সেগুলি থেকে সাব-আইটেমগুলি নির্বাচন করুন T
  • ↑⍕¨: আউটপুট দেওয়ার জন্য, প্রতিটি উপাদানটির স্ট্রিং প্রতিনিধিত্ব পান (যাতে এটি ফাঁকা ব্যবহার করে এবং জিরো না দিয়ে পূরণ করবে) এবং ম্যাট্রিক্স হিসাবে ফর্ম্যাট করুন (যাতে প্রতিটি উপাদান তার নিজস্ব লাইনে থাকে)।


2

জাভাস্ক্রিপ্ট ( ES6 ) 76

আংশিকভাবে এটি থেকে অনুলিপি করা হয়েছে: /codegolf//a/51502/21348

বিটম্যাপ ব্যবহার করে, সুতরাং এটি 32 টির বেশি উপাদানের মধ্যে সীমাবদ্ধ।

পরীক্ষার জন্য ফায়ারফক্সে স্নিপেট চালান।

f=l=>{ 
  for(i=0;i<1<<l.length;i++)
    console.log(l.filter(v=>[i&m,m+=m][0],m=1))
}  

// TEST

// Redefine console to have output inside the page
console = { log: (...p) => O.innerHTML += p.join(' ') + '\n' }

test=()=>{
  var set = I.value.match(/[^ ,]+/g)
  O.innerHTML='';
  f(set);
}

test()
#I,#O { border: 1px solid #aaa; width: 400px; padding:2px}
Insert values, space or comma separated:<br>
<input id=I value='1 2 3'> <button onclick="test()">-></button>
<pre id=O></pre>


2

সি # 164

মানুষ এটি সি # তে শক্ত!

void P<T>(T[]c){foreach(var d in c.Aggregate<T,IEnumerable<IEnumerable<T>>>(new[]{new T[0]},(a,b)=>a.Concat(a.Select(x=>x.Concat(new[]{b})))))Console.WriteLine(d);}

2

পাইথন 2, 64 বাইট

কমা-বিচ্ছিন্ন ইনপুট ব্যবহার:

P=[[]]
for i in input():P+=[s+[i]for s in P]
for s in P:print s

পাইথ, 4 বাইট (বিল্টিন ব্যবহার করে) বা 14 বাইট (ছাড়াই)

মন্তব্যগুলিতে @ জাকুবে লিখেছেন, পাইথ এই প্রশ্নের জন্য খুব সাম্প্রতিক। পাইথের বিল্টিন পাওয়ারসেট অপারেটরটি ব্যবহার করে এখনও একটি সমাধান এখানে রয়েছে:

jbyQ

এবং এটি ব্যতীত এখানে একটি:

jbu+Gm+d]HGQ]Y

আপনি এখানে এবং এখানে উভয় সমাধান চেষ্টা করতে পারেন । দ্বিতীয় সমাধানের ব্যাখ্যা এখানে:

jb       # "\n".join(
 u       #  reduce(
  +G     #   lambda G,H: G+
   m     #    map(
    +d]H #     lambda d: d+[H],
    G    #     G),
  Q      #   input()
  ]Y     #   [[]]))

2

ব্রেনফাক, 94 বাইট

+[[<+>>+<-]++[>-<------]>-[>]<<[>>+>]>,]++++++++++[[[<]<]+[-[>[.>]]<[<]>+[>]>]<<
.[<<[<]>-]++>]

বিন্যাসকৃত:

+
[
  [<+> >+<-]
  ++[>-<------]>-[>]
  <<[>>+>]
  >,
]
++++++++++
[
  [[<]<]
  +
  print
  [
    -[>[.>]]
    <[<]
    >+[>]
    >
  ]
  <<.
  increment
  [
    <<[<]
    >-
  ]
  ++>
]

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

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

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

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


2

এপিএল (ডায়ালগ ক্লাসিক) , 13 বাইট

⍪,⊃∘.,/⎕,¨⊂⊂⍬

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

আউটপুট:

 1 2 3 
 1 2   
 1 3   
 1     
 2 3   
 2     
 3     

খালি সেটটি উপস্থাপন করার জন্য শেষে একটি ফাঁকা রেখা রয়েছে।

ব্যাখ্যা:

মূল্যায়ন ইনপুট

⎕,¨⊂⊂⍬ প্রতিটি উপাদান পরে একটি খালি সংখ্যা তালিকা যোগ করুন

∘., কার্টিজিয়ান পণ্য

/ হ্রাস (ফোল্ডার)

প্রকাশ (এপিএল হ্রাসের পরে প্রয়োজনীয়)

এই মুহুর্তে ফলাফলটি একটি n-মাত্রিক 2-বাই -.....- বাই 2 অ্যারে, যেখানে এন ইনপুটটির দৈর্ঘ্য।

, একটি ভেক্টর মধ্যে সমতল

ভেক্টরটিকে একটি খাড়া 2 এন -বাই -1 ম্যাট্রিক্সে পরিণত করুন, সুতরাং প্রতিটি উপসেট একটি পৃথক লাইনে থাকবে


2

হাস্কেল , 80 78 বাইট

import System.Environment
main=getArgs>>=mapM(print.concat).mapM(\a->[[a],[]])

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


আই / ও প্রয়োজনীয়তাগুলি ভয়াবহ, তবে লোকেরা তাদের বেশ শিথিলভাবে ব্যাখ্যা করছে। যদি আপনি স্টিডিনের মাধ্যমে ইনপুট নেওয়াতে পরিবর্তন করেন আপনি 15 বাইট সংরক্ষণ করতে পারেন, এটি দেখুন
5


1

পাইথন, 93 87 টি চর

পাইথন ফর্ম্যাটিংটিকে সহজ করে তোলে কারণ প্রয়োজনীয় ইনপুট / আউটপুট তার স্থানীয় ফর্ম্যাটটির সাথে মেলে।
পাইথন আক্ষরিক (যেমন 1,2,'hello', না 1,2,hello) কেবলমাত্র সেই আইটেমগুলিকে সমর্থন করে ।
প্যারামিটার নয়, স্ট্যান্ডার্ড ইনপুট পড়ে।

f=lambda x:x and f(x[1:])+[x[:1]+a for a in f(x[1:])]or[()]
for l in f(input()):print l

print f(input())সংক্ষিপ্ত
এএমকে

@ এএমকে, প্রতিটি উপাদানকে এক লাইনে মুদ্রণ করা প্রয়োজন। কিন্তু listপ্রকৃতপক্ষে মুছে ফেলা হতে পারে (যদি এছাড়াও replacinf [[]]সঙ্গে [()]
ugoren

print'\n'.join(f(input()))দুটি অক্ষর সংরক্ষণ করে
beary605

@ beary605, কাজ করে না, f()এতে টিপলস রয়েছে, স্ট্রিং নেই।
ugoren


1

হাস্কেল 89 টি চর

import System.Environment
main=getArgs>>=mapM print.p
p[]=[[]]
p(x:y)=(map(x:)$p y)++p y

প্যারামিটারগুলি পাওয়া দীর্ঘ: /


আরও একটি চর মুভ করা যেতে পারে map(x:)(p y)++p yএবং এর সাথে আরও দুটি চর দেওয়া যেতে পারে [(x:),id]<*>p y। স্পষ্টতই এখন <*>প্রিলিওডে রয়েছে । ( filterMনয়)
নেস

1

আর, 63

y=lapply(seq(v),function(x)cat(paste(combn(v,x,s=F)),sep="\n"))

এখানে, vএকটি ভেক্টর প্রতিনিধিত্ব করে।

ব্যবহার :

v <- c(1, 2, 3)
y=lapply(seq(v),function(x)cat(paste(combn(v,x,s=F)),sep="\n"))
1
2
3
c(1, 2)
c(1, 3)
c(2, 3)
c(1, 2, 3)

1

কে, 14 বাইট

{x@&:'!(#x)#2}

ইনপুট হিসাবে যতক্ষণ না সমস্ত 0/1 ভেক্টর তৈরি করুন, 1 এস সূচকগুলি সংগ্রহ করুন এবং ইনপুট ভেক্টর থেকে উপাদান নির্বাচন করতে সেগুলি ব্যবহার করুন। প্রস্তুতিতে:

  {x@&:'!(#x)#2} 1 2 3
(!0
 ,3
 ,2
 2 3
 ,1
 1 3
 1 2
 1 2 3)

এটি আউটপুট প্রয়োজনীয়তার সাথে কিছুটা উদার, তবে আমি মনে করি এটি আইনী। সবচেয়ে প্রশ্নবিদ্ধ অংশটি হ'ল খালি সেটটি কোনও প্রকার নির্ভরশীল আকারে উপস্থাপন করা হবে; !0কে কীভাবে খালি সংখ্যার ভেক্টরকে বোঝায়:

  0#1 2 3      / integers
!0
  0#`a `b `c   / symbols
0#`
  0#"foobar"   / characters
""

ব্যাখ্যা

(#x)#2একটি ভেক্টর তৈরী করে 2যতদিন ইনপুট হিসাবে:

  {(#x)#2}1 2 3
2 2 2
  {(#x)#2}`k `d `b `"+"
2 2 2 2

যখন monadic !একটি ভেক্টর প্রয়োগ করা হয়, এটি "ওডোমিটার":

  !2 2 2
(0 0 0
 0 0 1
 0 1 0
 0 1 1
 1 0 0
 1 0 1
 1 1 0
 1 1 1)

তারপরে আমরা এর সূচকগুলি সংগ্রহ করতে &প্রতিটি ( ') ভেক্টরে "যেখানে" ( ) ব্যবহার করি । কোলনটির monadic এবং dyadic ফর্ম মধ্যে disamiguate প্রয়োজন &:

  &0 0 1 0 1 1
2 4 5

  {&:'!(#x)#2} 1 2 3
(!0
 ,2
 ,1
 1 2
 ,0
 0 2
 0 1
 0 1 2)

আমরা যদি কেবল সংমিশ্রণ ভেক্টর চাইতাম তবে আমাদের কাজ শেষ হয়ে যাবে তবে আমাদের সেগুলি মূল সেটটিতে সূচক হিসাবে ব্যবহার করা দরকার। ভাগ্যক্রমে, কে এর ইনডেক্সিং অপারেটর @সূচকগুলির একটি জটিল কাঠামো গ্রহণ করতে পারে এবং একই আকারের সাথে ফলাফল তৈরি করবে:

  {x@&:'!(#x)#2} `a `c `e
(0#`
 ,`e
 ,`c
 `c `e
 ,`a
 `a `e
 `a `c
 `a `c `e)

মার্জিত, না?


1
এটি আর বৈধ নয়, কারণ ওকে "ওডোমিটার" এখন একটি উল্টানো ম্যাট্রিক্স উত্পন্ন করে। এটি একটি একক বাইট খরচে সংশোধন করা যেতে পারে: {x@&:'+!(#x)#2}। অসম্পর্কিত: এর একটি সংক্ষিপ্ত সমতুল্য (#x)#2হয় 2|~x
এনএনজি

1

গণিত, 51

আরও প্রতারণা:

Column@ReplaceList[Plus@@HoldForm/@#,x___+___->{x}]&

সাথে ব্যবহার করুন @{1,2,3}


আপনার কোডটি কেবল হার্ডকোড নয়, সেটটিকে ইনপুট হিসাবে নেওয়া উচিত। এছাড়াও, যেহেতু এটি কোড গল্ফ, তাই আপনার কোডের বাইট গণনাটি অন্তর্ভুক্ত করা উচিত (এবং সম্ভবত অপ্রয়োজনীয় স্পেসগুলি সরিয়ে ফেলুন)।
মার্টিন ইন্ডার

যেহেতু এই প্রতিযোগিতাটি দীর্ঘ হয়েছে, পোস্টটি ধারণাটির জন্য আরও বেশি ছিল তবে আমি এটি সম্পাদনা করেছি।
লজিক ব্রেকার

1

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

a=>alert(a.reduce((a,x)=>[...a,...a.map(y=>[...y,x])],[[]]).join`
`)

ডেমো


কেন alert?
শেগি

@ শেগি চ্যালেঞ্জটি স্পষ্টভাবে প্রতিটি উপাদানকে একটি পৃথক লাইনে মুদ্রণ করতে বলেছে - যা সম্ভবত আমাদের বর্তমান মানদণ্ডে ভ্রষ্ট হবে। সর্বাধিক উত্তরগুলি এই নিয়মের সাথে লেগে থাকে।
আর্নল্ড

আহ, যথেষ্ট ন্যায্য; আমি "মুদ্রণ" কে "আউটপুট" হিসাবে ব্যাখ্যা করি।
শেগি


0

রুবি অ্যারে পদ্ধতির সংমিশ্রণ (১.৯ থেকে) [৫০ টি চর]

0.upto(ARGV.size){|a|ARGV.combination(a){|v| p v}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.