0 থেকে 2 ^ n - 1 পর্যন্ত পপকর্ন ক্রমে


18

... আহ দুঃখিত, এখানে কোনও পপকর্ন নেই, কেবলমাত্র পপসিএনটি T

সংক্ষিপ্ততম প্রোগ্রাম বা ফাংশনটি লিখুন যা সংখ্যার বাইনারি উপস্থাপনায় (পপকাউন্ট) 1 বিটের সংখ্যার আরোহী ক্রমানুসারে 0 থেকে 2 এন - 1 পর্যন্ত সমস্ত সংখ্যার আউটপুট নেয় nand কোনও সদৃশ অনুমোদিত নয়।

একই পপকাউন্ট সহ সংখ্যার ক্রমটি বাস্তবায়ন-সংজ্ঞায়িত।

উদাহরণস্বরূপ, এর জন্য n = 3, এই সমস্ত আউটপুট বৈধ:

0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7 

কোডটি আরও গল্ফ করার জন্য ভাষা বৈশিষ্ট্যগুলির ব্যবহারের অনুমতি দেওয়ার জন্য ইনপুট এবং আউটপুট ফর্ম্যাটটি বাস্তবায়ন-সংজ্ঞায়িত। আউটপুটটিতে কয়েকটি বিধিনিষেধ রয়েছে:

  • সংখ্যাগুলি দশমিক বিন্যাসে আউটপুট হতে হবে।
  • আউটপুটে অবশ্যই সংখ্যার মধ্যে একটি যুক্তিসঙ্গত বিভাজক থাকতে হবে (অনুসরণকারী বিভাজক অনুমোদিত, তবে নেতৃত্ব দিচ্ছে না)।

    লাইন ফিড ( \n), ট্যাব ( \t), স্থান, ,, ., ;, |, -, _, /বেশ যুক্তিসঙ্গত বিভাজক আছে। সুন্দর প্রিন্টিংয়ের জন্য আমি অতিরিক্ত জায়গা মনে করি না তবে পৃথককারী হিসাবে অক্ষর বা অঙ্কগুলি ব্যবহার করি না।

  • সংখ্যা এবং বিভাজক দ্বারা বেষ্টিত করা যেতে পারে [ ], { }বা কোনো বিন্যাস বা তালিকা স্বরলিপি।
  • উপরে বর্ণিত অন্য কিছু মুদ্রণ করবেন না।

বোনাস

আপনার সমাধানটি ফ্লাইয়ের সংখ্যাটি তৈরি করতে পারে যদি আপনার স্কোরকে 0.5 দ্বারা গুণান p এই বোনাসের স্পিরিটিটি হ'ল যদি আপনি নিজের মুদ্রণ সমাধানটিকে সরাসরি একটি জেনারেটরে রূপান্তর করতে চান তবে জেনারেটর কেবলমাত্র ও (এন) মেমরিটিতে কেবল n ব্যবহার করে যেখানে উপরের সংজ্ঞায়িত বিট সংখ্যা। (আপনাকে আসলে নিজের সমাধানটি জেনারেটরে রূপান্তর করতে হবে না)। মনে রাখবেন যে আমি এন <= 28 চাপানোর সময়, সমস্ত সংখ্যা সঞ্চয় করার জন্য প্রয়োজনীয় মেমরিটি এখনও তাত্পর্যপূর্ণভাবে বৃদ্ধি পায়, এবং একটি নিখুঁত বাছাইয়ের সমাধানটি কমপক্ষে কমপক্ষে 4 গিগাবাইট মেমরির n = 28 এ জড়িয়ে রাখে।

এই সমাধান বোনাস দাবি করার আগে আপনার সমাধান কীভাবে কাজ করে তার কিছু সাধারণ ব্যাখ্যা যুক্ত করুন।


4
দেখে মনে হচ্ছে যে চ্যালেঞ্জটি বেশ বিরক্তিকর এবং এর উত্তরগুলি বাছাইয়ের একগুচ্ছ হবে। চ্যালেঞ্জটিকে আরও আকর্ষণীয় করে তুলতে আমি কিছু বোনাস যুক্ত করতে চাই। "উড়ে নম্বরগুলি উত্পন্ন করা" এর লাইনের সাথে কিছু। আপনি যদি এটির সাথে ঠিক থাকেন তবে দয়া করে এই মন্তব্যটিকে উজ্জীবিত করুন, তবে আমি এটি প্রশ্নের সাথে যুক্ত করব।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

যদি আপনি দ্বিমত পোষণ করেন তবে দয়া করে এই মন্তব্যটিকে উজ্জীবিত করুন।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

লাইভ পোস্ট করার আগে দয়া করে কোনও প্রশ্নে আরও পরামর্শ চাইতে স্যান্ডবক্স ব্যবহার করুন।
জন ডিভোরাক

21
@ জনডভোরাক: এটি এক মাসের জন্য স্যান্ডবক্সে ছিল।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
আমি মনে করি এই প্রশ্নের জন্য অনেক দেরি হয়ে গেছে। সাধারণত, প্রশ্নগুলি যেখানে আপনাকে একটি তুচ্ছ তাত্পর্যপূর্ণ অ্যালগরিদম খুঁজে বের করতে হবে তা আমার মতে কোড গল্ফের পক্ষে ভাল নয়। পরিবর্তে তাদের একটি কোড চ্যালেঞ্জ করুন এবং আপনার প্রয়োজনীয় সমস্ত প্রতিবন্ধকতাগুলি পোজ করুন।
FUZxxl

উত্তর:



7

পাইথন 2, 75 * 0.5 = 37.5

N=2**input()-1
v=N-~N
while v:t=1+(v|~-v);v=N&t|~-(t&-t)/(v&-v)/2;print v^N

এই বিট-টুইটারিং অ্যালগরিদমv দ্বারা বার বার একই পপ অ্যাকাউন্টের সাথে পরবর্তী সর্বোচ্চটি উত্পন্ন করে ।

প্রকৃতপক্ষে, পপ-গণনা হ্রাস করে এগুলি উত্পন্ন করা সহজ হয়ে গেছে, তারপরে এটি বাড়ানোর জন্য পরিপূরক মুদ্রণ করুন। এইভাবে, তখন vউপচে পড়া 2**n, আমরা কেবল যেখানেই nবিটগুলি বাদ দিই সবগুলি সরিয়ে ফেলি এবং এটি সর্বনিম্ন নম্বর পপকন্টকে কম দেয়। এইভাবে, আমরা কেবল একটি লুপ করতে পারি। সম্ভবত আরও ভাল সমাধান রয়েছে যা একই পপ অ্যাকাউন্টের সাথে সরাসরি পরবর্তী নিম্ন সংখ্যাটি খুঁজে পায় ।&NN=2**n-1

ফেন্সপোস্ট ইস্যুর কারণে আমাদের শুরু করা দরকার v=2**(n+1)-1যাতে অপারেশনটি v=N-1প্রথম লুপে উত্পন্ন হয়।

এর জন্য আউটপুট 4:

0
8
4
2
1
12
10
9
6
5
3
14
13
11
7
15

একই পপকাউন্ট সহ সংখ্যাটি বাড়ার দরকার নেই। আদেশ বাস্তবায়ন সংজ্ঞায়িত হয়।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ আমি সচেতন, তবে কীভাবে অক্ষরগুলি আলাদাভাবে এটি সংরক্ষণ করা যায় তা আমি দেখতে পাচ্ছি না।
xnor

একটি নিষ্পাপ 3 লুপ পদ্ধতিতে, আমি জেএসে ( console.log()বনাম print) প্রায় একই স্কোর করি । সম্ভবত বিট ট্রিকটি খুব ভারী।
edc65

একটি বাইট সংরক্ষণ:v=N-~N
Sp3000

5

জে, 19 টি অক্ষর, কোনও বোনাস নেই।

[:(/:+/"1@#:)@i.2^]
  • 2 ^ y- শক্তি দুটি y
  • i. 2 ^ y- থেকে পূর্ণসংখ্যার 0থেকে (2 ^ y) - 1
  • #: i. 2 ^ y - এই পূর্ণসংখ্যার প্রত্যেকটিই বেস দুটিতে উপস্থাপিত হয়।
  • +/"1 #: i. 2 ^ y - প্রতিটি উপস্থাপনের যোগফল
  • (i. 2 ^ y) /: +/"1 #: i. 2 ^ y- i. 2 ^ yআগের ভেক্টরের আইটেমগুলির ক্রম অনুসারে ভেক্টরটি সাজানো, আমাদের উত্তর।

3

পাইথন, cha৩ টি চর

F=lambda n:`sorted(range(1<<n),key=lambda x:bin(x).count('1'))`

>>> F(3)
'[0, 1, 2, 4, 3, 5, 6, 7]'

@ অ্যালেক্স: বিধিনিষেধের তালিকাটি বোঝায় যে তিনি একটি স্ট্রিং ফলাফল চান।
কিথ র্যান্ডাল

দুঃখিত, এটি মিস করেছি।
অ্যালেক্স এ।

3

সি 179 * 0.5 = 89.5

main(){int n,i=0,m,o;scanf("%d",&n);m=~((~0)<<n);for(;n--;++i){for(o=0;o<m;++o){int bc=0,cb=28;for(;cb--;)bc+=o&(1<<cb)?1:0;if(bc==i)printf("%d ",o);}}printf("%d\n",m);return 0;}

সম্পাদনা: 157 * 0.5 = 78.5

main(){int n,i=0,m,o;scanf("%d",&n);m=~((~0)<<n);for(++n;n--;++i){for(o=0;o<=m;++o){int bc=0,cb=28;for(;cb--;)bc+=o&(1<<cb)?1:0;if(bc==i)printf("%d ",o);}}}

সম্পাদনা: 132 * 0.5 = 66

main(){int n,i=0,m,o;scanf("%d",&n);m=~((~0)<<n);for(++n;n--;++i){for(o=0;o<=m;++o){if(__builtin_popcount(o)==i)printf("%d ",o);}}}

অথবা কিছুটা ভাল বিন্যাসিত:

main()
{
    int n, i = 0, m, o;
    scanf("%d", &n);
    m = ~((~0) << n);
    for(++n; n--; ++i)
    {
        for(o = 0; o <= m; ++o)
        {
            if (__builtin_popcount(o) == i)
                printf("%d ", o);
        }
    }
}

এর মানে কি?

m = ~((~0) << n);

দেখানোর জন্য শেষ সংখ্যা গণনা করে (পাউ (2, এন) - 1)

    for(++n; n--; ++i)
    {
        for(o = 0; o <= m; ++o)
        {

বাইরের লুপটি বিট কাউন্টের উপরে পুনরাবৃত্তি করে (সুতরাং 0 থেকে এন -1) যখন অভ্যন্তরীণ লুপটি কেবল 0 থেকে এম পর্যন্ত গণনা করে

            if (__builtin_popcount(o) == i)
                printf("%d ", o);

X86-তে রয়েছে পিওপিসিএনটি নির্দেশ যা সেট বিটগুলি গণনা করতে ব্যবহার করা যেতে পারে। জিসিসি এবং সামঞ্জস্যপূর্ণ সংকলকগুলি __builtin_popcount ফাংশনটিকে সমর্থন করতে পারে যা মূলত সেই নির্দেশকে সংকলন করে।




1

জাভাস্ক্রিপ্ট (ES6) 41 (82 * 0.5)

সহজ উপায়, গল্ফড

F=b=>{
  for(l=0;l<=b;l++)
    for(i=1<<b;i;t||console.log(i))
      for(t=l,u=--i;u;--t)
        u&=u-1;
}

Ungolfed

F=b=>
{
  for (l = 0; l <= b; l++)
  {
    for (i = 1 << b; i > 0; )
    {
      --i;
      for (t = 0, u = i; u; ++t) // Counting bits set, Brian Kernighan's way
        u &= u - 1;
      if (t == l) console.log(i);
    }
  }
}

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(4)

0
8
4
2
1
12
10
9
6
5
3
14
13
11
7
15


1

বাশ + কোর্টিল, 66

আপনাকে শুরু করার জন্য একটি:

jot -w2o%dpc $[2**$1] 0|dc|tr -d 0|nl -ba -v0 -w9|sort -k2|cut -f1

এখানে সত্যিই উত্তেজনাপূর্ণ কিছুই নেই। প্রদত্ত আপনার মন্তব্যকে আমি আনন্দের সাথে মুছে ফেলবে / এই উত্তরটি সংশোধন আপনি প্রশ্ন পরিবর্তন করতে চান তাহলে।
ডিজিটাল ট্রমা

আপনার প্রোগ্রামটি হাইলাইট করা উচিত কিনা তা নিশ্চিত নন 0 সহ 28 টি পর্যন্ত সমস্ত মানের জন্য কাজ করা উচিত। আমি জানি না যে এখানে কতগুলি উত্তর সেই প্রয়োজনীয়তাটি পাস করে।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

আমি এই ধারাটি সরিয়ে দিয়েছি, যেহেতু লোকেরা এটি কোনওভাবেই লক্ষ্য করে না।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ এখন, তত্ত্বের ক্ষেত্রে কমপক্ষে এটি ২৮ পর্যন্ত কাজ করা উচিত I've আমি এ পর্যন্ত ২২ পর্যন্ত পরীক্ষা করেছি, তবে অবশ্যই এটি sortদীর্ঘ সময় নিতে পারে। N = 28 এর সাথে, sort2 ^ 28 লাইন / ~ 13 গিগাবাইট ডেটা বাছাই করতে হবে।
ডিজিটাল ট্রমা

1

হাস্কেল, (87 * 0.5) = 43,5

f n=[0..n]>>=(\x->x#(n-x))
a#0=[2^a-1]
0#_=[0]
a#b=[1+2*x|x<-(a-1)#b]++[2*x|x<-a#(b-1)]

ব্যবহারের উদাহরণ: f 4 :, যা আউটপুট দেয়[0,1,2,4,8,3,5,9,6,10,12,7,11,13,14,15]

এটি কীভাবে কাজ করে: [0..2 ^ n-1] বাছাই বা বার বার পুনরাবৃত্তি করা এবং i 1s সংখ্যার সন্ধান করা নয়।

#সাহায্যকারী ফাংশন দুটি প্যারামিটার নেয় aএবং bএবং গঠিত প্রতি NUMBER একটি তালিকা নির্মান a1s এবং b0 সেঃ। মূল ফাংশন fকল# প্রতিটি সংমিশ্রণের জন্য করে aএবং bযেখানে a+bসমান হয় n, nসংখ্যাগুলি যাতে না থাকে তার জন্য 1s এবং 0s দিয়ে শুরু হয় । হাস্কেলের অলসতার জন্য ধন্যবাদ সেই সমস্ত তালিকা স্মৃতিতে সম্পূর্ণরূপে তৈরি করা উচিত নয়।


++এর a#bঅর্থ কি এই নয় যে বাম হাতের দিকটি (যা বড় হতে পারে) পুরোপুরি উত্পাদন করা উচিত এবং তারপরে ফলাফলের প্রথম আইটেমটি উত্পাদনের আগে অনুলিপি করা হয়, এভাবে বোনাসের প্রয়োজনীয়তা লঙ্ঘন করে?
জুলে

আহ, না, এগুলি নিয়ে চিন্তা করার পরেও তারা উত্পাদিত হওয়ার সময় অলসভাবে এগুলি উত্পন্ন করতে পারে, কেবল প্রতিটি আইটেমের একটি অনুলিপি তৈরি করা দরকার যা উভয়ই প্রসেসিংয়ের সময় সংগ্রহ করা আবর্জনা হতে পারে তার অর্থ স্থানের ব্যবহার অবিচ্ছিন্ন। আমাকে উপেক্ষা কর.
জুলে

1

রুবি 47 অক্ষর

অনেকটা @ কিথরান্ডাল থেকে পাইথনের মতো:

f=->n{(0..1<<n).sort_by{|x|x.to_s(2).count ?1}}

1

গণিত, 26

Tr/@(2^Subsets@Range@#/2)&

উদাহরণ:

Tr/@(2^Subsets@Range@#/2)&[4]

{0, 1, 2, 4, 8, 3, 5, 9, 6, 10, 12, 7, 11, 13, 14, 15}


0

পার্ল, 64/2 = 32

#!perl -ln
for$i(0..$_){$i-(sprintf"%b",$_)=~y/1//||print for 0..2**$_-1}

ব্যাপ্তির [0..2^n-1] n + 1সময়গুলি কেবল পুনরাবৃত্তি করুন । প্রতিটি পুনরাবৃত্তিতে কেবল সেই সংখ্যাগুলি মুদ্রণ করুন যার পুনরাবৃত্তি পরিবর্তনশীল ( $i) এর সমান 1 বিট সংখ্যা রয়েছে । বিটস দ্বারা গণনা করা হয় কাউন্টিং 1'গুলি ( y/1//সংখ্যায়) সঙ্গে বাইনারি স্ট্রিং রূপান্তরsprintf

আমাকে পরীক্ষা করুন

পার্ল, 63

বাছাইয়ের পদ্ধতি:

#!perl -l
print for sort{eval+(sprintf"%b-%b",$a,$b)=~y/0//dr}0..2**<>-1

1
@ অপ্টিমাইজার, এটি ও (1) মেমরি ব্যবহার করে। আমাদের আর কী সংজ্ঞা আছে?
ওফস,

@ অপ্টিমাইজার, স্থির
নটকি

ভাল, আমি যখন শর্তটি স্থির করি তখন আমি এটি সম্পর্কে অবহিত, তবে যাইহোক, আমি এটি এটির অনুমতি দিই, যেহেতু আমি দেখতে চাই যে লোকেরা কী কী জটিল উত্তর নিয়ে আসতে পারে।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

2
আমি কেবল "কীভাবে" জিজ্ঞাসা করেছি যেহেতু আমি পার্ল পড়তে পারি না :) আরও ব্যাখ্যা যুক্ত করার জন্য যত্নশীল?
অপ্টিমাইজার

@ অপ্টিমাইজার, আরও কিছু ব্যাখ্যা যুক্ত করা হয়েছে।
নটকি

0

জাভা 8, 205

public class S{public static void main(String[] n){java.util.stream.IntStream.range(0,1<<Integer.parseInt(n[0])).boxed().sorted((a,b)->Integer.bitCount(a)-Integer.bitCount(b)).forEach(System.out::print);}}

0

সি ++ 11, 117 টি অক্ষর:

using namespace std;int main(){ set<pair<int,int> > s;int b;cin>>b;int i=0;while(++i<pow(2,b))s.insert({bitset<32>(i).count(),i});for (auto it:s) cout <<it.second<<endl;}

Ungolfed:

using namespace std;
int main()
{
    set<pair<int,int> > s;
    int b;
    cin>>b;
    int i=0;
    while (++i<pow(2,b))  {
        s.insert({bitset<32>(i).count(),i});
    }
    for (auto it:s) {
        cout <<it.second<<endl;
    }
}

ব্যাখ্যা:

ইনট, ইনট পেয়ারের একটি সেট তৈরি করুন। প্রথম intটি বিট কাউন্ট, দ্বিতীয়টি হল সংখ্যা। জোড়গুলি তাদের প্রথম প্যারামিটার অনুসারে নিজেদের তুলনা করে, তাই সেটটি বিট কাউন্ট অনুসারে বাছাই করা হয়েছে।

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