কিছু পর্বতশৃঙ্গ আঁকুন


33

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা একটি পর্বতশ্রেণীতে অঙ্কিত হয়, যেখানে প্রতিটি পরবর্তী বৃহত্তর পর্বতশৃঙ্গটি সামনে অবস্থিত "পিছনে" থাকে এবং কোন দিকটি দৃশ্যমান হয় তার বিকল্প হয়।

এটি আকারের একটি পর্বতশ্রেণী 1

/\

এটি আকারের একটি পর্বতশ্রেণী 2

 /\
/\ \

এটি আকারের একটি পর্বতশ্রেণী 3

  /\
 / /\
/ /\ \

এটি আকারের একটি পর্বতশ্রেণী 4

   /\
  /\ \
 / /\ \
/ /\ \ \

এটি আকারের একটি পর্বতশ্রেণী 5

    /\
   / /\
  / /\ \
 / / /\ \
/ / /\ \ \

ইত্যাদি।

ইনপুট

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

আউটপুট

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

বিধি

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

উত্তর:


14

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

NλFλ«P↘⁻λι←↙¹‖T→

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

কিভাবে?

Nλবৃহত্তম পর্বতের আকারকে ইনপুট করে λFλ«মান উপর একটি লুপ রান ιথেকে 0মাধ্যমে λ-1। ( »সমাপনিটি প্রোগ্রামের শেষে বোঝানো হয়েছে))

লুপের অভ্যন্তরে, কার্সারকে পরে না নিয়ে , P↘⁻λιগণনা করে λ-ιএবং অঙ্কন করে, দৈর্ঘ্যের একটি লাইন দক্ষিণ-পূর্ব দিকে যাচ্ছে। এর দিকের ভিত্তিতে, এই লাইনটিতে \অক্ষর থাকবে। এক ধাপ পশ্চিমে সরে যায় এবং ↙¹দক্ষিণ-পশ্চিমে (তৈরি /) দৈর্ঘ্যের 1 রেখা টানবে । অবশেষে, ‖T→অনুভূমিকভাবে অঙ্কন প্রতিফলিত, যথাযথ হিসাবে অক্ষর রূপান্তর: \হয়ে /এবং /হয়ে \

লুপের শুরুতে ডাম্প নির্দেশ যুক্ত করা ( এটি ব্যবহার করে দেখুন ) আমাদের অগ্রগতি দেখতে দেয়:

    /\
   /  
  /   
 /    
/     
    /\    
   /\ \   
  /    \  
 /      \ 
/        \
    /\    
   / /\   
  / /\ \  
 / /    \ 
/ /      \
    /\    
   /\ \   
  / /\ \  
 / /\ \ \ 
/ /    \ \
    /\    
   / /\   
  / /\ \  
 / / /\ \ 
/ / /\ \ \

2
আমি অনুমান করি যে এই চ্যালেঞ্জের জন্য আদর্শ ভাষা :-)
ইটিএইচ প্রডাকশন

@Etproductions এই ভাষাটি ASCII শিল্পের জন্য বিশেষভাবে তৈরি করা হয়েছে। এটির নিজস্ব কোডপেজও রয়েছে।
এরিক আউটগল্ফার

@ এরিক্থে গল্ফার আমার নিজস্ব (অসম্পূর্ণ) এএসসিআইআই আর্ট ল্যাঙ্গুয়েজ রয়েছে, যার নাম ক্রাইওন । এই মুহুর্তে দস্তাবেজগুলি একরকম হারিয়ে গেছে কারণ আমি সেগুলি সরানোর মাঝখানে আছি তবে আপনি তাদের বেশিরভাগ এখানে দেখতে পাবেন । আমি অবাক হই যে
চারকোলের

@ ইথ প্রডাকশনস আপনি কখন এটি বাস্তবায়ন করতে যাচ্ছেন? এর জন্য কি কোনও চ্যাটরুম আছে বা আমি একটি তৈরি করতে পারি ("ক্রাইওন ইমপ্লিমেন্টেশন" বলা হয়)?
এরিক আউটগল্ফার

@ এরিক্থে গল্ফার দুর্ভাগ্যক্রমে, আমি কখনই এটি প্রয়োগ করার সময় পাব জানি না। আপনি চাইলে একটি চ্যাটরুম তৈরি করতে পারেন ;-)
ইটিএইচ প্রডাকশন

7

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

for(n=prompt(s="/\\");n--;s=n%2?s+' \\':'/ '+s)console.log(" ".repeat(n)+s)

সম্পূর্ণ প্রোগ্রামটি পুনরাবৃত্তির ক্রিয়াকলাপের চেয়ে সামান্য খাটো:

f=n=>n?" ".repeat(--n)+`/\\
`+f(n).replace(/\S.+/g,x=>n%2?x+" \\":"/ "+x):""

6

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

n=input()
s='/\\'
while n:n-=1;print' '*n+s;s=['/ '+s,s+' \\'][n%2]

প্রিন্ট, পাতিপাতি স্ট্রিং সঁচায়ক sপর্যায়ক্রমে বর্তমান সমতা উপর ভিত্তি করে ডান বাঁদিকে একটি স্ল্যাশ যোগ করে অথবা দ্বারা n। সঙ্গে উপসর্গ nস্পেস।

আপডেট করার বিকল্প উপায় ছিল একই দৈর্ঘ্য:

s=n%2*'/ '+s+~n%2*' \\'
s=['/ '+s,s+' \\'][n%2]

একটি পুনরাবৃত্তির পদ্ধতি দীর্ঘ ছিল (70 বাইট)।

f=lambda n,s='/\\':n*'_'and' '*~-n+s+'\n'+f(n-1,[s+' \\','/ '+s][n%2])

6

হাস্কেল, 77 বাইট

0%_=""
n%s=(' '<$[2..n])++s++'\n':(n-1)%(cycle[s++" \\","/ "++s]!!n)
(%"/\\")

ব্যবহার:

putStrLn $ f 5
    /\
   / /\
  / /\ \
 / / /\ \
/ / /\ \ \

লাইন প্রান্তরেখা প্রিন্ট করে, স্ট্রিংকে একত্রিত করে পর্যায়ক্রমে n এর বর্তমান প্যারিটির উপর ভিত্তি করে বাম বা ডানে স্ল্যাশ যুক্ত করে। এন -1 স্পেস সহ উপসর্গগুলি।


5

ব্যাচ, 202 বাইট

@echo off
set/af=%1^&1
set m=/\
set s=
for /l %%i in (2,1,%1)do call set s= %%s%%
for /l %%i in (2,1,%1)do call:l
:l
echo %s%%m%
set s=%s:~1%
set/af^^=1
if %f%==1 (set m=%m% \)else set m=/ %m%

কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়। শেষ লুপটি কার্যকর করার জন্য পড়ে।


@ টিমিডি দুঃখিত, গল্ফ করার সময় আমি টাইপ করেছি। এখনই স্থির।
নিল


5

হাস্কেল, 117 107 105 97 90 বাইট

b!1=["/\\"]
b!n|m<-(1-b)!(n-1)=map(' ':)m++[[("/ "++),(++" \\")]!!b$last m]
(unlines.(1!))

আইডিয়নে চেষ্টা করে দেখুন। সম্পাদনা করুন: নীলের একটি ধারণা সহ 8 বাইট সংরক্ষণ করা হয়েছে।

অবরুদ্ধ সংস্করণ:

p b 1 = ["/\\"]
p b n = let m = p (1-b) (n-1)
            k = last m
            r = map (' ':) m
        in if b == 1
           then r ++ [k ++ " \\"]
           else r ++ ["/ " ++ k]
f n = unlines(p 1 n)

পুনরাবৃত্তি পদ্ধতির। আকৃতির জন্য nপ্রতিটি n-1আকারের সামনে একটি স্থান যুক্ত করে এবং শেষ লাইনটি রেখে বিজোড়ের আগে n-1যোগ "/ "করার পরে বা এমনকি যদি হয় এমনকি তৈরি করা হয় ... বা তাই আমি এই শেষ পদক্ষেপটি বিপরীত হয়েছে তা লক্ষ্য করার আগে ভেবেছিলাম ফাইনালটি বিজোড় হলে সমস্ত পুনরাবৃত্ত পদক্ষেপ । অতএব একটি পতাকা প্রেরণ করা হবে যা প্রতিটি পুনরাবৃত্ত কলকে পরিবর্তিত করে এবং পরবর্তী পর্বত অংশটি বাম বা ডান যুক্ত করা হয় কিনা তা নির্ধারণ করে।n" \"nnb


1
প্রতিবারের সাথে তুলনা bকরার পরিবর্তে odd n, আপনি কি শুরুতে কেবল একটি পতাকাটি পাস করতে এবং প্রতিটি পুনরাবৃত্তির কলটিতে এটি ফ্লিপ করতে পারবেন না? ভালো কিছু f n = unlines(p 0 n)এবং let m = p (1-b) (n-1)
নিল

আরোহণের জন্য ফ্লাইপিং করা -bবন্ধ।
xnor

@xnor ধন্যবাদ ইঙ্গিতটি জন্য, কিন্তু আমি এটা আরও যা দরকার গল্ফ অন্য উপায় পাওয়া bহতে 0বা 1
লাইকনি

2

জাভা 7,130 বাইট

String f(int n,String s){String l="";for(int i=1;i++<n;l+=" ");return n>1?n%2<1?l+s+"\n"+f(--n,s+" \\"):l+s+"\n"+f(--n,"/ "+s):s;}

Ungolfed

class Mountain {
 public static void main(String[] args) {
    System.out.println(f( 5 , "/\\" ) );
  }
 static String f(int n,String s){
    String l = "";
    for (int i = 1; i++ < n; l += " ") ;
      return n > 1? n % 2 < 1?l + s + "\n" + f(--n , s + " \\")
                           :l + s + "\n" + f(--n , "/ " + s)
                            :s;
    }

}

ভাল উত্তর, +1। : আপনি 2 বাইট যদিও তা গলফ পারেন n%2করতে n--%2, এবং উভয় --nথেকে n। সম্পাদনা: এবং আরও 1 টি জুড়ে ,x=s+"\n"এবং দুটিতে পরিবর্তন s+"\n"করে x। (সুতরাং মোট: String f(int n,String s){String l="",x=s+"\n";for(int i=1;i++<n;l+=" ");return n>1?n--%2<1?l+x+f(n,s+" \\"):l+x+f(n,"/ "+s):s;} 127 বাইট )
কেভিন ক্রুইজসেন

0

সি ++ 138 (ফাংশন)

কার্য: -

#define c(X) cout<<X;
#define L(X,Y) for(X=0;X<Y;X++)  

void M(int h){int l=1,r=1,j,H=h,i;L(i,h){for(j=H;j>0;j--)c(" ")L(j,l)c(" /")L(j, r)c("\\ ")c("\ n")(h%2)?(i%2)?r++:l++:(i%2)?l++:r++;H--;}  

সম্পূর্ণ প্রোগ্রাম: -

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

using namespace std;

#define c(X) cout<<X;
#define L(X,Y) for(X=0;X<Y;X++)

void M(int h)
{
    int l=1,r=1,j,H=h,i;

    L(i, h)
    {
        for (j = H;j > 0;j--)
            c(" ")
        L(j, l)
            c(" /")
        L(j, r)
            c("\\ ")
        c("\n")

        (h % 2) ? (i % 2) ? r++ : l++ :(i % 2) ? l++ : r++;
        H--;
    }
}

int main()
{
    int h;
    cin >> h;
    M(h);
    _getch();
    return 0;
}  

দ্রষ্টব্য: ফাংশনটির _getch()বিভিন্ন সংকলক জুড়ে বিভিন্ন প্রোটোটাইপের নাম থাকতে পারে।

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