বাইনারি বন রোপণ!


24

A014486 দ্বারা অনুপ্রাণিত ।

চ্যালেঞ্জ

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

কিভাবে?

ইনপুটটিকে বাইনারি রূপান্তর করুন। 1গুলি শাখাগুলি উপস্থাপন করে এবং 0পাতার প্রতিনিধিত্ব করে।

এটি বোঝার সহজ করার জন্য, 834উদাহরণ হিসাবে (বাইনারিতে 1101000010) ব্যবহার করুন ।


আমরা প্রথম অঙ্ক দিয়ে শুরু করি। প্রথম অঙ্কটি একটি 1, তাই আমরা শাখাগুলি আঁকছি:

\ /
 1

বা অ্যারে হিসাবে, {{1}}


পরের অঙ্কটি হ'ল 1, সুতরাং আমরা আরও শাখাগুলি আঁকবো (আমরা বাম থেকে ডানে যাই):

\ /
 1
  \ /
    1

বা অ্যারে হিসাবে, {{1, {1}}}


পরের অঙ্কটি হল 0, সুতরাং আমরা একটি পাতা রাখি:

0
 \ /
  1
   \ /
     1

বা অ্যারে হিসাবে, {{1, {1, 0}}}


পরবর্তী অঙ্কটি একটি 1, তাই আমরা একটি শাখা রাখি:

     \ /
0 1
 \ /
   1
      \ /
         1

বা অ্যারে হিসাবে, {{1, {1, 0, {1}}}}


প্রক্রিয়াটি পুনরাবৃত্তি করে আমরা 8 তম অঙ্কের পরে নিম্নলিখিত গাছটি পাই:

    0 0
     \ /
0 1
 \ /
   1 0
      \ /
         1

বা অ্যারে হিসাবে, {{1, {1, 0, {1, 0, 0}}, 0}}


বাকি অঙ্কগুলির জন্য, আমরা আরও গাছ আঁকছি:

নবম 0সংখ্যাটি হ'ল , সুতরাং আমরা একটি পাতা রাখি (ওও, এটি একটি তরুণ অঙ্কুর!)

    0 0
     \ /
0 1
 \ /
   1 0
      \ /
         1 0

বা অ্যারে হিসাবে, {{1, {1, 0, {1, 0, 0}}, 0}, 0}


যখন আমরা সমস্ত অঙ্কগুলি ব্যবহার করি, আমরা এটি দিয়ে শেষ করি:

    0 0
     \ /
0 1
 \ /
   1 0 0
      \ / \ /
         1 0 1

বা অ্যারে হিসাবে, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0}}


এটি অদ্ভুত দেখাচ্ছে, তাই আমরা গাছটি সম্পূর্ণ করতে একটি শূন্য প্যাড করি:

    0 0
     \ /
0 1
 \ /
   1 0 0 0
      \ / \ /
         1 0 1

বা অ্যারে হিসাবে, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0, 0}}

নোট করুন যে অ্যারে সমতল করার ফলে বাইনারিতে মূল সংখ্যা পাওয়া যায় তবে প্যাডযুক্ত শূন্যের সাথে।

নির্ণায়ক

  • আউটপুট অবশ্যই গাছ এবং শাখাগুলির পৃথকীকরণ অবশ্যই স্পষ্টভাবে দেখায় (যদি এটি নেস্টেড অ্যারে না হয় তবে দয়া করে আপনার আউটপুট ফর্ম্যাটটি ব্যাখ্যা করুন)।
  • আউটপুট থেকে সমস্ত অঙ্ক বের করে আনতে ইনপুটটির বাইনারি উপস্থাপনের সাথে সমান হওয়া আবশ্যক (উপরের প্রক্রিয়া থেকে প্যাডেড শূন্য (গুলি) সহ)।

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

আউটপুট যতক্ষণ না এটি মানদণ্ড পূরণ করে ততক্ষণ আলাদা হতে পারে।

0 -> {0}
1 -> {{1, 0, 0}
44 -> {{1, 0, {1, {1, 0, 0}, 0}}
63 -> {{1, {1, {1, {1, {1, {1, 0, 0}, 0}, 0}, 0}, 0}, 0}
404 -> {{1, {1, 0, 0}, {1, 0, {1, 0, 0}}}
1337 -> {{1, 0, {1, 0, 0}}, {1, {1, {1, 0, 0}, {1, 0, 0} 0, 0}

স্কোরিং

এটি , তাই সর্বনিম্ন বাইটস জয়!


5
আমি বোনাস ব্যবহার এড়াতে চাই - এটি সাধারণত চ্যালেঞ্জের উন্নতি করে না।
Sanchises

1
@ সাঞ্চাইজস আমি ভিজ্যুয়ালাইজেশনের সাথে উত্তরগুলি দেখতে বোনাস যুক্ত করেছি ... আমি কীভাবে লোকদের আউটপুট হিসাবে ভিজ্যুয়ালাইজেশন করার চেষ্টা করতে উত্সাহিত করতে পারি?
जंगহওয়ান মিন

4
(আপনার মন্তব্য আবার) এটি প্রয়োজন?
এমএস 210

1
@ জংহওয়ানমিন আমি আরও বিস্তারিতভাবে কী যুক্ত করেছি তা দেখুন (বিশেষত মন্তব্যগুলি); বা, একই মেটা প্রশ্নে, এই উত্তর। আপনার বর্তমান প্রশ্নটি সেরা স্কোরিং প্রোগ্রাম জমা দেওয়ার আগে 2 ^ 2 = 4 টি প্রোগ্রাম তৈরি করতে এবং প্রতিটি প্রোগ্রামের স্কোর গণনা করার জন্য পোস্টারদের জন্য জিজ্ঞাসা করে। হয় এটির প্রয়োজন যখন আপনি মনে করেন এটি আরও ভাল চ্যালেঞ্জের জন্য আসে, বা যদি আপনি মনে করেন এটি আরও খারাপ চ্যালেঞ্জের জন্য পরিণত করে।
Sanchises

2
@ জংহওয়ানমিন মেলা যথেষ্ট। তাদের অবশ্যই গল্ফ 3 প্রোগ্রাম এবং উত্তর জমা দেওয়ার আগে প্রতিটি স্বতন্ত্র স্কোর গণনা করতে হবে। আপনার এখানে যা রয়েছে তা তিনটি চ্যালেঞ্জ একটিতে আবৃত। আমি পৃথক চ্যালেঞ্জ হিসাবে ভিজ্যুয়ালাইজেশন পোস্ট করার সুপারিশ করব।
Sanchises

উত্তর:


2

জাভাস্ক্রিপ্ট (ES6), 96 89 80 79 74 73 বাইট

f=($,_=~Math.log2($))=>0>_?[(g=f=>$&1<<~_++&&[1,g(),g()])(),...f($,_)]:[]
<input type="number" value="1337" oninput="document.querySelector('#x').innerHTML=JSON.stringify(f(+this.value))"/><br/><pre id="x"></pre>

একটি ফাংশন সংজ্ঞায়িত করে fযা নেস্টেড অ্যারে প্রদান করে। এইচটিএমএল কোডটি কেবল পরীক্ষার জন্য।


এক সেকেন্ডের জন্য আমি ভাবছিলাম "হেক $&ছাড়া .replaceকী করছে ?" : পি
ইটিএইচ প্রোডাকশনগুলি

@ETH প্রোডাকশনগুলি আমি ভীষণর নামগুলি বিরক্ত হয়ে গিয়েছিলাম এবং অবরুদ্ধ করেছি। খুব খারাপ জেএস অন্য একক প্রতীকের জন্য অনুমতি দেয় না: ডি
পূর্কাকাডারী

9

বেফুঞ্জ, 138 117 104 বাইট

p&1v
%2:_v#:/2p9p00+1:g00
3\9g<>$\:!v!:<
9g!v ^,"}"_1-\1-:
"0"_2\"1{",,:|:,
`#@_\:#v_"}",>$\:8
,"0":-1<^

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

ব্যাখ্যা

লাইন 1 স্টিডিন থেকে একটি সংখ্যা পড়ে এবং লাইন 2 সেই সংখ্যাটিকে একটি বাইনারি ক্রমে রূপান্তরিত করে যা এটি লাইনের 10 প্লেতে ফিল্ডফিল্ডে সংরক্ষণ করে 3 থেকে লাইন 3 তারপর বাইনারি অঙ্কগুলিতে পুনরাবৃত্তি করে প্রতিটি অঙ্ক প্রক্রিয়াজাত হওয়ার সাথে সাথে যথাযথ গাছের উপস্থাপনাকে আউটপুট করে। বেফুঞ্জ স্ট্যাকটি গাছের গভীরতার উপর নজর রাখতে এবং প্রতিটি স্তরে কত পাতার জায়গা বাকি রয়েছে তা জানতে আমরা কীভাবে একটি নতুন শাখা তৈরি করব তা জানি। 6 এবং 7 লাইনগুলি 0কোনও খালি পাতা পূরণ করতে চূড়ান্ত প্যাডিং পরিচালনা করে ।

এটি যথাসম্ভব গল্ফ করার জন্য, আমি আউটপুট থেকে বহির্মুখী বাইরের ধনুর্বন্ধনী থেকে কমাগুলি সরিয়েছি। এটি এখনও গাণিতিক সমাধানটি পরাজিত করতে পারেনি, তবে চেষ্টা করে মজা পেয়েছে।

যদি আপনি দেখতে চান যে এটি মূল ভার্বোজ আউটপুট ফর্ম্যাটটির সাথে কেমন দেখাচ্ছে তবে আমি কোডটির পূর্ববর্তী সংস্করণটি এখানে (131 বাইট) সংরক্ষণ করেছি।


1
(এটির পর্যাপ্ত পরিমাণ নেই: ডি)
অ্যাডিসন

4

গণিত, 167 161 বাইট

b=Append;a=If[#&@@#>0,a[Rest@#~b~0,a[#,#3[#,{1,#4,#2},##5]&,#3,#2,##4]&,#2,##3],
#2[Rest@#~b~0,0,##3]]&;a[#~IntegerDigits~2,If[c=#3~b~#2;Tr@#>0,a[#,#0,c],c]&,
{}]&

বেনামে ফাংশন। ইনপুট হিসাবে একটি সংখ্যা নেয় এবং আউটপুট হিসাবে একটি নির্বিচারে নেস্ট করা সংখ্যার তালিকা দেয়। স্পষ্টতার জন্য লাইন ব্রেকগুলি যুক্ত হয়েছে। ধারাবাহিকতা জড়িত কিছু প্রক্রিয়া ব্যবহার করে, কিন্তু আমি আর এ সম্পর্কে চিন্তা করতে খুব ক্লান্ত।


#[[1]]#&@@#একটি বাইট সংরক্ষণ করা উচিত। !#~FreeQ~1পরিবর্তে #~MemberQ~1পাশাপাশি একটি বাইট সংরক্ষণ করে।
জংহওয়ান মিন

4

গণিত, 115 109 108 104 98 বাইট

(i=#~IntegerDigits~2;f:=Switch[If[i=={},0,i={##2};#]&@@i,0,0,1,f~1~f];NestWhileList[f&,f,i!={}&])&

ত্রুটি বার্তা উত্পন্ন করে যা নিরাপদে উপেক্ষা করা যায়। একটি বাইনারি বন আউটপুট। এটি নমুনা আউটপুট থেকে কিছুটা আলাদা কারণ এটি1 এটি একটি Headতালিকার প্রথম উপাদান নয়। (যেমন 1[0, 0]পরিবর্তে {1, 0, 0})

ত্রুটি-মুক্ত সংস্করণ (104 বাইট)

(i=#~IntegerDigits~2;f:=Switch[If[i=={},i={0}];(i={##2};#)&@@i,0,0,1,f~1~f];NestWhileList[f&,f,i!={}&])&

ব্যাখ্যা

i=#~IntegerDigits~2;

ইনপুটটিকে বেস -২ তালিকায় রূপান্তর করুন। এটি সংরক্ষণ করুন i

f:=

SetDelay f নিম্নলিখিত (যখনই মূল্যায়ন করা হয় f ডাকা হবে ):

Switch[If[i=={},0,i={##2};#]&@@i,0,0,1,f~1~f]

Switch বিবৃতি।

প্রথমত, iখালি থাকলে আউটপুট0 । যদি তা না হয় তবে প্রথম উপাদানটির আউটপুট iএনে তালিকা থেকে বাদ দিন। নিয়ন্ত্রণ পরিবর্তনশীল হিসাবে আউটপুট ব্যবহার করুন।

যদি নিয়ন্ত্রণ ভেরিয়েবল হয় তবে 0আউটপুট 0। যদি এটি হয় তবে 1আউটপুট 1[f, f](পুনরাবৃত্ত)।

NestWhileList[f&,f,i!={}&]

iখালি না থাকাকালীন , কল করতে থাকুন f। আউটপুট ফলাফল, সঙ্গে মোড়ানো List

উদাহরণ

(i=#~IntegerDigits~2;f:=Switch[If[i=={},0,i={##2};#]&@@i,0,0,1,f~1~f];NestWhileList[f&,f,i!={}&])&[1337]

{1[0, 1[0, 0]], 1[1[1[0, 0], 1[0, 0]], 0]}

বিকল্প সমাধান (120 বাইট)

আমার 104 বাইট সমাধানের জন্য একই তবে আউটপুটটিকে প্রশ্নের উত্তরটিতে রূপান্তর করে।

(i=#~IntegerDigits~2;f:=Switch[If[i=={},i={0}];(i={##2};#)&@@i,0,0,1,f~1~f];NestWhileList[f&,f,i!={}&]//.1[a__]:>{1,a})&

2

পাইথন 2, 133 118 117 বাইট

আংশিক পুনরাবৃত্তি, আংশিক পুনরাবৃত্তি। আমি একটি পূর্ণসংখ্যা ব্যবহার করার চেষ্টা করেছি, তবে গাছটি সর্বাধিক তাৎপর্যপূর্ণ বিট দিয়ে শুরু হয়, তাই আমি মনে করি এটি এর পক্ষে উপযুক্ত নয়।

def t():global b;a=b[:1];b=b[1:];return a and'0'<a and[1,t(),t()]or 0
b=bin(input())[2:]
L=[]
while b:L+=t(),
print L

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


1

জাভা 8, 367 বাইট

Golfed:

class f{static String r="";static int p=0;static void g(char[]s,int k){if(p>=s.length||s[p]=='0'){r+="0";p++;return;}else{r+="{1";p++;g(s,k+1);g(s,k+1);r+="}";}if(k==0&&p<s.length)g(s,0);}public static void main(String[]a){java.util.Scanner q=new java.util.Scanner(System.in);r+="{";g(Integer.toBinaryString(q.nextInt()).toCharArray(),0);r+="}";System.out.print(r);}}

Ungolfed:

class f{
    static String r="";
    static int p=0;
    static void g(char[]s,int k){
        // if there's empty space in last tree or current character is a 0
        if(p>=s.length || s[p]=='0'){
            r+="0";
            p++;
            return;
        }
        // if current character is a 1
        else{
            r+="{1";
            p++;
            // left branch
            g(s,k+1);
            // right branch
            g(s,k+1);
            r+="}";
        }
        // if they're still trees that can be added
        if(k==0 && p<s.length)g(s,0);
    }
    public static void main(String[]a){
        java.util.Scanner q=new java.util.Scanner(System.in);
        r+="{";
        g(Integer.toBinaryString(q.nextInt()).toCharArray(),0);
        r+="}";
        System.out.print(r);
    }
}

1

DUP , 84 বাইট (82 টি অক্ষর)

0[`48-$1_>][\10*+]#%1b:[$1>][2/b;1+b:]#[['{,1.b;1-b:FF'},][0.b;1-b:]?]⇒F[b;0>][F]#

গল্ফিং কারণে, আমি বাইরের কোঁকড়া ধনুর্বন্ধনী এবং কমাগুলি থেকে মুক্তি পেয়েছি কারণ সেগুলি গাছগুলি পুনর্গঠনের জন্য প্রয়োজনীয় নয়।

উদাহরণ ফলাফল:

0      → 0
1      → {100}
44     → {10{1{100}0}}
63     → {1{1{1{1{1{100}0}0}0}0}0}
404    → {1{100}{10{100}}}
1023   → {1{1{1{1{1{1{1{1{1{100}0}0}0}0}0}0}0}0}0}
1024   → {100}00000000
1025   → {100}0000000{100}
1026   → {100}000000{100}
1027   → {100}000000{1{100}0}
1028   → {100}00000{100}
1337   → {10{100}}{1{1{100}{100}}0}
4274937288 → {1{1{1{1{1{1{10{1{100}{1{1{100}{10{1{1{10{1{1{100}{100}}0}}0}0}}}0}}}0}0}0}0}0}0}
4294967297 → {100}00000000000000000000000000000{100}

ব্যাখ্যা:

0[`48-$1_>][\10*+]#           While loop to read in the characters and convert them into a
                              base-10 integer.
0                             Push 0 (temporary value)
 [`48-$0>]       #            While input character-48 (digit)>-1
          [     ]
           \                      Swap top values
            10                    Push 10
              *                   Multiply (temporary value by 10)
               +                  Add to input value
%                                 Pop stack (EOL)
1b:                           Variable b=1 (bit count)
[$1>][2/b;1+b:]#              While loop to convert the number to base-2 digits on the
                              data stack, MSB on top. Each iteration increments bit count b.
[$1>]          #              While (DUP>1)
     [        ]#
      2                           Push 2
       /                          MOD/DIV (pushes both mod and div on the stack)
        b;1+b:                    Fetch b, increment, store b


[['{,1.b;1-b:FF'},][0.b;1-b:]?]⇒F     
[                             ]⇒F     Define operator F:
                                      pop top stack value
 [                ]          ?        if value != 0:
  '{,1.                                   print '{1'
       b;1-b:                             fetch b, decrement b, store b
             F                            execute operator F
              F                           execute operator F again
               '},                        print '}'
                   [        ]?        if value == 0:
                    0.                    print '0'
                      b;1-b:              fetch b, decrement b, store b
[b;0>][F]#
[b;0>]   #                            While (fetch b, b>0==true)
      [F]#                                execute operator F

Quirkster.com এ অনলাইন জাভাস্ক্রিপ্ট ডিইউপি ইন্টারপ্রেটার দিয়ে এটি ব্যবহার করে দেখুন বা জুলিয়ায় লেখা আমার ডিইপি ইন্টারপ্রেটারের আমার গিটহাবের সংগ্রহস্থলটি ক্লোন করুন ।

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