আমাকে উত্সাহিত ক্রিসমাস ট্রি করুন!


15

চ্যালেঞ্জ

আমরা সকলেই সাধারণ ক্রিসমাস ট্রি সম্পর্কে জানি - তবে উত্সাহিত ক্রিসমাস ট্রি সম্পর্কে কীভাবে ! এটি মোটামুটি সহজ, ক্রিসমাস থিমযুক্ত চ্যালেঞ্জ। এই চ্যালেঞ্জের উদ্দেশ্য হ'ল আমাকে একটি এএসসিআইআই ওভার-ডাউন ক্রিসমাস ট্রি করা। এই চ্যালেঞ্জের জন্য এখানে নিয়ম রয়েছে:

  1. একটি বিজোড়, ধনাত্মক পূর্ণসংখ্যা গ্রহণ করুন। আপনি ধরে নিতে পারেন এটি সর্বদা 7এবং এর মধ্যে থাকবে 51
  2. গাছের গোড়াটি অক্ষর দ্বারা তৈরি করা হবে:

    ___
    \ /
     |
    
  3. গাছের শীর্ষটি (তারা) একটি একক দিয়ে তৈরি হবে *

  4. গাছের প্রতিটি লাইন বিন্যাস ব্যবহার নির্মাণকাজ শেষ হবে <?>যেখানে ?কোন সংখ্যা -গুলি। উদাহরণস্বরূপ, যদি দৈর্ঘ্যের একটি লাইন তৈরি করা হয় 5তবে লাইনটি হওয়া উচিত <--->। অথবা দৈর্ঘ্যের একটি লাইন তৈরি করা হলে 8, লাইনটি হওয়া উচিত <------>

  5. গাছের দেহটি কীভাবে তৈরি করা উচিত তা এখানে:

    1. nইনপুট হিসাবে প্রদত্ত বিজোড় নম্বরটি ধরুন এবং সেই দৈর্ঘ্যের গাছের একটি লাইন তৈরি করুন।

    2. 4থেকে বিয়োগ করুন nএবং গাছটির একটি লাইন তৈরি করুন যা দৈর্ঘ্য।

    3. 2থেকে বিয়োগ করুন nএবং গাছটির একটি লাইন তৈরি করুন যা দৈর্ঘ্য।

    4. nদ্বারা হ্রাস 2। এর পরে, nসমান5 না হলে , পদক্ষেপ 2 এ ফিরে যান।

  6. বেস (ধাপ 2. দেখুন) (পদক্ষেপ 4. এবং 5. দেখুন) সব ব্যবহার কেন্দ্রিক হবে স্টার ও গাছের প্রতিটি লাইনে (ধাপ 3. দেখুন) মূল বিজোড় সংখ্যা ইনপুট সর্বাধিক হিসাবে (ধাপ 1 দেখুন) প্রস্থ।

উদাহরণ / পরীক্ষার কেস

odd number inputed: 7
  ___
  \ /
   |
<----->      line length -> 7
  <->        line length -> 7 - 4 = 3
 <--->       line length -> 7 - 2 = 5
   *


odd number inputed: 13
     ___
     \ /
      |
<----------->      line length -> 13
  <------->        line length -> 13 - 4 = 9
 <--------->       line length -> 13 - 2 = 11
   <----->         line length -> 11 - 4 = 7
  <------->        line length -> 11 - 2 = 9
    <--->          line length -> 9 - 4 = 5
   <----->         line length -> 9 - 2 = 7
     <->           line length -> 7 - 4 = 3 
    <--->          line length -> 7 - 2 = 5
      *


odd number inputed: 9
   ___
   \ /
    |
<------->      line length -> 9
  <--->        line length -> 9 - 4 = 5
 <----->       line length -> 9 - 2 = 7
   <->         line length -> 7 - 4 = 3
  <--->        line length -> 7 - 2 = 5
    *


odd number inputed: 17
       ___
       \ /
        |
<--------------->      line length -> 17
  <----------->        line length -> 17 - 4 = 13
 <------------->       line length -> 17 - 2 = 15
   <--------->         line length -> 15 - 4 = 11
  <----------->        line length -> 15 - 2 = 13
    <------->          line length -> 13 - 4 = 9
   <--------->         line length -> 13 - 2 = 11
     <----->           line length -> 11 - 4 = 7
    <------->          line length -> 11 - 2 = 9
      <--->            line length -> 9 - 4 = 5
     <----->           line length -> 9 - 2 = 7
       <->             line length -> 7 - 4 = 3
      <--->            line length -> 7 - 2 = 5
        *    

বিধি


3
ইনপুটটি বিজোড় সংখ্যা হওয়ার গ্যারান্টিযুক্ত হিসাবে দেখা হচ্ছে, আমরা কি এটির সূচককে বিজোড় সংখ্যাগুলির ক্রমতে নিতে পারি?
ফ্লিপট্যাক

এছাড়াও - repeat the above steps until the odd number minus 2 equals 5- প্রথম ইনপুটটিতে, বিজোড় সংখ্যাটি 7 এবং 7-2 = 5 হয়, সুতরাং গাছটি তাত্ক্ষণিকভাবে শেষ হওয়া উচিত (আপনার অর্থ কী তা আমি জানি তবে এটির পুনর্নির্মাণের দরকার আছে)
ফ্লিপট্যাক

@ ফ্লিপট্যাক আপনি ঠিক কী বলতে চাইছেন তা আমি নিশ্চিত নই। যদি বিজোড় সংখ্যাটি 7সর্বনিম্ন ইনপুট হয় তবে আপনি প্রথমে তিনটি ট্রি লাইন তৈরি করবেন (উপ-পদক্ষেপ .1.1, .1.2, .1.3), তারপরে2 বিজোড় সংখ্যাটি থেকে বিয়োগ করুন এবং এটি সমান হলে পরীক্ষা করুন 5। "বিজোড় সংখ্যা বিয়োগ 2 সমান 5 সমান" কিনা তা পরীক্ষা করার নির্দেশটি অন্য তিনটি পদক্ষেপ প্রথমে সম্পাদন করা উচিত। তবে আপনার প্রথম মন্তব্যের উত্তর দিতে, এটি ঠিক আছে।
খ্রিস্টান ডিন

1
@ ফ্লিপট্যাক আমার মনে হয় তিনি জিজ্ঞাসা করছেন আপনাকে 7ইনপুট হিসাবে গ্রহণ করতে হবে বা আপনি যদি 4চতুর্থ বিজোড় সংখ্যা হিসাবে (বা 3এটি 0-সূচকযুক্ত) হিসাবে গ্রহণ করতে পারেন কিনা।
DonielF

4
শিরোনাম থেকে: "ঠিক আছে, আপনি এখন ক্রিসমাস ট্রি এর উল্টো দিকে।"
dkudriavtsev

উত্তর:


10

পাইথন 3 , 127 121 105 103 100 98 বাইট

এটি একটি নামবিহীন ল্যাম্বদা ফাংশন যা লাইনের একটি তালিকা প্রদান করে:

lambda o:[s.center(o)for s in['___','\ /','|',*[f'<{"-"*(o-i+2-i%2*3)}>'for i in range(4,o)],'*']]

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

এই উত্তরের মূল অংশটি হ'ল (o-i+2-i%2*3), যা কোনও লাইনে থাকা ড্যাশগুলির সংখ্যা নিয়ে কাজ করে। বাকি উত্তরগুলি কেবল এটিকে কাঙ্ক্ষিত ASCII- আর্টে রূপান্তরিত করছে।

মিঃ এক্সকোডারকে অনেক ধন্যবাদ , 6 বাইট শেভ করার জন্য, এবং চ্যাটে আমার সাথে গল্ফ নিয়ে আলোচনা করার জন্য।

এছাড়াও ধন্যবাদ লিন ঠাহর জন্য যে 3*(i%2)হতে পারে i%2*3, 2 খাটো বাইট!



2
আমি যখনই পাইথন উত্তর পোস্ট করি, দিনের সময় বা তার বর্তমান অবস্থান নির্বিশেষে @ মিঃ এক্সএক্সকোডারকে দেওয়ার জন্য একটি গল্ফ রয়েছে :)
ফ্লিপট্যাক

স্বাগতম , এটি সহজেই আমার 250 বাইট + পাইথন সলিউশনটি বীট করে। সুন্দর কাজ! +1
খ্রিস্টান ডিন

o-i+2-i%2*3দুটি বাইট সংরক্ষণ
লিন

লিন গুড স্পট, আপডেট হয়েছে।
ফ্লিপট্যাক

7

সি, 163 বাইট

#define P;printf(
i;g(l){P"%*c",1+i-l--/2,60);for(;--l P"-"))P">\n");}f(n){i=n/2 P"%*c__\n%*c /\n%*c|\n",i,95,i,92,i,32);for(g(n);n>5;g(n-=2))g(n-4)P" %*c",i,42);}

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

Unrolled:

#define P;printf(

i;
g(l)
{
    P"%*c", 1+i-l--/2, 60);
    for (; --l P"-"))
    P">\n");
}

f(n)
{
    i=n/2
    P"%*c__\n%*c /\n%*c|\n", i, 95, i, 92, i, 32);

    for(g(n); n>5; g(n-=2))
        g(n-4)

    P" %*c", i, 42);
}

6

প্রোটন , 83 বাইট

ধন্যবাদ FlipTack 4 বাইট সংরক্ষণ করার জন্য, এবং সহযোগী জন্য চ্যাট (আমরা আসলে একটি দুর্দান্ত দল গঠন)। লিনকে অপ্রত্যক্ষভাবে 2 বাইট সংরক্ষণ করা হয়েছে ।

o=>[s.center(o)for s:['___','\ /','|']+['<'+"-"*(o-i+2-i%2*3)+'>'for i:4..o]+['*']]

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


5

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

__⸿ /⸿|F⮌…¹⊘N«⸿⊕ι>⸿⊖ι>»‖B← *

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

__⸿ /⸿|

বেস মুদ্রণ করুন।

F⮌…¹⊘N«

ইনপুট সংখ্যাটির অর্ধেক থেকে নীচে 1 এ লুপ করুন।

⸿⊕ι>⸿⊖ι>»

দুটি লাইন মুদ্রণ করুন, প্রথমটি -লুপ সূচকের চেয়ে একটি বেশি , দ্বিতীয়টি কম সংখ্যক দিয়ে।

‖B←

গাছটি সম্পূর্ণ করতে আয়না

 *

তারা রাখুন।



3

রেটিনা , 89 বাইট

.+
$*->
^--
<
+`( *<)----(-+>)$
$&¶  $1$2¶ $1--$2
s`.*¶( +)<->.*
$1___¶$1\ /¶$1 |¶$&¶$1 *

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: প্রথম পর্যায়টি ইনপুটটিকে অ্যানারিতে রূপান্তর করে এবং এটিকে সংযোজন করে >। দ্বিতীয় পর্যায়ে লাইনের দৈর্ঘ্য সংশোধন করতে দুটি -দিয়ে প্রতিস্থাপন করা <হয়। তৃতীয় পর্যায়ে এর পরে শাখাটির প্রতিরূপ তৈরি করা হয় তবে প্রতিটি বার যখন শাখাটি আরও ছোট করা না যায় ততক্ষণে সামান্য সংক্ষেপে। চূড়ান্ত পর্যায়ে বেস এবং তারা যোগ করে।


2

জাভাস্ক্রিপ্ট 506 বাইট

গলফ-সংস্করণ:

function tree(i){const mid=(i+1)/2;const leg1=' '.repeat((mid-2))+`___
`;const leg2=' '.repeat((mid-2))+`\\ \/
`;const leg3=' '.repeat((mid-1))+`|
`;let xmasTree=leg1+leg2+leg3;for(let j=0;j<(i-4);j++){if(j%2===0){let v=j/2;let t=i-2*v-2;let body1=" ".repeat(j/2)+"<"+"-".repeat(t)+">"+`
`;xmasTree=xmasTree+body1}else{let k=1+Math.ceil(j/2);let h=i-2*k-2;let body2=' '.repeat(k)+'<'+'-'.repeat(h)+">"+`
`;xmasTree=xmasTree+body2}}
const head=' '.repeat((mid-1))+'*'
xmasTree=xmasTree+head;return xmasTree}

Ungolf-সংস্করণ:

function tree(i){
  const mid = (i+1)/2;
  const leg1 = ' '.repeat((mid-2)) + `___
`;
  const leg2 = ' '.repeat((mid-2)) + `\\ \/
`;
  const leg3 = ' '.repeat((mid-1)) + `|
`;
  let xmasTree = leg1 + leg2 + leg3;
  for (let j = 0; j<(i-4); j++) {
    if (j%2===0) {
      let v = j/2;
      let t = i-2*v-2;
      let body1 = " ".repeat(j/2)+"<"+"-".repeat(t) +">"+`
`;
      xmasTree = xmasTree + body1;
    } else {
      let k = 1 + Math.ceil(j/2);
      let h = i-2*k-2;
      let body2 = ' '.repeat(k)+ '<'+ '-'.repeat(h) + ">"+`
`;
      xmasTree = xmasTree + body2;
    }
  }
  const head = ' '.repeat((mid-1)) + '*'
  xmasTree = xmasTree + head;
  return xmasTree;
}

ব্যবহার: console.log(tree(13)), console.log(tree(17)),

ES6 165 বাইট (আমার বন্ধুর কাছ থেকে)

গলফ-সংস্করণ:

p=n=>{l=_=>console.log(`${' '.repeat((n-_.length)/2)}${_}`);t=_=>_==1?'*':'<'+'-'.repeat(_-2)+'>';x=n;l('___');l('\\ /');l('|');for(;x!==3;){l(t(x));l(t(x-4));x-=2}}

Ungolf-সংস্করণ:

p = n => {
  l = _ => console.log(`${' '.repeat((n-_.length)/2)}${_}`);
  t = _ => _ == 1 ? '*' : '<' + '-'.repeat(_-2)+'>';
  x = n;
  l('___');l('\\ /');l('|');
  for(;x!==3;) {
    l(t(x)); l(t(x-4));x-=2;
  }
}

ব্যবহার: p(31); p(17);


1
আপনি কেবল 1-বর্ণের ভেরিয়েবল নাম ব্যবহার করে constকীওয়ার্ড ইত্যাদি মুছে ফেলতে পারেন
ফ্লিপট্যাক

1

পাওয়ারশেল , 131 বাইট

$i=2;$x="$args"..5|%{' '*($j=if($_%2){$i-2}else{($i++)})+'<'+'-'*($_-(5,2)[$_%2])+'>'};($y=' '*++$j)+"___";"$y\ /";"$y |";$x;"$y *"

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

আচ্ছা, পাওয়ারশেলের কথোপকথন না করে এমন কারও পক্ষে এটি একটি সঠিক জগাখিচুতা ... সুতরাং, আসুন দেখুন কীভাবে এটি কাজ করে তা আমি কীভাবে ব্যাখ্যা করতে পারি।

ব্যাখ্যার জন্য, আমি ব্যবহার করব input = 17

আমরা সহজ যথেষ্ট চলতে শুরু সাহায্যকারী পরিবর্তনশীল সেটিং সঙ্গে, $i=2এবং সেটিং $xকরার <something>সঙ্গে, <something>ইনপুট থেকে ব্যাপ্তি হিসাবে শুরু $argsনিচে থেকে 5, তাই 17,16,15,...,6,5। এই ব্যাপ্তিটি লুপের জন্য পাম্প করা হয়।

প্রতিটি পুনরাবৃত্তি, আমরা $jকোনও ifবিবরণের ফলাফল হতে সাহায্যকারী ভেরিয়েবল সেট করে শুরু করি if($_%2){$i-2}else{($i++)}। যদি এটি বিজোড় হয় $j=$i-2, অন্যথায় $j=($i++)। এটি, $i=2শুরুতে একত্রে, আমাদের ক্রম দেয় 0, 2, 1, 3, 2, 4, 3, 5...যা ঠিক তাই ঘটে আমাদের গাছের লাইনের জন্য আরও কতগুলি স্থান খালি করা দরকার তার ঠিক ঠিক তার সাথে মিলে যায়। ;-) আমরা ' 'সেই সংখ্যাটি দিয়ে স্ট্রিং-গুণ করি।

পরবর্তী আমাদের আমাদের শাখা প্রয়োজন। এটি '<'মধ্যবর্তী অংশটি '-'গুণিত আউট, সমাপ্তি সহ আরও করা হয় '>'। গুণটি ইনপুট সংখ্যার উপর ভিত্তি করে প্যাটার্নে -বিকল্পটি স্বীকৃতি দিয়েই করা হয় , সুতরাং আমরা সেই প্যাটার্নের উপর ভিত্তি করে সিউডো-টের্নারি থেকে নির্বাচন করছি।2, 5, 2, 5, 2...$_

আরও স্পষ্টতার জন্য, এখানে প্রতিটি বিভাগে প্রথম দম্পতি শর্তাবলী:

$_ = 17 16 15 14 13 12 11 10
$j =  0  2  1  3  2  4  3  5
mid=  2  5  2  5  2  5  2  5
'-'= 15 11 13  9 11  7  9  5

সুতরাং এখন আমরা $xশাখাগুলির একটি অ্যারে (যেমন, স্ট্রিং) হিসাবে সেট হয়েছি । লুপের বাইরে, এখন আমরা আমাদের গাছটিকে "শীর্ষ" তৈরি করে যথাযথ সংখ্যক ফাঁকা জায়গায় সংরক্ষণ করেছি $y, তারপরে আমাদের শাখাগুলি প্রদর্শন করব $xএবং তারপরে গাছটি "নীচে" দিয়ে করব *। এগুলির প্রত্যেকটি পাইপলাইনে রেখে গেছে এবং আউটপুট আইটেমগুলির মধ্যে একটি নতুন লাইনের সাথে জড়িত।


1

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

N=>{for(s=' '[r='repeat'](N/2-1),s+=`___
${s}\\ /
${s} |
`,n=N,l=n=>' '[r](N/2-n/2)+(n-1?`<${'-'[r](n-2)}>
`:'*');n-3;n-=2)s+=l(n)+l(n-4)
return s}



0
N=>{for(s=' '[r='repeat'](N/2-1),s+=`___
${s}\\ /
${s} |
`,l=n=>' '[r](N/2-n/2)+n-1?`<${'-'[r](n-2)}>
`:'*');N-=2;s+=l(N)+l(N-4);return s}

জেএস ইএসগোগোল্ট্রিপ্লেক্সে আমার প্রচেষ্টা।

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