চাবিগুলির জন্য বন দেখতে পাচ্ছেন না


16

এমন কোনও প্রোগ্রাম বা ফাংশন লিখুন যা কোনও যুক্তিসঙ্গত সুবিধাজনক বিন্যাসে যেমন 4, 0, -1, -6, 2বা হিসাবে পূর্ণসংখ্যার কোনও অযৌক্তিক তালিকা গ্রহণ করে [4 0 -1 -6 2]

একটি স্ট্রিং মুদ্রণ করুন বা ফিরে আসুন যা ASCII আর্ট ফরেস্ট হিসাবে তালিকাটিকে চিত্রিত করে যেখানে প্রতিটি সংখ্যা আনুপাতিক উচ্চতার গাছ হয়ে যায়। প্রতিটি গাছ নীচে আউটপুটটিতে পাঠ্যের চারটি কলাম নেয়:

  • একটি ধনাত্মক পূর্ণসংখ্যা এন এমন একটি গাছে পরিণত হয় যার বেস হয় __|_এবং শীর্ষে থাকে এবং এর মাঝখানে ^ N স্তর / \থাকে।

    উদাহরণস্বরূপ, যখন এন = 1 গাছ থাকে

      ^
     / \
    __|_
    

    যখন এন = 2 গাছ হয়

      ^
     / \
     / \
    __|_
    

    যখন N = 3 গাছ হয়

      ^
     / \
     / \
     / \
    __|_
    

    ইত্যাদি।

  • একটি নেতিবাচক পূর্ণসংখ্যা N ঠিক একই স্থানের পরিবর্তে একটি উল্লম্ব দণ্ড বাদে শাখা প্রশাখার মধ্যে সম্পর্কিত ধনাত্মক গাছের মতো হয়ে যায়।

    উদাহরণস্বরূপ, যখন এন = -1 গাছ হয়

      ^
     /|\
    __|_
    

    যখন N = -2 গাছ হয়

      ^
     /|\
     /|\
    __|_
    

    যখন N = -3 গাছ হয়

      ^
     /|\
     /|\
     /|\
    __|_
    

    ইত্যাদি।

  • পূর্ণসংখ্যা 0 হলে প্রযুক্তিগতভাবে কোনও গাছ থাকে না, কেবলমাত্র চারটি আন্ডারস্কোরের খালি জায়গা:

    ____
    

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

উদাহরণ হিসাবে, আউটপুট 4 0 -1 -6 2হবে

              ^
             /|\
  ^          /|\
 / \         /|\
 / \         /|\  ^
 / \      ^  /|\ / \
 / \     /|\ /|\ / \
__|_______|___|___|__

নোট করুন যে কীভাবে গাছের নিদর্শনগুলিতে সর্বদা শূন্য জায়গার শীর্ষস্থানীয় কলাম থাকে তবে শেষ গাছের ডানদিকে প্যাডে একটি আন্ডারস্কোর যুক্ত করতে হয়েছিল।

এছাড়াও:

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

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

আরও উদাহরণ

3:

  ^
 / \
 / \
 / \
__|__

-2:

  ^
 /|\
 /|\
__|__

0:

_____

0, 0:

_________

0, 1, 0:

      ^
     / \
______|______

0, -1, 2, -3, 4:

                  ^
              ^  / \
          ^  /|\ / \
      ^  / \ /|\ / \
     /|\ / \ /|\ / \
______|___|___|___|__

উত্তর:


6

পাইথ, 48 বাইট

j_.t+sm.i,J\_?d++\|sm?>d0\ \|d\^Jms+Jmkd"/\\"QJd

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

সম্পূর্ণ ব্যাখ্যার জন্য খুব অলস। এখানে কেবল সংক্ষিপ্ত বিবরণ:

আমি প্রথমে কলাম তৈরি করি। সুতরাং চিত্র:

      ^ 
  ^  /|\
 / \ /|\
__|___|__

হিসাবে উত্পন্ন হয়:

["_", "_/", "| ^", "_\", "_", "_//", "|||^", "_\\", "_"]

লক্ষ্য করুন, আমি কেবল নীচের অংশটি তৈরি করছি (স্পেস ব্যতীত সমস্ত কিছু)। এবং আমি এগুলিকে নীচে থেকে উপরে তৈরি করছি। এটি বেশ সোজা হয়ে গেছে।

তারপরে আমি .tস্ট্রিংগুলিতে স্পেস যুক্ত করতে পদ্ধতিটি ব্যবহার করতে পারি , যাতে প্রতিটি স্ট্রিংয়ের সমান দৈর্ঘ্য হয়। এবং তারপরে আমি অর্ডারটি বিপরীত করব এবং মুদ্রণ করব।


একটি দ্রষ্টব্য হিসাবে: এটি যদি সত্যিকারের আউটপুট হয় তবে আপনি _শেষ গাছের পরে ট্রেলিং (আন্ডারস্কোর) যুক্ত করতে ভুলে থাকতে পারেন ।
insertusernamehere

1
@insertusernamehere ধন্যবাদ, সম্পূর্ণরূপে চিহ্ন উপেক্ষিত _
জাকুব

7

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

a=input()
l=max(map(abs,a))
while l+2:s=' _'[l<0];print(s+s.join((([' ^ ','//| \\\\'[x>0::2],'   '][cmp(abs(x),l)],'_|_')[l<0],s*3)[x==0]for x in a)+s).rstrip();l-=1

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


4

পিএইচপি, 231 277 বাইট

এই চ্যালেঞ্জটির একটি সুন্দর আউটপুট রয়েছে।

$x=fgetcsv(STDIN);for(;$i<2+max(array_map(abs,$x));$i++)for($j=0;$j<count($x);){$_=$x[$j++];$o[$i].=!$i?$_?'__|_':____:(abs($_)>=$i?0>$_?' /|\\':' / \\':($i-1&&abs($_)==$i-1?'  ^ ':'    '));}echo implode("
",array_reverse($o))."_";

কমা দ্বারা পৃথক করা তালিকা পড়ে (হোয়াইটস্পেসগুলি alচ্ছিক) এ থেকে STDIN:

$ php trees.php
> 1, 2, 0, -4, 6

Ungolfed

$x=fgetcsv(STDIN);
for(;$i<2+max(array_map(abs,$x));$i++)
    for($j=0;$j<count($x);){
        $_=$x[$j++];
        $o[$i] .= !$i ? $_?'__|_':____
                      : (abs($_)>=$i ? 0>$_?' /|\\':' / \\'
                                     : ($i-1&&abs($_)==$i-1 ? '  ^ ' : '    '));
    }
echo implode("\n",array_reverse($o))."_";

সম্পাদনাগুলি

  • সংরক্ষিত 46 বাইট । বাতিল অ্যারে ইনিশিলিয়েশন, if/elseটের্নারি অপারেটরগুলির সাথে প্রতিস্থাপন করা হয়েছে এবং কয়েকটি বাইট সংরক্ষণ করতে কিছু ভেরিয়েবলকে আশেপাশে সরানো হয়েছে।

2

রুবি, 157 156 153 টি অক্ষর

->h{r=[]
h.map{|i|j=i.abs
r+=[s=?_,?/*j+s,i==0?s:?^+(i>0?' ':?|)*j+?|,?\\*j+s].map{|l|l.rjust(h.map(&:abs).max+2).chars}}
r.transpose.map{|l|l*''}*$/+?_}

প্রথম Array.transposeদিকে একটি ভাল ধারণা মত দেখায় কারণ এটি রচনা । আর না.

নমুনা রান:

2.1.5 :001 > puts ->h{r=[];h.map{|i|j=i.abs;r+=[s=?_,?/*j+s,i==0?s:?^+(i>0?' ':?|)*j+?|,?\\*j+s].map{|l|l.rjust(h.map(&:abs).max+2).chars}};r.transpose.map{|l|l*''}*$/+?_}[[4, 0, -1, -6, 2]]
              ^     
             /|\    
  ^          /|\    
 / \         /|\    
 / \         /|\  ^ 
 / \      ^  /|\ / \
 / \     /|\ /|\ / \
__|_______|___|___|__

প্রথম মানচিত্র থেকে টুকরোগুলি ফেরত না দিয়ে আলাদা আলাদা অ্যারেগুলিতে সংগ্রহ করা হ্রাসের ব্যবহার এড়াতে দেওয়া উচিত।
manatwork

0

সি #, 318 বাইট

আমি অ্যারে স্থানান্তর করার চেষ্টা করেছি। আমি নিশ্চিত না যে এটিই সেরা সমাধান ছিল।

string F(int[]a){int i=a.Length,j,w=i*4+1,h=0;string f="",o=f;for(;i-->0;){j=a[i];f+=","+" _,".PadLeft(j=j>0?j+3:-j+3,'\\')+(j>3?"^"+"|_,".PadLeft(j,a[i]<0?'|':' '):"_,")+" _,_".PadLeft(j+1,'/');h=h<j?j:h;}f="_".PadLeft(h=h>3?h:2,'\n')+f;for(i+=h<3?1:0;++i<h;)for(j=w;j-->0;)o+=f.Split(',')[j].PadLeft(h)[i];return o;}

স্পষ্টতার জন্য ইন্ডেন্টেশন এবং নিউলাইনস:

string F(int[]a)
{
    int i=a.Length,
        j,
        w=i*4+1,
        h=0;
    string f="",o=f;
    for(;i-->0;){
        j=a[i];
        f+=","+" _,".PadLeft(j=j>0?j+3:-j+3,'\\')+(j>3?"^"+"|_,".PadLeft(j,a[i]<0?'|':' '):"_,")+" _,_".PadLeft(j+1,'/');
        h=h<j?j:h;
    }
    f="_".PadLeft(h=h>3?h:2,'\n')+f;
    for(i+=h<3?1:0;++i<h;)
        for(j=w;j-->0;)
            o+=f.Split(',')[j].PadLeft(h)[i];
    return o;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.