একটি নান্দনিকভাবে আনন্দদায়ক বিভাজক গাছ তৈরি করুন


43

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

ব্যবধান বিধি

গাছের নোডগুলি স্থান দেওয়ার জন্য আমাদের নীচের নিয়ম রয়েছে:

  • মূল থেকে প্রদত্ত গভীরতায় নোডগুলি সমস্তই আউটপুটে পাঠ্য একই লাইনে থাকা উচিত।
  / \ না / \  
 / \ / 3
2 3 2
  • বাম নোডের জন্য, আগত শাখাটি উপরের ডানদিকে থাকা উচিত যদি নোডটি একক-অঙ্কের নম্বর হয়, অন্যথায়, শেষ অঙ্কের ঠিক উপরে। উদাহরণ:
 / এবং /
3 720
  • ডান নোডের জন্য, আগত শাখাটি উপরের বামে হওয়া উচিত যদি নোডটি একক-অঙ্কের নম্বর হয়, অন্যথায়, প্রথম অঙ্কের ঠিক উপরে। উদাহরণ:
\ এবং \
 7 243
  • বহির্গামী বাম শাখাগুলির জন্য, শাখার একটি নম্বর বাম দিকে শুরু করা উচিত। উদাহরণ:
  275
 /
11
  • বহির্গামী ডান শাখাগুলির জন্য, শাখার একটি সংখ্যার ডানদিকে একটি স্থান শুরু করা উচিত। উদাহরণ:
275
   \
   25
  • গাছের একই স্তরের যে কোনও দুটি নোডের মধ্যে ন্যূনতম দুটি স্পেস থাকতে হবে। একই সময়ে, গাছের একই স্তরের যে কোনও দুটি সাবট্রির যথাসম্ভব তাদের মধ্যে কম জায়গা থাকতে হবে।
এই গাছটি কাজ করে না কারণ ** সাবট্রিজগুলি ** খুব কাছে।

        504           
       /          
      /         
     /        
    /       
   21। 24     
  /। /    
 /। /   
3 7. 4 6  
        । / \ / \
        .2 2 2 3

যদিও এই গাছটির শাখাগুলির মধ্যে যথেষ্ট জায়গা রয়েছে।

         504           
        /          
       /         
      /        
     /       
    /      
   21 ... 24     
  / \ ... /    
 / \ ... /   
3 7 ... 4 6  
        ... / \ / \ 
        ... 2 2 2 3
  • যদি কোনও দুটি সাবট্রি গাছ গাছে খুব কাছাকাছি থাকে /\তবে তাদের পিতামাতার উপরে গাছের সাথে আরও একটি ডাল যুক্ত করে আলাদা করা যায় ।
   441                              
  / \ শেষ সারিটি এখনও পূরণ করা হয়নি এবং আমরা ইতিমধ্যে স্থান সরিয়ে নিয়েছি।
 21 21
/ \ / \

অন্য শাখা শাখা যুক্ত করুন

     441                              
    / \ প্রায়, তবে 7 এবং 3 খুব কাছাকাছি রয়েছে।
   / \ আরও একটি সারিতে এটি করা উচিত।
  21 21
 / \ / \
3 7 3 7

অন্য শাখা শাখা যুক্ত করুন

      441
     / \ এবং আমরা সম্পন্ন করেছি।
    /
   /
  21 21
 / \ / \
3 7 3 7

উদাহরণ

একটি সম্পূর্ণ উদাহরণ হিসাবে, 24 এর বিভাজক গাছটি দেখতে পাবেন:

     24
    /  \
   /    \
  4      6
 / \    / \
2   2  2   3

4 এবং 6 হ'ল 24 এর বর্গমূলের নিকটতম বিভাজকের জুটি 4 বামদিকে রয়েছে 4 কারণ এটি ছোট। পরের লাইনে, 2 এর বাম 2 নম্বর, কারণ এটি ছোট।

63 এর জন্য বিভাজক গাছটি দেখতে দেখতে পাওয়া উচিত:

  63        and NOT like this        63
 /  \                               /  \
7    9                             3   21
    / \                               /  \
   3   3                             7    3

ভুল গাছে, 3 এবং 21 টি 63 এর বর্গমূলের নিকটবর্তী বিভাজকের জুটি নয় এবং 3 এবং 7 সঠিকভাবে সাজানো হয় না। যদিও 21 তে শাখা স্থাপন সঠিক correct

42 এর জন্য, আপনার উচিত:

    42      and NOT        42
   /  \                   /  \
  6    7                 21   2
 / \                    /  \
2   3                  3    7

চলুন 720 টি একবার দেখে নেওয়া যাক Note নোট করুন যে আমাদের পাঁচটি স্তরের শাখা দরকার 720যাতে ফলস 24এবং 30সাবট্রিজগুলি যথাযথভাবে ফাঁকা থাকে। এছাড়াও, এটি লক্ষ্য করুন 24এবং এর 30দুটি স্তরের শাখা রয়েছে কারণ 4এবং 6তাদের বাচ্চাদের নোড রয়েছে যাগুলির জন্য সঠিক ব্যবধান প্রয়োজন এবং বাচ্চাদের নোডগুলি বাচ্চাদের নোডের 30মতো একই স্তরের হওয়া দরকার 24

           720
          /   \
         /     \
        /       \
       /         \
      /           \ 
     24           30
    /  \         /  \
   /    \       /    \
  4      6     5      6
 / \    / \          / \
2   2  2   3        2   3

চ্যালেঞ্জ

  • আপনার কাজটি হ'ল সঠিকভাবে ব্যবধানযুক্ত নান্দনিকভাবে আকর্ষণীয় বিভাজন গাছকে ইনপুট দেওয়ার জন্য তৈরি করা n, যেখানে n1 এর চেয়ে বড় ধনাত্মক পূর্ণসংখ্যা হয়।
  • আপনার আউটপুটে নেতৃস্থানীয় এবং পিছনের জায়গাগুলি এবং শীর্ষস্থানীয় এবং পিছনের নতুন লাইনগুলি থাকতে পারে তবে অন্যথায় উপরে বর্ণিত ব্যবধান নিয়ম মেনে চলতে হবে।
  • আপনার আউটপুটটিকে অনুমতি দেওয়া হচ্ছে: পাঠ্য শিল্প, একটি চিত্র (প্রয়োজনে অন্য সংযোজনগুলি যুক্ত করতে হবে)।
  • চিত্রগুলির জন্য, আপনার গাছের নোডগুলি যথাযথভাবে ফাঁকা রয়েছে এবং গাছের একই উচ্চতায় নোডগুলি একই চিত্রের একই উচ্চতায় রয়েছে তা নিশ্চিত করুন।
  • এটি কোড গল্ফ। সর্বনিম্ন সংখ্যা বাইট (বা সমতুল্য) জিতেছে।

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

আরও পরীক্ষার কেস:

2

  4
 / \
2   2

    20
   /  \
  4    5
 / \
2   2

  323
 /   \
17   19

                        362880
                       /      \
                      /        \
                     /          \
                    /            \
                   /              \
                  /                \
                 /                  \
                /                    \
               /                      \
              /                        \
            576                        630
           /   \                      /   \
          /     \                    /     \
         /       \                  /       \
        /         \                /         \
       /           \              /           \
      /             \            /             \
     24             24          21             30
    /  \           /  \        /  \           /  \
   /    \         /    \      /    \         /    \
  4      6       4      6    3      7       5      6
 / \    / \     / \    / \                        / \
2   2  2   3   2   2  2   3                      2   3

              1286250
             /       \
            /         \
           /           \
          /             \
         /               \
      1050               1225
     /    \             /    \
    /      \           /      \
   /        \         /        \
  30        35       35        35
 /  \      /  \     /  \      /  \
5    6    5    7   5    7    5    7
    / \
   2   3

এই চ্যালেঞ্জের জন্য আপনাকে ধন্যবাদ। আমি এখন এই জিনিসগুলি প্রতিবার এগুলিকে আঁকাই না করে কল্পনা করতে পারি: ডি
কনর ও'ব্রায়েন

গাছটির উদাহরণগুলির মতো দেখতে কি দরকার, বা আমি অন্তর্নির্মিত গণিতের ফাংশনটি ব্যবহার করতে পারি? এটা দেখে মনে হচ্ছে এই , কিন্তু গুণকনির্ণয় সঙ্গে।
জংহওয়ান মিন

@ জেএইচএম আমি জানতাম আমার গ্রাফিকাল-আউটপুট ট্যাগ রাখা উচিত ছিল । হ্যাঁ, আপনি এটি অন্তর্নির্মিত ব্যবহার করতে পারেন। আমি চ্যালেঞ্জ সম্পাদনা করব।
শার্লক 9

উত্তর:


29

পাইথন 2 , 711 651 575 559 554 547 539 540 530 522 বাইট

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

গল্ফস: প্রায়শই ব্যবহৃত কিছু ফাংশনগুলির নামকরণ এবং ফলাফল কীভাবে ফিরে আসে তা পরিবর্তন করে -60 বাইট। -73 সাবট্রির উচ্চতা কীভাবে পরীক্ষা করা হয়, কীভাবে ব্যবধানের ভেরিয়েবল গণনা করা হয়, এবং ফলাফল কীভাবে ফিরে আসে তা পরিবর্তন করে বাইট। ফ্লিপটকের isdigit()প্রতিস্থাপন থেকে -3 বাইট । -16 বাইটস isdigit()আরও আরও গল্ফ করে যে প্রতিস্থাপনটি আরও "" প্রতিস্থাপন করে E। গৌণ উন্নতি থেকে -5 বাইট এবং পাইথন 3 থেকে পাইথন 2-এ পরিবর্তন করে ফলাফল কীভাবে ফিরে আসে তা পরিবর্তন করে -7 বাইট। একটি সংক্ষিপ্ত পরিবর্তন থেকে -8 বাইটগুলি কীভাবে Aসংজ্ঞায়িত করা হয়, কীভাবে Tসংজ্ঞায়িত করা হয় তা পরিবর্তন করা হয় এবং যুক্ত করা হয় W, যে কোনও অনুশাসন তার কমসেটের তুলনায় কমপক্ষে একটি দীর্ঘ শাখাযুক্ত, অপরিহার্যভাবে তার সমকক্ষের চেয়ে সামগ্রিকভাবে দীর্ঘ হয় , অপসারণ করেQপুরোপুরি, এবং ফলাফল কীভাবে ফিরে আসে তা সম্পাদনা করা হচ্ছে। -10 ব্যবহার থেকে বাইট A<10পরিবর্তে L(S(A))<2জন্য Aএবং B। -8 বাইটস ডিফল্ট পরিবর্তন Hথেকে [0]যেহেতু কোডটি কখনও Hপরিবর্তন না করে পরিবর্তিত ডিফল্ট যুক্তিগুলির সমস্যা এড়ানো যায় , পরিবর্তে কীভাবে qসংজ্ঞায়িত হয় (B>9)পরিবর্তিত করে 1-(B<10), pপুরোপুরি মুছে ফেলা এবং এর Fজন্য প্রতিস্থাপন হিসাবে তৈরি করে p+q-M

ত্রুটি সংশোধন করা: হাইপোথিসিসটি ভুল ছিল, এতে কাউন্টারে নমুনা ছিল 11**9 = 2357947691। +1 বাইট

G=range;L=len;E=" "
def t(n,H=[0]):
 A=max(z*(n%z<1)for z in G(1,int(n**.5)+1));B=n/A;Z=str(n);M=L(Z)
 if A<2:return[Z]
 T=max([i for i in G(L(w))if"/"not in w[i]]for w in(t(A),t(B)));V=H[1:]or[T[k+1]-T[k]-1for k in G(L(T)-1)];x=t(A,V);y=t(B,V);P=x[0].rindex(str(A)[-1])+(A<10);q=y[0].index(str(B)[0])+(B>9);F=L(x[0])-P+q-M;h=H[0]or(F+M%2+2)/2or 1;return[E*(P+J)+(J<h and"/"+E*(2*h+M-2*J-2)+"\\"or Z)+E*(L(y[0])-q+J)for J in G(h,-1,-1)]+[(E*(2*h-F)).join(I<L(w)and w[I]or E*L(w[0])for w in(x,y))for I in G(max(L(x),L(y)))]

ব্যাখ্যা

পুরো ফাংশনটি প্রায় চারটি ধাপে সিদ্ধ করা যায়:

  1. বৃহত্তম ভাজক যুগল নির্ধারণ n, Aএবং B
  2. এর সাবট্রিজগুলি তৈরি করুন Aএবং Bপ্রয়োজনীয় হিসাবে পুনরায় অঙ্কন করুন ।
  3. সাবট্রির মধ্যে যে জায়গাগুলি যেতে হবে তার সংখ্যা নির্ধারণ করুন।
  4. নতুন বিভাজক গাছ আঁকুন এবং ফিরিয়ে দিন।

আমি প্রতিটি পদক্ষেপের মধ্য দিয়ে যাব।

পদক্ষেপ 1. এই খুব সহজ পদক্ষেপ, বেশ স্পষ্টভাবে। z1 এবং বর্গমূলের মধ্যে বিভাজনের জন্য প্রতিটি সংখ্যার মধ্যে পরীক্ষা করে দেখুন nএবং বৃহত্তম zএবং n//zএটি মেলে grab রিটার্ন মাত্র str(n)যদি nমৌলিক (হয় A==1বা B==n)

পদক্ষেপ 2. এর সাব-ট্রি আঁকুন Aএবং Bএবং নম্বর পেতে /\সাব-ট্রি বিভিন্ন নোডের মধ্যে শাখা। এটি করার জন্য, আমরা প্রতিটি পদক্ষেপের সূচকগুলি পাই যাগুলির মধ্যে অঙ্ক রয়েছে, সূচকের প্রথম পার্থক্যগুলি পেয়েছি এবং আবার 1 বিয়োগ করে। আমাদের উচ্চতা একবার হয়ে গেলে, আমরা সেগুলি সবচেয়ে বড় পেতে তুলনা করি এবং নতুন উচ্চতা সহ সাবট্রিজগুলি আবার অঙ্কিত করি।

আমার কাছে একটি সন্দেহজনক সন্দেহ রয়েছে যে সামগ্রিকভাবে লম্বা যে সাবট্রিটি সর্বদা সংক্ষিপ্ত সাবট্রির শাখাগুলির মতো দীর্ঘ বা তার সমান শাখা থাকে এবং কোডটি গল্ফ করার জন্য আমি এটি ব্যবহার করতে পারি, তবে এখনও এর কোনও প্রমাণ আমার কাছে নেই। কাউন্টারেক্সেক্সেল ইন 11**9 = 2357947691

পদক্ষেপ 3. এই পদক্ষেপটি লিখতে কয়েক মাস সময় নিয়েছিল। পদক্ষেপ 2 লিখতে এবং ডিবাগ করতে কয়েক দিন সময় নিয়েছিল, তবে ব্যবধানের সঠিক সূত্রগুলি খুঁজতে যুগে যুগে সময় লেগেছিল। আমি যা অনুভব করেছি তা আমি কয়েকটি অনুচ্ছেদে ফেলেছি কিনা তা আমি দেখতে পাচ্ছি। মনে রাখবেন যে এই ব্যাখ্যায় কোডের কিছু কিছু আসল কোড থেকে সরে গেছে g

প্রথমত, p, q, h, P, Q, sএবং Mpবাম শাখার /প্রান্ত থেকে বাম সাবট্রির ডান প্রান্তে অক্ষরের সংখ্যা । qডান সাবট্রির বাম প্রান্ত থেকে ডান শাখার প্রান্তে অক্ষরের সংখ্যা /hমূল এবং সাবট্রির মধ্যে শাখার সংখ্যা। Pএবং Qশুধু inverses হয় pএবং qএবং প্রায় শূণ্যস্থান স্থাপন জন্য দরকারী /\রুট পর্যন্ত শাখা nsদুটি সাবট্রির মধ্যে স্পেস যুক্ত সংখ্যা। Mসহজতম; এটি দৈর্ঘ্য n। গ্রাফিকালি রাখুন:

            M
           ---
           720           
 |        /   \          
 |       /     \         
h|      /       \        
 |     /         \       
 |    /           \      
   P    p    s   q   Q   
------______---____------
     24           30     
    /  \         /  \    
   /    \       /    \   
  4      6     5      6  
 / \    / \          / \ 
2   2  2   3        2   3

নির্ধারণের সূত্রটি pহ'ল: p = len(x[0]) - x[0].rindex(str(A)[-1]) - (A<10)দৈর্ঘ্য, বিয়োগফলের এ এর ​​শেষ বর্ণের শূন্য-সূচক, একক-অঙ্কের জন্য সংশোধন বিয়োগ করা A

নির্ধারণের সূত্রটি qহ'ল q = y[0].index(str(B)[0]) + (B>9):, বি এর প্রথম চরিত্রের সূচক, এবং শূন্য-সূচকের জন্য একটি সংশোধন, একক-অঙ্কের জন্য সংশোধন বিয়োগ B(একাধিক-অঙ্কের জন্য একটি সংশোধনের সাথে মিলিত B)।

নির্ধারণের জন্য সূত্র hহল: h = H[0] or (p+q+M%2+2-M)//2 or 1। হয় আমরা একটি পূর্বনির্ধারিত থেকে ধরলাম Hযার অর্থ আমরা গাছটিকে আবার নতুন করে আঁকছি, আমরা ব্যবহার করি (from_the_left + from_the_right + parity_space + 2 - len(root)) // 2), অথবা আমরা শাখা স্তরগুলির সর্বনিম্ন সংখ্যা ব্যবহার করি, 1।

নির্ধারণের জন্য সূত্র sহল: s = 2*h+M-p-q। আমরা বিয়োগ pএবং qতাদের বিস্তৃত এ root এর শাখা মধ্যে স্পেস নম্বর থেকে 2*h + M

পদক্ষেপ ৪. এবং অবশেষে আমরা এটি একসাথে রেখেছি। প্রথমে আমরা মূলটি তৈরি করি [" "*(P+h)+Z+" "*(Q+h)], তারপরে আমরা শাখাগুলিতে সাবট্রির নীচে রেখেছি [" "*(P+J)+"/"+" "*(2*h+M-2*J-2)+"\\"+" "*(Q+J)for J in G(h)][::-1]এবং শেষ পর্যন্ত আমরা আমাদের যথাযথভাবে ব্যবধানযুক্ত সাবট্রিজগুলি রেখেছি [(" "*(2*h+M-p-q)).join([(I<L(w)and w[I]or" "*L(w[0]))for w in(x,y)])for I in G(max(L(x),L(y)))],।

এট ভয়েইল! আমাদের নিজেরাই একটি নান্দনিকভাবে আনন্দদায়ক বিভাজন গাছ আছে!

Ungolfing:

def tree(n, H=[0]):
    A = max(z for z in range(1, int(n**.5)+1) if n%z<1)
    B = n/A
    Z = str(n)
    M = len(Z)
    if A < 2:
        return [Z]

    # redraw the tree so that all of the numbers are on the same rows
    x = tree(A)
    y = tree(B)
    for W in [x, y]:
        T = [i for i in range(len(W)) if "/" not in W[i]]
    V = H[1:] or [T[k+1]-T[k]-1 for k in range(len(T)-1)]
    x = tree(A, V)
    y = tree(B, V)

    # get the height of the root from the two trees
    P = x[0].rindex(str(A)[-1]) + (A < 10)
    p = len(x[0]) - P
    q = y[0].index(str(B)[0]) + (B > 9)
    Q = len(y[0]) - q
    h = hs[0] or (p+q+M%2+2-M)/2 or 1

    # and now to put the root down
    R = []
    s = 2*h+M-p-q
    for I in range(max(len(x),len(y))):
        c = I<len(x) and x[I] or " "*len(x[0])
        d = I<len(y) and y[I] or " "*len(y[0])
        R += c + " "*s + d,
    for J in range(h, -1, -1):
        if J<h:
            C = "/" + " "*(2*h+M-2*J-2) + "\\"
        else:
            C = Z
        R += [" "*(P+J) + C + " "*(Q+J)]
    return R

আপনার isdigitচেক হতে পারে '/'<x[i].strip()[0]<':'?
ফ্লিপট্যাক

14

গণিত, 96 86 81 79 78 বাইট

ধন্যবাদ @ মার্টিনএেন্ডার 2 বাইটের জন্য।

TreeForm[If[PrimeQ@#,#,#0/@(#2[#,#2/#]&[Max@Nearest[Divisors@#,#^.5],#])]&@#]&

আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

ব্যাখ্যা

Max@Nearest[Divisors@#,#^.5]

ইনপুট বিভাজকের তালিকা তৈরি করুন। ইনপুটটির বর্গমূলের নিকটতম উপাদানটি সন্ধান করুন। ( Maxআউটপুট সমতল করার জন্য)

#2[#,#2/#]&

উপরের পাওয়া বিভাজকের দ্বারা ইনপুট ভাগ করে অন্য বিভাজকটি সন্ধান করুন, ফলাফলের শিরোনাম হিসাবে ইনপুটটি প্রয়োগ করুন।

#0/@

প্রক্রিয়া পুনরাবৃত্তি।

If[PrimeQ@#,#, ... ]

যদি ইনপুটটি প্রাইম হয় তবে কিছু করবেন না।

TreeForm

আউটপুট ফর্ম্যাট করুন।

সম্পাদনা করুন: আরও একটি নান্দনিকভাবে আনন্দদায়ক সংস্করণ (258 বাইট)

TreeForm[#/.{a_,_,_}:>a,VertexRenderingFunction->(#2~Text~#&),VertexCoordinateRules->Cases[#,{_,_},Infinity,Heads->True]]&@(If[PrimeQ@#,{##},{##}@@#0@@@({{#,#3-#4{1,√3}/2,#4/2},{#2/#,#3-#4{-1,√3}/2,#4/2}}&[Max@Nearest[Divisors@#,√#],##])]&[#,{0,0},1])&

আউটপুটটি দেখতে এটির মতো দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন


3
Sqrt@#-> #^.5(তবে অবশ্যই আপনি ইনফিক্স স্বরলিপিটি ব্যবহার করতে পারবেন না Nearestতবে তবে আপনি ব্যবহার করতে পারেন Max@)।
মার্টিন এন্ডার

5
এটি নিয়ম অনুসরণ করে তবে গাছটি নান্দনিকভাবে XD থেকে অনেক দূরে
Beta Decay

2
সৌন্দর্য
নেলসন

1
আমি নিশ্চিত যে এটি বৈধ কিনা is উদাহরণগুলির বিপরীতে, প্রতিটি সারির নোডগুলি সমানভাবে ব্যবধানযুক্ত নয়। অতিরিক্তভাবে, লাইনগুলি সঠিক অঙ্কের সাথে সংযুক্ত হয় না।
মেগো

1
@ মেগো ওয়েল, ওপি জানিয়েছে এটি বৈধ ছিল।
আর কাপ,

3

কাঠকয়লা , 302 বাইট

≔⟦⟦N⁰θ⁰¦⁰⟧⟧θFθ«≔§ι⁰ζ≔⌈E…·²Xζ·⁵∧¬﹪ζκκη¿η«F⟦η÷ζη⟧«≔⟦κ⊕§ι¹Iκ⁰¦⁰⟧κ⊞ικ⊞θκ»⊞υι»»≔…⁰⌈Eθ§ι¹ηF⮌竧≔ηι⊕⌈⟦⁰⌈Eυ∧⁼§κ¹ι÷Σ⟦¹§§κ⁵¦⁴‹⁹§§κ⁵¦⁰§§κ⁶¦³‹⁹§§κ⁶¦⁰±L§κ²⟧²⟧FυF²§≔κ⁺³λ⁺⁺§ηι∨⊖L§§κ⁺⁵벦¹§§κ⁺⁵λ⁺³λ»Fυ«§≔§ι⁵¦³⁻⁻§ι³§η§ι¹∨⊖L§§ι⁵¦²¦¹§≔§ι⁶¦³⁻⁺⁺§ι³L§ι²§η§ι¹‹⁹§§ι⁶¦⁰»F⊕Lη«Fθ«F⁼§κ¹ι«←⸿M§κ³→F‹⁵Lκ«↙P↙§ηι↗»§κ²↓F‹⁵LκP↘§ηι»»M⊕§ηι↓

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

u = []; // predefined variable, used as list of branches
q = [[+s, 0, s, 0, 0]]; // list of nodes starts with the root.
for (i of q) { // iterate nodes, includes new nodes
    z = i[0]; // get node value
    h = Math.max(...[...Array(Math.floor(z ** 0.5) + 1).keys()].slice(2).filter(
        k => z % k < 1)); // find largest factor not above square root
    if (h) {
        for (k of [h, z / h]) {
            k = [k, i[1] + 1, `${k}`, 0, 0]; // create child node
            i.push(k); // add each child to parent (indices 5 and 6)
            q.push(k); // and to master nodelist
        }
        u.push(i);
    }
}
h = new Array(Math.max(...q.map(i => i[1]))); // list of branch heights
for (i = h.length; i --> 0; ) {
    // find branch height needed to space immediate children apart at this depth
    h[i] = 1 + Math.max(...u.map(k => k[1] == j && // filter on depth
        1 + k[5][3] + (k[5][0] > 9) + k[6][2] + (k[6][0] > 9) - k[2].length
        >> 1)); // current overlap, halved, rounded up
    // calculate the new margins on all the nodes
    for (k of u) {
        k[3] = h[i] + (k[5][2].length - 1 || 1) + k[5][3]; // left
        k[4] = h[i] + (k[6][2].length - 1 || 1) + k[6][4]; // right
    }
}
// calculate the absolute left margin of all the nodes under the root
for (i of u) {
    i[5][3] = i[3] - h[i[1]] - (i[5][2].length - 1 || 1);
    i[6][3] = i[3] + i[2].length + h[i[1]] - (i[6][0] > 9);
}
// print the nodes (sorry, no transliteration available)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.