আমার উন্মাদ স্ত্রীকে আমাদের ক্রিসমাস ট্রি সাজাতে সহায়তা করুন


36

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

ইনপুট

একটি ইনপুট 2 < n < 10গাছের উচ্চতা এবং 0 < k < nঅলঙ্কারগুলির পৃথক সংখ্যার দেওয়া।

কার্য

গাছের চারপাশে অলঙ্কারগুলি মোড়ানোর সাথে সাথে গাছটিকে শুরু করে সজ্জিত করুন 1incre kযদি আমরা পৌঁছে kএবং সাজানোর জন্য আমাদের আরও শাখা থাকে তবে এখান থেকে আবার শুরু করুন 1

যতক্ষণ না প্যাটার্নটি সন্তুষ্ট থাকে গাছে প্রতিটি অলঙ্কারের একই সংখ্যা না থাকে তবে ঠিক আছে।

অলঙ্কারগুলি ^উপরের সারি বাদে প্রতিটি শাখার উপরে উপস্থিত হওয়া উচিত ।

গাছটি একটি শাখা দিয়ে শুরু করে কাঠামোযুক্ত করা হয় তারপরে পরবর্তী স্তরের প্রতিটি স্তরের সাথে + 1 টি শাখা থাকে যা উপরের দিক থেকে স্তব্ধ হয়ে থাকে:

 ^
^ ^

তৃতীয় সারির জন্য আপনি আরও একটি শাখা যুক্ত করবেন এবং তাদের আবার এমনভাবে আটকে রাখবেন যে কোনও শাখা একই কলামে নেই (যদি আপনি এটি গ্রিডের মতো মনে করেন)।

  ^
 ^ ^
^ ^ ^

আউটপুট

আপনার সজ্জিত গাছ আউটপুট।

উদাহরণ

1।

n = 3, k = 2

  ^      //Height is 3
 ^ ^
^ ^ ^

এখন আমরা প্রতিটি শাখা সাজাইয়া 1 দিয়ে এবং কেতে বৃদ্ধি দিয়ে শুরু করব:

  ^
 1 2
 ^ ^
1 2 1
^ ^ ^

2।

n = 6, k = 5

     ^    //Non-Decorated
    ^ ^
   ^ ^ ^
  ^ ^ ^ ^
 ^ ^ ^ ^ ^
^ ^ ^ ^ ^ ^

     ^    //Decorated
    1 2
    ^ ^
   3 4 5
   ^ ^ ^
  1 2 3 4
  ^ ^ ^ ^
 5 1 2 3 4
 ^ ^ ^ ^ ^
5 1 2 3 4 5
^ ^ ^ ^ ^ ^

3।

n = 5, k = 1

    ^
   ^ ^
  ^ ^ ^
 ^ ^ ^ ^
^ ^ ^ ^ ^

    ^
   1 1
   ^ ^
  1 1 1
  ^ ^ ^
 1 1 1 1
 ^ ^ ^ ^
1 1 1 1 1
^ ^ ^ ^ ^

এটি তাই সংক্ষিপ্ততম কোডটি জয়ী! মজা করো এবং শুভ কামনা!


স্পেস প্রতিটি লাইনের পরে গ্রহণযোগ্য?
মুকুল কুমার

1
@ মুকুলকুমার নো এটির উপরের কাঠামোটি বজায় রাখা উচিত।
জ্যাকসোনাক

আমরা কি কম 10 কে ধরে নিতে পারি? অন্যথায়, সংখ্যাগুলি সারিবদ্ধ কিভাবে?
লুইস মেন্ডো

2
@ লুইসমেন্দো হ্যাঁ ধরে নিন <10 টি ভাল পয়েন্ট
জ্যাক্সকোনাক

উত্তর:


47

সি # 226 221 বাইট

@ মুকুল কুমার এবং @ আওলসডিজিকে ধন্যবাদ 5 বাইট সংরক্ষণ করা

Golfed:

string C(int n,int k){string o="",x;int j=1,i=1,m;for(;i<=n;i++){o+=string.Concat(Enumerable.Repeat("^ ",i)).PadLeft(n+i)+"\n";m=0;x="";if(i<n){while(m<i+1){if(j>k)j=1;x+=j+++" ";m++;}o+=x.PadLeft(n+i+1)+"\n";}}return o;}

Ungolfed:

public string C(int n, int k, WifeMode wifeMode = WifeMode.Maniacal)
{
  string o = "",x;
  int j = 1,i=1,m;

  for (; i <= n; i++)
  {
    o += string.Concat(Enumerable.Repeat("^ ", i)).PadLeft(n+i) + "\n";

    m = 0;
    x = "";

    if (i < n)
    {
      while (m < i + 1)
      {
        if (j > k) j = 1;
        x += j++ + " ";
        m++;
      }

      o += x.PadLeft(n + i + 1) + "\n";
    }
  }

  return o;
}

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

Console.Write(new ChristmasTreeDecorating().C(20, 9));

                   ^ 
                  1 2 
                  ^ ^ 
                 3 4 5 
                 ^ ^ ^ 
                6 7 8 9 
                ^ ^ ^ ^ 
               1 2 3 4 5 
               ^ ^ ^ ^ ^ 
              6 7 8 9 1 2 
              ^ ^ ^ ^ ^ ^ 
             3 4 5 6 7 8 9 
             ^ ^ ^ ^ ^ ^ ^ 
            1 2 3 4 5 6 7 8 
            ^ ^ ^ ^ ^ ^ ^ ^ 
           9 1 2 3 4 5 6 7 8 
           ^ ^ ^ ^ ^ ^ ^ ^ ^ 
          9 1 2 3 4 5 6 7 8 9 
          ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
         1 2 3 4 5 6 7 8 9 1 2 
         ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
        3 4 5 6 7 8 9 1 2 3 4 5 
        ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
       6 7 8 9 1 2 3 4 5 6 7 8 9 
       ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
      1 2 3 4 5 6 7 8 9 1 2 3 4 5 
      ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
     6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 
     ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
    3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 
    ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
   1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 
   ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
  9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 
  ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 
 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^

সম্পাদনা করুন: আমার কাছে একটি খেলার কাস্টিং intছিল ConsoleColor... মরসুমে এটি :)

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

MerryChristmas.gif

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


3
আপনি i=1for
মুকুল কুমার

1
আপনি "\ r \ n" "" \ n "এর সাথে প্রতিস্থাপন করতে পারেন। এটি কোর এবং মনোতে ভাল চলবে।
অ্যালোইসডজি মনিকা

8
একটি C#উত্তর কিছু ভালবাসা পেয়ে ভাল ।
মাইকেল ম্যাকগ্রিফ

@ এলোইসডগ ধন্যবাদ :)
পিট আর্দেন

1
পছন্দ করেছেন একবার ভাবনাটি আমার মাথায়
পিট আর্ডেন

14

05AB1E ,29 27 24 বাইট

আদনানকে ধন্যবাদ তিনটি বাইট সংরক্ষণ!

>GN„^ ×NÝNLO<+²%>ðý}\».c

>G                       For N in [1, ..., input[0]]
  N„^ ×                  Push a string of "^ " N times
       NÝ                Push [0, ..., N]
         NLO<            Compute the decoration offset, sum([1, ..., N])-1
             +           Add the offset value to each array cell
              ²%         Modulo input[1]
                >        Add 1 so that it is in range [1, k] instead of [0, k-1]
                 ðý      Join with spaces, now we have a string with the full decoration for the current layer
                   }     End for
                    \    Remove the last decoration
                     »   Join everything with newlines
                      .c Center all and implicitly display

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


2
আমি মনে করি আপনি NN>*;দ্বারা প্রতিস্থাপন করতে পারেন NLO
আদনান

অবশ্যই! এটি মজার কারণ কারণ আমি N*(N+1)/21 থেকে শুরু করে পরপর সংখ্যার যোগফল পেতে ইচ্ছাকৃতভাবে ব্যবহার করেছি তবে আমি পুরোপুরি ভুলে গেছি যে 05AB1E এর জন্য বিল্ট-ইন ছিল। ধন্যবাদ!
Osable

2
এছাড়াও, আপনার ïএখন অংশটি দরকার : পি?
আদনান

1
আমি তাই মনে করি না ^^।
Osable

12

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

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

f=(n,k,x,s=`^
`)=>n--?(p=' '.repeat(n)+s,x?p.replace(/\^/g,_=>x++%k+1)+p:p)+f(n,k,x||k,'^ '+s):''

ডেমো


8

সি ++ 214 - 13 - 3 - 1 -1 - 10 = 186 বাইট

golfed

#define s std::cout<<
int f(int n,int k){int N=++n,K=0,i=0,I;for(;i<n;i++,N--){for(I=N;I--;)s' ';for(I=0;I++<i&&i-1;)s' '<<(K++%k)+1;s'\n';for(I=N;I--;)s' ';for(I=0;I++<i;)s" ^";s'\n';}}  

ধন্যবাদ 1 সাইওস 1 বাইট সংরক্ষণের জন্য এটি 186 এ কেটে
দেওয়ার জন্য @ কনরকে ধন্যবাদ !

অবহেলিত + অনুলিপি এবং সংকলন

#include<iostream>
#include<conio.h>

#define s(a) std::cout<<a;

int main()
{
    int n,N,k,K=0,i,I;
    std::cin>>n>>k;
    N=++n;
    for(i=0;i<n;i++,N--)
    {
        for(I=N;I--;)

            s(' ')

        for(I=0;I<i&&i-1;I++)

            s(' '<<(K++%k)+1)

        s('\n')

        for(I=N;I;I--)

            s(' ')

        for(I=0;I<i;I++)

            s(" ^")

        s('\n')

    }
    getch();//or any func to pause the console
}  

অবশেষে <200 ...
মুকুল কুমার

1
আপনি কি পরে স্থানটি সরাতে পারবেন #define s(a)?
সাইয়েস

@ কিউস ধন্যবাদ! আমি সে সম্পর্কে জানতাম না !!!
মুকুল কুমার

2
186 বাইট ডিফাইনে পরিবর্তন করে #define s std::cout<<এবং সমন্বয় করে।
কনর ও'ব্রায়েন

ওয়াওয়া..এই চমৎকার .. কখনও আমার মনটাকে ছাড়েনি: পি
মুকুল কুমার

3

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

n,k=input()
d=-1
j=' '.join
for i in range(1,n+1):s=' '*(n-i);print(['',s+j(`x%k+1`for x in range(d,d+i))+'\n'][i>1]+s+j('^'*i));d+=i

2

ক্লোজার, 223 বাইট

ক্লোজের সাথে গল্ফ করতে আমার প্রথম যাত্রা:

(let[r repeat](defn d[n k](apply str(concat(r(dec n)\ )"^\n"(flatten(for[i(range 2(inc n))m[nil true]](concat(r(- n i)\ )(butlast(interleave(if m(r\^)(rest(iterate #(inc(mod % k))(dec(/(* i(dec i))2)))))(r i\ )))"\n")))))))

যখন (println (str "\n" (d 6 5)))একটি নতুন লাইনের মতো ডাকা হয় তখন এটি আরপিএলে আরও সুন্দর করে তোলে:

     ^
    1 2
    ^ ^
   3 4 5
   ^ ^ ^
  1 2 3 4
  ^ ^ ^ ^
 5 1 2 3 4
 ^ ^ ^ ^ ^
5 1 2 3 4 5
^ ^ ^ ^ ^ ^

আন golfed:

(defn tree-row [n k index mode]
  (concat
    (repeat (- n index) \ ) ; Left padding
    (butlast ; Removing trailing space
      (interleave
        ; Either printing carets or numbers...
        (if mode
          (repeat \^)
          ; Using "rest" as the iteration starts from a large value
          ; from which the modulo has not been calculated yet.
          (rest (iterate #(inc (mod % k)) (dec (/ (* index (dec index)) 2)))))
        ; ...and interleaved with spaces
        (repeat index \ )))
    "\n"))

(defn decorate [n k]
  (apply str (concat
               (repeat (dec n) \ ) "^\n"
               (flatten (for [index (range 2 (inc n)) mode [nil true]]
                          (tree-row n k index mode))))))

অলস ক্রমগুলি এবং নেস্টেড তালিকাগুলি নিয়ে আমার কিছু সমস্যা ছিল তবে আমি পুনরাবৃত্তি না করে কিছু অক্ষর সংরক্ষণ করতে সক্ষম হয়েছি repeat;) এবং স্ট্রিংয়ের \^পরিবর্তে অক্ষর ব্যবহার "^"করে। আমি আশ্চর্যজনকভাবে অনেকগুলি জায়গা ছেড়ে যেতে পারতাম।


ভাল উত্তর প্রথম, সাইটে আপনাকে স্বাগতম!
ডিজেএমসিএমহেম

1

রুবি 107 বাইট

t=->(n,k){d=[*1..k]*n*n;o=0;(1..n).each{|b|s=' '*(n-b);b>1&&(puts(s+d[o,b].join(' '));o+=b);puts s+'^ '*b}}

এভাবে ডাকা হয়

t.call(5,4)

আউটপুট:

    ^
   1 2
   ^ ^
  3 4 1
  ^ ^ ^
 2 3 4 1
 ^ ^ ^ ^
2 3 4 1 2
^ ^ ^ ^ ^

1

সি, 170 বাইট

i=0;d,j,l;t(n,k){char s[20],r[20];d=k-2;l=n;for(;i++<n;){for(j=0;j<l;++j)s[j]=r[j]=32;for(j=n-i;j<l;j+=2){s[j]=94;r[j]=(++d%k)+49;}s[l]=r[l++]=0;if(i-1)puts(r);puts(s);}}

সাথে কল করুন:

int main()
{
   t(5,4);
}

বোনাস হিসাবে, এখানে একটি 4-বিট বাইনারি সংস্করণ:

m=0;b(n,k){char*a="000100100011010001010110011110001001";char s[20],r[20];d=k*4-2;l=n;for(;m++<n;){for(j=0;j<l;++j)s[j]=r[j]=32;for(j=n-m;j<l;j+=2){s[j]=94;r[j]=a[++d%(k*4)];}s[l]=r[l++]=0;if(m-1)puts(r);puts(s);}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.