এটা প্রায় ক্রিসমাস!


14

এ কারণে, বিশ্বজুড়ে পরিবারগুলি ক্রিসমাস ট্রি তৈরি করছে।

তবে এই সাধারণ গাছটি কিছুক্ষণ পরে বিরক্তিকর হয়ে উঠতে পারে, তাই আসুন আমরা একটি ASCII গাছ বানাতে পারি!

পাতাগুলি দ্বারা প্রতিনিধিত্ব করা হয় #এবং উদাহরণ আউটপুট হিসাবে প্রদর্শিত হিসাবে সাজানো আবশ্যক। আমাদের কাছে 5 টি বল ( O) এবং 5 টি ক্যান্ডি বেত ( J) রয়েছে, যা আমরা গাছের চারপাশে এলোমেলোভাবে রাখি। আমাদের উপরে একটি মোমবাতিও রয়েছে।

ইনপুট: কিছুই না

আউটপুট:

         ^
         |
        ###
       ##O##
      #######
       #####
      ####J##
     #########
    ####O######
   #############
      ###J###
     #########
    ####O###J##
   #######O#####
  ###J########O##
 ###########J#####
        ###
        ###

বিধিগুলি (যদি এটি বিধিগুলিতে না থাকে তবে ধরে নিতে পারেন)

  • বল এবং ক্যান্ডি বেতগুলি অবশ্যই এলোমেলোভাবে গাছের উপরে রাখা উচিত এবং তাদের মধ্যে কমপক্ষে একটি পাতাগুলি থাকতে হবে, ত্রিভুজ গণনা করা উচিত নয়।

  • প্রতিটি পাতায় অবশ্যই একটি বল বা ক্যান্ডি বেত পাওয়ার শূন্য-সম্ভাবনা থাকতে হবে।

  • যতক্ষণ না গাছের যথাযথ আকার থাকে ততক্ষণ প্রতিটি লাইনে শীর্ষস্থানীয় বা পিছনে স্থান থাকতে পারে।

  • এটি , তাই অক্ষরগুলির মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


2
@ বিলিউব এটি নিকটবর্তী, এটির একটি এলোমেলো গুণক এবং একটি মোমবাতি রয়েছে: পি
গ্রে

1
হ্যাঁ, এটি অবশ্যই আরও জটিল ইমো।
বিলিওব

3
"তবে এই সাধারণ গাছটি কিছুক্ষণ পরে বিরক্তিকর হতে পারে।" তাহলে কেন পুরানো স্কুল মোমবাতি এবং সৃজনশীল কিছু নয় ?
manatwork

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

1
আপনি যদি উত্তরটির মতো দেখতে না পান তবে আমি অক্ষরের পরিবর্তে বাইট দ্বারা স্কোর করার পরামর্শ দিচ্ছি।
ডেনিস

উত্তর:


4

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

আশা করি, এটি 'এলোমেলো পর্যাপ্ত' শর্তটি মেনে চলবে।

_=>[...'887656543254321077'].map(n=>' '.repeat(n)+'#'.repeat(17-2*n)).join`
`.replace(/#/g,_=>'OJ^|#'[++i<4?i:i>133|++j%13?4:j/13&1],i=1,j=new Date)

ডেমো


আমি পরীক্ষা করেছি এবং এমন একটি গাছ পেয়েছি যা ব্রোক করে 'এবং ত্রিভুজগুলি গণনা না করে তাদের মধ্যে অন্ততপক্ষে কমপক্ষে একটি পাত (#) থাকতে হবে'
ব্যবহারকারী 21216

@ ব্যবহারকারী2216 আমি যদি কোনওভাবে কিছু মিস না করি বা ভুল বুঝতে না পারি তবে মডিউলটি এমনভাবে বেছে নেওয়া হয়েছিল যে এটি সম্ভবত ঘটতে পারে না - তির্যকগুলি ছাড়া। (এখানে 13 টি স্বতন্ত্র নিদর্শন রয়েছে যা j=new Dateদিয়ে প্রতিস্থাপনের মাধ্যমে j=0আপনি পরীক্ষা করতে পারেন j=12))
আর্নল্ড

8

সিএস-স্ক্রিপ্ট - 306 বাইট

var c=new string(' ',342).ToCharArray();var r=new Random();int e=18,i,j,w;for(;i<e;i++){c[i*e+e]='\n';w=i<5?i:i<10?i-2:i<16?i-6:2;for(j=1;j++<w*2;)c[i*e+8-w+j]='#';}for(i=0;i<10;){j=37+r.Next(288);if(c[j]=='#'&c[j+1]<42&c[j-1]<42&c[j+e]<42&c[j-e]<42)c[j]=i++<5?'J':'O';}c[8]='^';c[27]='|';Console.Write(c);

ফর্ম্যাট এবং মন্তব্য সহ আরও একবার:

// create 'char bitmap' filled with spaces
var c=new string(' ',342).ToCharArray(); 
// Random for placing ornaments
var r=new Random();
int e=18,i,j,w;
// once for each row
for(;i<e;i++)
{
    // add new lines
    c[i*e+e]='\n';
    // determine width of tree for this row
    w=i<5?i:i<10?i-2:i<16?i-6:2;
    for(j=1;j++<w*2;)
        // add leaves
        c[i*e+8-w+j]='#';
}
for(i=0;i<10;)
{
    // select random location
    j=37+r.Next(288); 
    if( // check we have a leaf
        c[j]=='#' &
        // check surrounding to be leaf/space/new-line
        c[j+1]<42 & c[j-1]<42 & c[j+e]<42 & c[j-e]<42)
        // add ornament if location is valid
        c[j]=i++<5?'J':'O';
}
// light candle
c[8]='^';
c[27]='|';
// print
Console.Write(c);

এটি মূলত সি #, তবে সিএস-স্ক্রিপ্ট ব্যবহার করা আমাকে সমস্ত বয়লার-প্লেট এড়িয়ে যেতে দেয়।

এখানে চেষ্টা করুন!

মন্তব্য:

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

  • নীচে চেক করার আগে এটি শেষ লাইন কিনা তা পরীক্ষা করা হচ্ছে (আরও কয়েকটি চরিত্র যুক্ত করা হয়েছে)
  • গাছের 'কান্ডে' অলংকার যোগ না করা (একই বাইট গণনা, তবে আমার কাছে এটি বিধিগুলির বিপরীতে বলে মনে হচ্ছে)

যদি এটি পরিবর্তন করা হয় তবে আমি ওপিতে ছেড়ে দেব।

শেষ অবধি, এটি আমার প্রথম গল্ফ, সুতরাং যে কোনও প্রতিক্রিয়া প্রশংসাযোগ্য। ;)


সুন্দর সমাধান। এটি মনে করে যে using System;আপনার বাইট কাউন্টে আপনাকে অন্তর্ভুক্ত করার দরকার হতে পারে , কারণ আপনি এটি ব্যবহার করতে Randomবা Consoleএটি ব্যতীত পারেন না । meta.codegolf.stackexchange.com/questions/10081/… 13 বাইট যোগ করার জন্য দুঃখিত :(
এররেসেন

@ এরিসেন: লিঙ্কটির জন্য ধন্যবাদ! আমি যতদূর বলতে পারি, এটি কেবল কার্যকর করার জন্য প্রয়োজনীয় আমদানির কথা বলে এবং সিএস-স্ক্রিপ্টের using System;জন্য এটি প্রয়োজন হয় না (এটি স্বয়ংক্রিয়ভাবে সাধারণ নামস্থান আমদানি করে)। তবে আমি কেশ বিভক্ত করছি। ¯_ (ツ) _ / ¯
amulware

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

হ্যাঁ, এটি নিশ্চিত। : ডি
আমুলওয়্যার

আপনি যদি কোনও ফাংশন সংকলন করেন, সম্ভব হলে সিএস-স্ক্রিপ্টে, আপনি বাইট গণনাটি হ্রাস করতে পারবেন যেমন_=>{var c=... return c;}
TheLethalCoder

4

টিএসকিউএল, 556 532 494 476 বাইট

এই স্ক্রিপ্টটি মাস্টার ডাটাবেসে কার্যকর করা দরকার

Golfed:

DECLARE @ varchar(max)='',@h INT=0,@w INT=0WHILE @h<18SELECT
@+=space(9-@w)+REPLICATE(char(IIF(@h<2,94+30*@h,35)),@w*2+1)+space(9-@w)+CHAR(10),@h+=1,@w+=CHOOSE(@h,0,1,1,1,-1,1,1,1,1,-2,1,1,1,1,1,-8,0)WHILE
@h>7WITH C as(SELECT*,substring(@,number,1)v,number/20r,number%20c
FROM spt_values WHERE type='P'and number<358)SELECT @=stuff(@,number,1,CHAR(74+@h%2*5)),@h-=1FROM
c d WHERE v='#'and not exists(SELECT*FROM c WHERE abs(d.c-c)+abs(d.r-r)<2and'A'<v)ORDER BY newid()PRINT @

Ungolfed:

DECLARE @ varchar(max)='',@h INT=0,@w INT=0

WHILE @h<18
  SELECT @+=
    space(9-@w)+REPLICATE(char(IIF(@h<2,94+30*@h,35)),@w*2+1)
      +space(9-@w)+CHAR(10),
    @h+=1,
    @w+=CHOOSE(@h,0,1,1,1,-1,1,1,1,1,-2,1,1,1,1,1,-8,0)

WHILE @h>7
  WITH C as
  (
    SELECT*,substring(@,number,1)v,number/20r,number%20c
    FROM spt_values
    WHERE type='P'and number<358
  )
  SELECT @=stuff(@,number,1,CHAR(74+@h%2*5)),@h-=1
  FROM c d
  WHERE v='#'and not exists(SELECT*FROM c WHERE abs(d.c-c)+abs(d.r-r)<2and'A'<v)
  ORDER BY newid()

PRINT @

চেষ্টা কর


1

পাইথন 3 - 450 427 বাইট

আমি জানি 450অজগরটির পক্ষে অনেক বেশি। কিন্তু কিন্তু.....

from random import randint as r
t=lambda o,g:(o*g).center(19,' ')+';';s,z='','#';s+=t(z,3)*2
for h,w in zip([6,5,3],[17,13,7]):
 for i in range(h):s+=t(z,w);w-=2
s+=t('|',1)+t('^',1);s=[list(i)for i in s.split(';')]
for o in'O'*5+'J'*5:
 while 1:
  h,w=r(2,15),r(1,16)
  m=s[h]
  C,m[w]=m[w],o
  P=s[h-1][w]+s[h+1][w]+m[w-1]+m[w+1]
  if not('O'in P or'J'in P)and C!=' ':break
  m[w]=C
print (*[''.join(i)+'\n'for i in s][::-1])

যদি এটিটিকে আরও ভাল পুনরাবৃত্ত ফাংশনেfor i in'O'*... পরিণত করা হয় তবে প্রচুর বাইটগুলি কেটে ফেলা যায়।

এখানে চেষ্টা করুন

সম্পাদনা করুন :

;নিউলাইন বাইট গণনাটি 1 বাইট হিসাবে গ্রহণ করে ডিলিমিটার এবং কয়েকটি বাইট ব্যবহার করে 2 বাইট সংরক্ষণ করা হয়েছে ।


1

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

f=(s='^|1232345634567811'.replace(/./g,x=>(y=x|0,' '.repeat(8-y)+(y?'#'.repeat(y*2+1):x)+`
`)),o=5,j=5,r=(Math.random()*56|0)*4,k)=>j?f(s.replace(/###/g,(_,i)=>i-r?_:k=o?'#O#':'#J#'),k?o-!!o:o,k?j-!o:j):s

console.log(f());
.as-console-wrapper{max-height:100%!important;top:0}


1
আপনি কেন \n1 বাইট হিসাবে গণনা করছেন?
ড্যানিয়েল শিলকক

আর নয়, দুঃখিত
ওয়াশিংটন গুডিস

1

পিএইচপি, 200 বাইট

আরও পরিশীলিত পদ্ধতির সাথে সংক্ষিপ্ত হতে পারে; তবে আমি তাড়াতাড়ি

for(;$c="^|2343456745678922"[$i++];)$s.=str_pad(+$c?str_pad("",2*$c-1,"#"):$c,17," ",2)."
";for(;$n++<10;)$s[$p=rand(0,288)]!="#"|($s[$p-18]|$s[$p+18]|$s[$p-1]|$s[$p+1])>A?$n--:$s[$p]=OJ[$n&1];echo$s;

পিএইচপি 5.6 বা 7.0 প্রয়োজন। এটি দিয়ে চালান -nrবা অনলাইনে চেষ্টা করুন


0

Scala, 329 bytes

var r=scala.util.Random;var z=r.nextInt(2);def t{print(new StringBuilder({"^|234345645678922".map(x=>{val t=if(x>57)8 else(57-x);" "*t+{if(x>57)""+x else "#"}*(17-(t*2))+" "*t+" \n"})}.mkString)match{case e=>{var w=0;while(w<10){{val b=(r.nextInt(e.size/2)*2)+z;if(e.charAt(b)=='#'){e.setCharAt(b,if(w<5)'O'else'J');w+=1}}};e}})}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.