मेरी क्रिसमस पत्नी को हमारे क्रिसमस पेड़ को सजाने में मदद करें


36

मेरी पत्नी बहुत है, चलो कहते हैं, विशेष रूप से जब यह हमारे क्रिसमस के पेड़ पर गहने लगाने की बात आती है। आइए, इस कोशिश में उसकी मदद करने के लिए उसे कुछ कोड दें।

इनपुट

एक इनपुट 2 < n < 10को पेड़ की ऊंचाई और 0 < k < nआभूषणों की अलग संख्या को देखते हुए ।

कार्य

पेड़ को सजाने 1और बढ़ाने के साथ शुरू करें kक्योंकि हम पेड़ के चारों ओर गहने लपेटते हैं। यदि हम पहुंचते हैं kऔर हमारे पास सजाने के लिए अधिक शाखाएं हैं तो वापस शुरू करें 1

यह ठीक है अगर पेड़ पर प्रत्येक आभूषण की समान संख्या नहीं है, जब तक कि पैटर्न संतुष्ट नहीं हो जाता है।

आभूषणों को ^शीर्ष पंक्ति को छोड़कर प्रत्येक शाखा के ऊपर दिखाई देना चाहिए ।

पेड़ को एक शाखा से शुरू करके संरचित किया जाता है, फिर अगले स्तर में + 1 शाखा होती है, जिसमें से प्रत्येक के बीच एक स्थान होता है, जो ऊपर से कंपित होता है:

 ^
^ ^

तीसरी पंक्ति के लिए आप एक और शाखा जोड़ेंगे और उन्हें फिर से इस तरह से डगमगाएंगे कि कोई भी शाखा एक ही कॉलम पर न हो (यदि आप इसे ग्रिड की तरह समझते हैं)।

  ^
 ^ ^
^ ^ ^

उत्पादन

आउटपुट अपने सजाया पेड़।

उदाहरण

1।

n = 3, k = 2

  ^      //Height is 3
 ^ ^
^ ^ ^

अब हम प्रत्येक शाखा को 1 से शुरू करते हैं और k को बढ़ाते हैं:

  ^
 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
@ मुकुलकुमार नहीं इसे ऊपर की संरचना को बनाए रखना चाहिए।
जैक्सनसेक

क्या हम k को 10 से कम मान सकते हैं? या फिर, संख्याओं को संरेखित कैसे करें?
लुइस मेंडो

2
@LuisMendo हाँ मान लें <१० अच्छा बिंदु
जैकसनक

जवाबों:


47

सी # 226 221 बाइट्स

@Mukul कुमार और @aloisdg को 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=1int घोषणा में दे सकते हैं और इसे अपने forपाश से हटा सकते हैं ...
मुकुल कुमार

1
आप "\ n" को "\ n" से बदल सकते हैं। यह कोर और मोनो के साथ ठीक चलेगा।
aloisdg का कहना है कि मोनिका

8
C#कुछ प्यार पाने वाले उत्तर को देखकर अच्छा लगा ।
माइकल मैकग्रिफ

@aloisdg धन्यवाद :)
पीट आर्डेन

1
@jacksonecac आपको खुशी हुई। एक बार विचार मेरे सिर में आने के बाद विरोध नहीं कर सका :)
पीट आर्डेन

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)/2जानबूझकर 1 से शुरू होने वाले पूर्णांक का योग प्राप्त करने के लिए इस्तेमाल किया था , लेकिन मैं पूरी तरह से भूल गया कि 05AB1E ने इसके लिए बिल्ट-इन बनाया था। धन्यवाद!
Osable

2
इसके अलावा, क्या आपको ïअभी भाग की आवश्यकता है : पी?
अदनान

1
मुझे ऐसा नहीं लगता ^ ^
10

12

जावास्क्रिप्ट (ईएस 6), 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 बाइट बचाने के लिए धन्यवाद @ cyoce।
के लिए धन्यवाद @ कोनोर काटना 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)))एक newline की तरह कहा जाता है यह REPL पर अच्छा बनाता है:

     ^
    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;) और तार के \^बजाय पात्रों का उपयोग कर रहा था "^"। मैं आश्चर्यजनक रूप से कई स्थानों को छोड़ भी सकता था।


अच्छा पहला उत्तर, साइट पर आपका स्वागत है!
DJMcMayhem

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);}}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.