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


29

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা গাছের গাছ আঁকে, এভাবে বন তৈরি করে।

গাছগুলি পিরামিড স্ট্যাক করার মতো টানা হয়। প্রথম (শীর্ষ) সারিটিতে 1গাছ রয়েছে , পরের সারিতে নীচে 2(মোটের জন্য 3) রয়েছে, পরেরটিতে 3(মোটের জন্য 6) রয়েছে এবং এই জাতীয় কিছু রয়েছে। যদি একটি পূর্ণ সারি সম্পন্ন করার জন্য পর্যাপ্ত গাছ না থাকে তবে এটি বামে পূরণ করুন এবং দাগগুলি ডানদিকে ফাঁকা রেখে দিন। অতিরিক্তভাবে, নিম্ন স্তরের গাছগুলি তাদের স্থাপনের কারণে উপরের স্তরের গাছগুলিকে কিছুটা ওভারল্যাপ করে।

এটি আকারের বন 1

  /\
 //\\
///\\\
  ||
  ||

এটি আকারের বন 2

      /\
     //\\
  /\///\\\
 //\\ ||
///\\\||
  ||
  ||

এটি আকারের বন 3

      /\
     //\\
  /\///\\\/\
 //\\ || //\\
///\\\||///\\\
  ||      ||
  ||      ||

এটি আকারের বন 4

          /\
         //\\
      /\///\\\/\
     //\\ || //\\
  /\///\\\||///\\\
 //\\ ||      ||
///\\\||      ||
  ||
  ||

এটি আকারের বন 5(পঞ্চম গাছের শীর্ষটি প্রথম গাছের কাণ্ডটি coveringেকে রেখেছে নোট করুন)

          /\
         //\\
      /\///\\\/\
     //\\ || //\\
  /\///\\\/\///\\\
 //\\ || //\\ ||
///\\\||///\\\||
  ||      ||
  ||      ||

(কয়েকটি এড়িয়ে যান)
এটি আকারের বন 8(প্যাটার্নটি প্রসারিত করে)

              /\
             //\\
          /\///\\\/\
         //\\ || //\\
      /\///\\\/\///\\\/\
     //\\ || //\\ || //\\
  /\///\\\/\///\\\||///\\\
 //\\ || //\\ ||      ||
///\\\||///\\\||      ||
  ||      ||
  ||      ||

ইত্যাদি।

ইনপুট

একটি একক ধনাত্মক পূর্ণসংখ্যা কোনো সুবিধাজনক বিন্যাসে , n > 0

আউটপুট

উপরের নিয়মগুলি অনুসরণ করে বনের একটি ASCII- শিল্প উপস্থাপনা। শীর্ষস্থানীয় / পিছনের নতুন লাইনের বা অন্যান্য সাদা স্থানগুলি alচ্ছিক, যদি সমস্ত গাছ যথাযথভাবে সরে থাকে তবে .চ্ছিক।

বিধি

  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরিয়ে দিতে পারেন।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

আমি নিশ্চিত নই যে গাছগুলি আঁকানো হয়েছে সে সম্পর্কিত প্যাটার্নটি কী। অর্থাত্ nগাছের অবস্থান কী?
লুইস মেন্ডো 21

@ লুইস মেন্ডো যেমনটি আমি বুঝতে পেরেছি, তারা পড়ার ক্রমে পূর্ণ। সুতরাং, প্রতিটি সারি ঘুরিয়ে পূরণ করা হয়, এবং যদি পুরো সারির জন্য পর্যাপ্ত গাছ না থাকে তবে অবশিষ্ট অংশটি সারিটিতে যতদূর সম্ভব বামে রাখা হয়।
xnor

@ লুইস মেন্ডো এক্সনর এর ঠিক আছে। যদি আমি এটি আরও স্পষ্ট করতে পুনরায় কথা বলতে পারি তবে দয়া করে আমাকে চ্যাট করুন in
অ্যাডমবর্কবার্ক

@ এক্সনোর ধন্যবাদ, এটি এখন আমার কাছে সম্পূর্ণ স্পষ্ট
লুইস মেন্ডো

@ অ্যাডএম আসলে এটি চ্যালেঞ্জের ঠিক সেখানে লেখা হয়েছিল। স্পষ্টতই আমি পড়তে পারি না :-)
লুইস মেন্ডো

উত্তর:


5

হাসেল 310 বাইট

w i=putStr$unlines$reverse$b i 0 0[][]
b 0 _ _ w r=e w r
b c l 0 w r=b c(l+1)l(e w r)[]
b c l p w r=b(c-1)l(p-1)w(n(++)["  ||    ","  ||    ","///\\\\\\  "," //\\\\   ","  /\\    "]r)
e w r=t++n(n d)(map(\t->"    "++t)w)c where(t,c)=splitAt 2 r
n f(a:c)(b:d)=f a b:n f c d
n _ a[]=a
n _ _ a=a
d d ' '=d
d _ d=d

w 5উদাহরণস্বরূপ এটির সাথে কল করুন ।

এখানে সঙ্কুচিত কোড:

-- TreeTree
-- by Gerhard
-- 12 February 2017

module TreeTree (wood,test) where

type Tree = [String]

-- Test cases
test = do
 wood 0
 wood 1
 wood 2
 wood 3
 wood 4
 wood 5

-- build wood
wood :: Int -> IO ()
wood i = printTree $ buildWood i 0 0 [] []

-- Prints the trees
printTree :: Tree -> IO ()
printTree = putStr . unlines . reverse

-- build wood
buildWood :: Int -> Int -> Int -> Tree -> Tree -> Tree
buildWood 0 _ _ w r = concatTree w r 
buildWood c l 0 w r = buildWood c (l+1) l (concatTree w r) []
buildWood c l p w r = buildWood (c-1) l (p-1) w (addTree r)

-- indent definition
space :: String
space = "    "

-- tree definition
tree :: Tree
tree = reverse [
 "  /\\    ",
 " //\\\\   ",
 "///\\\\\\  ",
 "  ||    ",
 "  ||    "]

-- Add a Tree on the left side
addTree :: Tree -> Tree
addTree = match (++) tree

-- add tree row at the bottom of the wood
concatTree :: Tree -> Tree -> Tree
concatTree w r = trunk ++ matched
 where
  wood = grow w
  (trunk, crown) = splitAt 2 r 
  matched = matchTree wood crown

-- elnarge forrest on the left side to match next tree line
grow :: Tree -> Tree
grow = map (\t -> space ++ t)

-- match
match :: (a -> a -> a) -> [a] -> [a] -> [a]
match f (a:az) (b:bz) = f a b : match f az bz
match _ a [] = a
match _ _ a  = a

-- match trees
matchTree :: Tree -> Tree -> Tree
matchTree = match matchLine

-- match lines
matchLine :: String -> String -> String
matchLine = match matchChar

-- match chars
matchChar :: Char -> Char -> Char
matchChar c ' ' = c
matchChar _ c   = c

-- End

পিপিসিজিতে আপনাকে স্বাগতম!
অ্যাডমবর্কবার্ক

4

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

f=
n=>{a=`  /\\`;d=`///\\\\\\`;b=d+`/\\`;c=` //\\\\ ||`;d+=`||`;e=`
`;r=`repeat`;s=``;for(i=1;n>i;n-=i++)s=(s+a+b[r](i-1)+e+c[r](i)).replace(/^/gm,`    `)+e;return(s+a+b[r](n-1)+d[r](i-=n)+e+c[r](n)+(s=`      ||`[r](i))+e+d[r](n)+s+(s=e+`  ||    `[r](n))+s).replace(/\|.$/gm,``)}
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

সম্পাদনা করুন: @ ক্রিতিক্সিলিথোসকে ধন্যবাদ 21 টি বাইট সংরক্ষিত


প্রথম জন্য repeat, আপনি পরিবর্তন করতে পারেন blah.repeat(val)থেকে blah[w="repeat"](Val) এবং তারপর আপনি পরবর্তী occurences পরিবর্তন করতে পারেন repeatশুধু [w](val)পরিবর্তে বাইট সংরক্ষণের জন্য
Kritixi Lithos

@ ক্রিটিক্সিলিথোস আমি এটি করতে পারছি না কারণ প্রথমটি লুপের অভ্যন্তরে রয়েছে এবং repeatএটি forচালানো হবে না n=1, তবে আমি এখনও 21 বাইট সংরক্ষণ করতে সক্ষম হয়েছি।
নিল

4

সি ++ (উইন্ডোজে), 330 312 308 304 303 বাইট

#import<cstdio>
#import<windows.h>
#define P(x,y,s)SetConsoleCursorPosition(GetStdHandle(-11),{X+x,Y+y});puts(s);
int X,Y,R,r,c;t(){P(2,-2,"/\\")P(1,-1,"//\\\\")P(0,0,"///\\\\\\")P(2,1,"||")P(2,2,"||")}f(int n){for(c=R=r=1;c<n;c+=++R);for(;r;r++)for(c=0;++c<r+1;){X=(R-r-2)*4+c*8;Y=r*2;t();r=--n?r:-1;}}

সাথে কল করুন:

int main()
{
    f(8);
}

0

সি (উইন্ডোজে), 297 295 294 বাইট

#import<windows.h>
#define P(x,y,s)C.X=X+x;C.Y=Y+y;SetConsoleCursorPosition(GetStdHandle(-11),C);puts(s);
COORD C;X,Y,R,r,c;t(){P(2,-2,"/\\")P(1,-1,"//\\\\")P(0,0,"///\\\\\\")P(2,1,"||")P(2,2,"||")}f(n){for(c=R=r=1;c<n;c+=++R);for(;r;r++)for(c=0;++c<r+1;){X=(R-r-2)*4+c*8;Y=r*2;t(r=--n?r:-1);}}

আমার সি ++ উত্তরের অনুরূপ, তবে আমি এটি পোস্ট করেছি কারণ এটি সি থেকে কিছুটা কম orter


@ ডিএলকাস ইট সি। #importএটি একটি ( অবনমিত ) জিসিসি এক্সটেনশন। গল্ফিং জন্য উপযুক্ত, যদিও।
স্টেডিবক্স

হুঁ, আকর্ষণীয়। এখন আমি দেখতে পাচ্ছি যে এর জন্য একটি টিপস আছে । আপনি আপনার উত্তরে এটি উল্লেখ করতে পারেন।
DLosc

@ ডিএলকস সম্ভবত, তবে আমি মনে করি এটি গল্ফিংয়ে বেশ কয়েকটি ব্যাপকভাবে ব্যবহৃত হয়েছে, পাশাপাশি কিছু অন্যান্য জিসিসির (যদিও এটি জিসিসির মধ্যে সীমাবদ্ধ নয়) বাদ দেওয়া <stdio.h>এবং স্বয়ংক্রিয়ভাবে বৈশ্বিক পরিবর্তনশীল হিসাবে intফিরে আসার বা কোনও ফাংশন হিসাবে ধরে নেওয়া int
স্টেডিবক্স

0

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

39 বাইট বন্ধ গল্ফ সাহায্য করার জন্য @ ক্রিটিক্সী লিথোসকে ধন্যবাদ

x=>{s='';for(t=0;++t<x;x-=t);q='//\\\\';z="///\\\\\\";h="/\\";t--;for(i=0;i<t;i++){a=4*(t-i)+1;s+=" "[w="repeat"](a+1)+h+(z+h)[w](i)+`
`+" "[w](a)+q+(" || "+q)[w](i)+`
`}c=t-x+1>0?t-x+1:0;return x?s+"  "+(h+z)[w](--x)+h+(c?(z+"||")[w](c-1)+z:'')+`
 `+q+(" || "+q)[w](x)+" ||     "[w](c)+`
`+(z+"||")[w](x)+z+(c?"||"+"      ||"[w](c-1):'')+`
`+("  ||    "[w](x+1)+`
`)[w](2):''}

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


2
প্রথম জন্য repeat, আপনি পরিবর্তন করতে পারেন blah.repeat(val)থেকে blah[w="repeat"](val)এবং তারপর আপনি পরবর্তী occurences পরিবর্তন করতে পারেন repeatশুধু [w](val)পরিবর্তে বাইট সংরক্ষণের জন্য
Kritixi Lithos
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.