পর্বতমালার বিস্তৃতি আঁকুন


16

ফিবোনাচি ডোমিনো টাইলিং দ্বারা অনুপ্রাণিত হয়ে , এই সমস্যাটি অন্য একটি বিখ্যাত সংমিশ্রিত ক্রমের প্রতিনিধিত্বকারী ASCII শিল্প উত্পন্ন করার বিষয়ে।

একটি এন-স্টেপ পর্বত ডায়াগ্রাম হ'ল একটি ' পর্বতশ্রেণীর অঙ্কন, ঠিক ' এন '/' এবং ' এন ' \ 'অক্ষর ব্যবহার করে যেমন অক্ষরগুলি একটি অবিচ্ছিন্ন বক্ররেখা আঁকেন যা এর প্রাথমিক "উচ্চতার" নীচে কখনও ডুবে না। উদাহরণ স্বরূপ,

   /\/\
/\/    \

এবং

   /\
/\/  \/\

উভয়ই 4-পদক্ষেপের পর্বত চিত্র রয়েছে, তবে but

/\  /\/\
  \/

এটি না.

ইনপুট

প্রোগ্রামটি স্টিডিন থেকে অথবা কোনও ফাংশনের প্যারামিটার হিসাবে একটি পূর্ণসংখ্যা এন গ্রহণ করা উচিত ।

আউটপুট

স্ট্যান্ডআউটে সমস্ত এন- স্টেপ পর্বত চিত্রগুলি মুদ্রণ করুন । ডায়াগ্রামগুলি কোনও ক্রমে হতে পারে তবে কোনও ধরণের সাদা স্থানের দ্বারা পৃথক করা উচিত। আপনি সিদ্ধান্ত নিতে পারেন যে বিভিন্ন চিত্রগুলি অনুভূমিকভাবে উল্লম্বভাবে আউটপুট হবে কিনা if

যেমন ডোমিনো টাইলিং সমস্যা, আপনি যা চান হোয়াইটস্পেস ব্যবহার করতে পারেন। এটিতে মুদ্রিত আউটপুটের আগে বা পরে অতিরিক্ত নতুন লাইন অন্তর্ভুক্ত।

উদাহরণ

এন = 3 এর জন্য কিছু নমুনা বৈধ আউটপুট :

বৈধ আউটপুট এ:

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

বৈধ আউটপুট বি:

   /\
/\/  \

 /\/\
/    \

/\/\/\   

  /\
 /  \
/    \

 /\
/  \/\

বৈধ আউটপুট সি:

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

এটি কোড গল্ফ; সংক্ষিপ্ততম প্রোগ্রাম (বাইটে) জয়লাভ করে।


যখন আপনি বলছেন "আপনি সিদ্ধান্ত নিতে পারেন যে বিভিন্ন চিত্রগুলি অনুভূমিকভাবে, উল্লম্বভাবে, ইত্যাদি আউটপুট হবে কিনা", তখন কি পর্বতশ্রেণীগুলি নিজেই পাশাপাশি থাকবে?
xnor

পর্বতমালার রেঞ্জগুলি নিজের পাশে থাকা উচিত নয়। আমি মনে করি শৃঙ্গগুলির মধ্যে ফাঁকা আকাশ চ্যালেঞ্জকে আরও বাড়িয়ে তোলে।
ম্যাট নুনান

কিছু রেঞ্জ একাধিকবার প্রদর্শিত হতে পারে?
গর্বিত হাসেলেলার

@ ম্যাটনুনান আপনি ঠিক বলেছেন, পাহাড়ের রেঞ্জগুলি অনুভূমিকভাবে মুদ্রণ করা অবশ্যই জটিল ছিল।
xnor

@ গর্বিত-হাসেলেলার এটি প্রতিটি একবারে হওয়া উচিত।
ম্যাট নুনান

উত্তর:


10

পাইথন 2: 151 অক্ষর

N=2*input()
for i in range(2**N):
 L=[];c=1;exec"b=i%2;c+=2*b-1;L+=[[' ']*N];L[-1][b-c]='\/'[b];i=i/2*(c>0);"*N
 for x in(c==1)*zip(*L):print"".join(x)

#Output for n=3:




  /\  
 /  \ 
/    \




 /\/\ 
/    \




   /\ 
/\/  \




 /\   
/  \/\





/\/\/\

বাহ, এটা একটা গোলমাল।

প্রথম ধারণাটি হ'ল তাদের বিটগুলিতে আপ-মুভ এবং ডাউন- 0 to 2**N-1মুভের সমস্ত ক্রমকে এনকোড করতে নম্বরগুলি ব্যবহার Nকরা। আমরা এই বিটগুলি একের পর এক বার বার %2এবং /2একটি execলুপে পুনরাবৃত্তি করে পড়ি ।

আমরা স্ট্রিং একটি পক্ষান্তরিত তালিকা চলমান পর্বতশ্রেণী পার্শ্বাভিমুখ সংরক্ষণ L। প্রতিবার, আমরা একটি নতুন সারি স্পেস তৈরি করি নতুন সারিতে একটি স্থান প্রতিস্থাপন করা হয় তার সাথে /বা তার \উপর নির্ভর করে একটি আপ-মুভ বা ডাউন-মুভ ঘটেছে কিনা depending

সেই জায়গার সূচকটি cপ্রান্ত থেকে ফাঁকা স্থান , যেখানে cচলমান উচ্চতা। সামনে থেকে এটি পাহাড়কে উল্টো করে দেবে। দ্বারা আমরা এটিকে আরো বেশি নামান bউর্ধ্বগামী এবং নিম্নগামী প্যাচসমূহ সারিবদ্ধ, পেয়ে [b-c]c0 এর পরিবর্তে 1 থেকে শুরু করা একটি বাইরের ত্রুটিটি ঠিক করে।

ক্ষেত্রে যেখানে বাছা cশুরু মানের থেকে কম ঝরছে 1, যখন এটি ঘটে, আমরা সেট iকরতে 0, যা ঘটায় সব আরও প্যাচসমূহ নিম্নগামী হতে, উপার্জন cহয়ে আরো নেতিবাচক। তারপরে, যখন আমরা পরীক্ষা করে দেখি যে এটি cশেষ হয়েছে কিনা 1, আমরা এটি cকখনও নীচে পড়ে ছিল কিনা তাও পরীক্ষা করে দেখি। আমরা কেবলমাত্র printপর্বতশ্রেণী যদি cহয় 1

মুদ্রণ করতে, আমরা zip(*L)উল্লম্ব থেকে অনুভূমিক পর্যন্ত পরিসীমা স্থানান্তর করতে এবং প্রতিটি যোগদান করা স্ট্রিং মুদ্রণ করি। পাইথন থেকে এই উত্তরে প্রচুর ঝামেলা এলো স্ট্রিংগুলি অপরিবর্তনীয় হিসাবে বিবেচনা করে, তাই আমরা তাদের সাথে চরিত্রের তালিকা হিসাবে কাজ করেছি এবং কেবলমাত্র মুদ্রণের জন্য স্ট্রিংগুলিতে যোগ দিয়েছি।

সহায়তা ও উন্নতির জন্য @ ফ্লর্নকোকে ধন্যবাদ।


আপনি যদি লুপটি ব্যবহার করতে চান তবে তার ' 'পরিবর্তে আপনাকে ব্যবহার করতে হবে । :) বিটিডব্লিউ, আপনার ব্যাকস্ল্যাশ থেকে বাঁচার দরকার নেই। " "exec
ফ্লোরকোয়েন

@ ফ্লর্নকোয়াক আমি লিখতে ভুলে গিয়েছিলাম, আমি ' 'স্ট্রিংটির পরিবর্তনের সাথে এর সাথে একটি কোয়েট দিয়ে প্রতিস্থাপন করার চেষ্টা করেছি। এটি এখনও সূচি for _ in[0]*N:exec("b=i%2;c+=2*b-1;L+=[[" "]*N];L[-1][b-c]='\\/'[b];i=i//2*(c>0);")
ছাড়িয়ে গেছে

আমি বোঝাতে চেয়েছিলাম যে আপনাকে লেখার দরকার exec("b=i%2;c+=2*b-1;L+=[[' ']*N];L[-1][b-c]='\\/'[b];i=i//2*(c>0);"), অর্থাত্ ভিতরের উক্তিগুলি বাইরের থেকে আলাদা হওয়া উচিত।
flornquake

@ ফ্লর্নকোভাক বাহ আমি কি নির্বোধ বোধ করি, আমি একজোড়া উদ্ধৃতি পরিবর্তন করেছি তবে অন্যটি নয়। ধন্যবাদ!
xnor

7

এপিএল (88)

{{⍉↑'\/'[1+⍵=1]/⍨¨¯1+2×K=⊂⌽⍳⌈/K←(⍵≠1)++\⍵}¨Z/⍨{(0=+/⍵)∧∧/0≤+\⍵}¨Z←↓⍉¯1+2×(N/2)⊤⍳2*N←2×⍵}

এর জন্য আউটপুট n=3:

      {{⍉↑'\/'[1+⍵=1]/⍨¨¯1+2×K=⊂⌽⍳⌈/K←(⍵≠1)++\⍵}¨Z/⍨{(0=+/⍵)∧∧/0≤+\⍵}¨Z←↓⍉¯1+2×(N/2)⊤⍳2*N←2×⍵}3
 /\/\/\     /\    /\      /\/\     /\   
         /\/  \  /  \/\  /    \   /  \  
                                 /    \ 

ব্যাখ্যা:

  • (N/2)⊤⍳2*N←2×⍵: থেকে প্রতিটি সংখ্যার জন্য একটি বিটফিল্ড 0পান 2^⍵
  • Z←↓⍉¯1+2×: 2 দিয়ে গুণ এবং 1 বিয়োগ করে, 1আপ এবং -1ডাউন প্রদান করে। ভেক্টর একটি ভেক্টর, প্রতিটি ভেক্টর এক সংখ্যার জন্য উপস্থাপনা ধারণকারী দোকান, Z
  • {... }¨Z: প্রতিটি উপাদান জন্য Z:
    • ∧/0≤+\⍵: চলমান যোগফল কখনই নীচে নেমে 0আসে তা পরীক্ষা করুন (স্থল স্তরের নিচে যায় না),
    • (0=+/⍵): এবং যে মোট যোগফল 0(স্থল স্তরে ফিরে আসে)।
  • {... }¨Z/⍨: যে উপাদানগুলি থেকে Zসত্য তা নির্বাচন করুন । তাদের প্রত্যেকের জন্য:
    • K←(⍵≠1)++\⍵: প্রতিটি চরিত্রের জন্য উচ্চতা সন্ধান করুন এবং এতে সঞ্চয় করুন K। একে একে \উপরে উঠান , যাতে তারা /সঠিকভাবে এসগুলির সাথে লাইন করে । এটি মাটির উচ্চতা তৈরি করে 1
    • ¯1+2×K=⊂⌽⍳⌈/K: প্রতিটি কলামের জন্য, একটি তালিকা তৈরি করুন [1..max(K)]সঙ্গে যে কলামে চরিত্রের অবস্থান চিহ্নিত, এবং 1এবং বাকি -1। (-1 দ্বারা প্রতিলিপি করা একটি স্থানের সাথে সেই অবস্থানটি পূরণ করে))
    • '\/'[1+⍵=1]/⍨¨: প্রতিটি কলামের জন্য সঠিক অক্ষরটি সন্ধান করুন এবং সেই কলামটির তালিকার দ্বারা এটি প্রতিলিপি করুন।
    • ⍉↑: ফলাফলটিকে একটি ম্যাট্রিক্সে পরিণত করুন এবং ডান দিকে রেখে দিন

ঠিক আছে, একটি অনুভূমিক!
ম্যাট নুনান

2

পাইথন, 261 241 236 টি অক্ষর

import itertools as I
n=input()
S={}
for q in I.permutations((-1,1)*n):
 s=0;B=[[' ']*n*2 for _ in range(n+2)];o=0
 for i in q:
    B[n-s+(i==-1)][o]=' /\\'[i];s+=i;o+=1
    if s<0:break
 else:
    for l in (B,[])[q in S]:print''.join(l)
 S[q]=1

এটি কিছুক্ষণ সময় নিতে শুরু n=5করে ...

$ echo 1 | py mountrange.py

/\



Laxori@Laxori-PC /cygdrive/c/Programmin
$ echo 2 | py mountrange.py


/\/\



 /\
/  \



Laxori@Laxori-PC /cygdrive/c/Programmin
$ echo 3 | py mountrange.py



/\/\/\




   /\
/\/  \




 /\
/  \/\




 /\/\
/    \



  /\
 /  \
/    \



Laxori@Laxori-PC /cygdrive/c/Programmin
$ echo 4 | py mountrange.py




/\/\/\/\





     /\
/\/\/  \





   /\
/\/  \/\





   /\/\
/\/    \




    /\
   /  \
/\/    \





 /\
/  \/\/\





 /\  /\
/  \/  \





 /\/\
/    \/\





 /\/\/\
/      \




    /\
 /\/  \
/      \




  /\
 /  \
/    \/\




  /\
 /  \/\
/      \




  /\/\
 /    \
/      \



   /\
  /  \
 /    \
/      \

2

জাভাস্ক্রিপ্ট (ES6) 159 163

ফিবোনাচি ডোমিনো টাইলিংয়ের জন্য আমার উত্তরের মতোই, আমি এন + এন বিটের সমস্ত অনুক্রম পরীক্ষা করি, 1 '/' চিহ্নিত করে 0 এবং '\' চিহ্নিত করে (কেবল আউটপুট জন্য, '2' পরে একটি নতুন লাইন চিহ্নিত করার জন্য যুক্ত করা হয়) । থ অ্যাস্কি প্যাটার্নটি তৈরি করার সময় আমি ভারসাম্যটি পরীক্ষা করে দেখি - একই সংখ্যা 0 এবং 1, এবং কখনও কখনও প্রাথমিক বেস লাইনের নিচে যাব না - এবং নিয়মগুলি কি মান্য করে আউটপুট।

আউটপুটটি 'সতর্কতা' দিয়ে সম্পন্ন হয়েছে, এটি জেএস কোডগল্ফের পক্ষে আদর্শ তবে বেশ বিরক্তিকর, এবং সম্ভবত বিধিগুলির বিপরীতে। কনসোল.লগ ব্যবহার করে চরিত্রের সংখ্যা 165 এ যায়।

F=n=>{
  for(i=0;++i<1<<n+n;l||alert((o+'').replace(/,\d?/g,r=>'\\/\n '[r[1]||3])))
    for(p=l=o=[],j=i;l+1&&p++-n-n;j/=2)
      b=j&1,
      l-=1-b-b,
      (o[k=b+n-l]=o[k]||[2])[p]=b;
}

কম গল্ফড

F=n=>{
  m = n+n
  outer:
  for (i=1; i < 1<<m; i+=2)
  {
    o=[]
    l=0;
    p=1;
    for (j = 1; j <1<<m; j+=j,p++)
    {
      if (i&j)
      {
        q=o[n-l]||[]
        q[p]=1;
        o[n-l]=q
        ++l;
      }
      else
      {
        --l;
        if (l<0) continue outer;
        q=o[n-l]||[]
        q[p]=0;
        o[n-l]=q
      }
    }
    if (l==0) console.log(o.join('\n').replace(/,\d?/g,r=>'\\/'[r[1]]||' '));
  }
}

টেস্ট ফায়ারফক্স / Firebug কনসোলে।

F(4)

আউটপুট

   /\
  /  \
 /    \
/      \ 

  /\/\
 /    \
/      \ 

    /\
 /\/  \
/      \ 

    /\
   /  \
/\/    \ 

  /\
 /  \/\
/      \ 

 /\/\/\
/      \ 

   /\/\
/\/    \ 

 /\  /\
/  \/  \ 

     /\
/\/\/  \ 

  /\
 /  \
/    \/\ 

 /\/\
/    \/\ 

   /\
/\/  \/\ 

 /\
/  \/\/\ 

/\/\/\/\ 

কৌতূহল যদি আপনার লেখার কোনও নির্দিষ্ট কারণ থাকে -b-bএবং -n-nতার পরিবর্তে -2*b?
স্টিভ বেনিট

@ স্টেভবেনেট কখনও কখনও এই প্যাটার্নটি ছোট হয় তবে এবার নয় (উদাহরণস্বরূপ: 2*b+1-> b-~b)
edc65

1

সিজেম, 84 বাইট

q~:Q{Q[XW]*mr1\{\_@+}%_{*}*{(\{_Q\-)S*@2$m0<" /""\\"?+QS*+Q)<\}%);z{N\++}*o}{;}?1}g

নোট করুন যে এই প্রোগ্রামটি অসীম লুপে পর্বতগুলি মুদ্রণ করবে যাতে অনলাইন দোভাষী আপনাকে সাহায্য করবে না; কমান্ড লাইন ব্যবহার করে প্রার্থনা করুন

java -jar cjam-0.6.2.jar mountain.cjam <<< 5

অথবা অনলাইন ব্যবহার চেষ্টা করুন

q~:Q{Q[XW]*mr1\{\_@+}%_{*}*{(\{_Q\-)S*@2$m0<" /""\\"?+QS*+Q)<\}%);z{N\++}*o}{;}?}fZ

এবং কেবল একের পর এক রান রান বোতামটি চাপুন এবং কল্পনা করুন যে আউটপুটটি একত্রিত হয়েছে।

মূল ধারণাটি হ'ল আমরা জানি যে একটি পর্বতমালার আকারের Q এর প্রতিটি ওপরের এবং নীচের দিকে ট্রানজিশনের Q থাকে।

 Q[XW]*mr                                   #shuffled list of Q 1s and -1s
1        {\_@+}%                            #height map after each transition
                _{*}*                       #if it passes through 0 it's invalid

তারপরে যদি এটি বৈধ হয় তবে আমরা এটি মুদ্রণ করব, যদি আমরা এটি স্ট্যাক থেকে পপ না করি যাতে এটি প্রবাহিত হয় না।

মুদ্রণ রাউটিংটি মূলত প্রতিটি কলামকে কিউ - উচ্চতার জায়গাগুলি, তারপরে প্রতীক হিসাবে তৈরি করে, তারপরে Q + 1 টি মোট অক্ষরগুলিকে আঘাত করার জন্য পর্যাপ্ত পরিমাণ স্পেস করে এবং তারপরে আমরা তাদের মধ্যে নিউলাইনগুলি সহ লাইনগুলি স্থানান্তর এবং মুদ্রণ করি।

z{N\++}*o                                   #transpose, insert newlines, print

আমি এই কাজ করার সময় এই প্রশ্নটি স্পষ্ট হয়েছে যে পাহাড়গুলি একবারে মুদ্রণ করা দরকার। এর জন্য কিছু পুনর্বিবেচনা এবং সম্ভবত আরও চরিত্রের প্রয়োজন হবে: /
প্যারাডিজমোর্ট

0

সি, 179

অপ্রয়োজনীয় সাদা স্থান বাদে।

একই জাতীয় কৌশল। আমি = 1 এবং = 0 n*2বিবেচনা করে সমস্ত- বিট বাইনারি মানগুলি দিয়ে চলেছি ।/\

আমি nপ্রতিটি n*3অক্ষর লাইনব্রেকস সমন্বিত একটি একক স্ট্রিং ফর্ম্যাট করি । লিখিত স্ট্রিংটিতে 1000 টি অক্ষর রয়েছে, তাই সাধারণত পর্বতের পরে প্রচুর সাদা জায়গা মুদ্রিত হয়। (এটি এর s[n*n*3]=0আগে যুক্ত করে ঠিক করা যেতে পারে puts)) যাইহোক, এটি আমাকে putsবিধিগুলি মেনে চলে কিনা তা যাচাই করার পরে পুরো পর্বতটিকে একক দিয়ে আউটপুট করতে সক্ষম করে ।

আমি এটিকে কোনও ফাংশনে রূপান্তর করার এবং forপরে একটি একক লুপে হ্রাস করার চেষ্টা করব ।

i,n,x,y,q,r;
main(){
  scanf("%d",&n);
  for(i=1<<n*2;i--;){                              //run though all n*2-digit binary numbers
    char s[]={[0 ...999]=32};                      //fill an array with spaces. This syntax is allowed by GCC
    y=n;                                           //start y one square below the grid (note: r is initialised to 0 by default.)
    for(x=n*2;x--;)                                //for each digit of i
      q=i>>x&1,
      y+=q+r-1,                                    //move up if the current and last digit are 0, down if they are 1, and stay on the same line if they are different.
      y<n?s[y*n*3]=10,s[y*n*3+x+1]=92-45*q:(x=0),  //if y is within the grid, put a newline (ASCII 10)at the beginning of the row and write \ or / (ASCII 92 or 47) to the correct square. Otherwise abort the x loop.
      r=q;                                         //store the current bit of i to r as it will be needed on the next iteration 
    n-1-y||puts(s);                                //if y is on the bottom row of the grid, output the mountain 
  }
}

আউটপুট (ডানদিকে সাদা পরিমাণের বিশাল পরিমাণটি নোট করুন)

$ ./a
4

 /\
/  \/\/\                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

   /\
/\/  \/\                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

 /\/\
/    \/\                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

  /\
 /  \
/    \/\                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

     /\
/\/\/  \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

 /\  /\
/  \/  \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

   /\/\
/\/    \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

 /\/\/\
/      \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

  /\
 /  \/\
/      \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

    /\
   /  \
/\/    \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

    /\
 /\/  \
/      \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

  /\/\
 /    \
/      \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

   /\
  /  \
 /    \
/      \                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

0

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

বেশ কয়েকটি প্রচেষ্টা খুব গল্ফযোগ্য হতে ব্যর্থ হওয়ার পরে, আমি এই হাস্কেল বাস্তবায়নের সাথে শেষ করেছি। আমি এপিএল সমাধান 2 এর একটি ফ্যাক্টরের মধ্যে থাকতে পেরে খুশি!

গল্ফযুক্ত সমাধান:

e=' ':e
m=[[]]:[[('/':e):map(' ':)x++('\\':e):y|k<-[0..n],x<-m!!(n-k),y<-m!!k]|n<-[0..]]
f n=putStr$unlines[map(!!(n-k))a|a<-m!!n,k<-[1..n]]

অবহেলিত এবং মন্তব্য করেছেন:

প্রোগ্রামটি পুনরাবৃত্তভাবে এন- স্টেপ পর্বত চিত্রগুলির সেট তৈরি করে । প্রতিটি চিত্রটি অসীম-দীর্ঘ স্ট্রিংগুলির একটি তালিকা দ্বারা প্রতিনিধিত্ব করে, পর্বতটি আঁকানো পাশের ধারে এবং তারপরে অনন্ততায় প্রসারিত স্থানগুলির প্রতিনিধিত্ব করে। এটি নিশ্চিত করে যে সমস্ত চিত্রের উচ্চতা একই হবে যা পুনরাবৃত্তি সহজ করে তোলে। মাউন্টেন প্রিন্টার একটি প্যারামিটার গ্রহণ করে যা উচ্চতাটিকে সীমাবদ্ধ মান হিসাবে ক্লিপ করে।

import Data.List (transpose)

-- Elementary picture slices, extending to infinity.
empty = ' ' : empty
up    = '/' : empty
down  = '\\': empty

-- A function which draws a mountain picture to stdout, clipping
-- its height to n.
printMtn n = putStr . unlines . reverse . take n . transpose 

{-- Combine mountain pictures x and y by

              x
 x # y  ==   / \y

--}
x # y = up : raised x ++ down : y
    where raised = map (' ':)

-- Given two sets X,Y of mountain pictures, compute the set X <> Y of all
-- combined pictures x#y for x in X, y in Y.
xs <> ys = [ x # y | x <- xs, y <- ys ]

-- Compute the (++,<>)-convolution of a list with itself, e.g.:
--   autoConvolve [x0,x1,x2] == (x2 <> x0) ++ (x1 <> x1) ++ (x0 <> x2)
autoConvolve xs = concat $ zipWith (<>) (reverse xs) xs

{--
    mtns is a list whose nth entry is the list of all n-step mountain diagrams.
    It is defined recursively by:
        --  The only 0-step mountain diagram is empty.
        --  Each (n+1)-step diagram can be uniquely drawn as x#y for
            some k-step diagram x and (n-k)-step diagram y.
--}
mtns = [[]] : [autoConvolve (prefix n) | n <- [1..]]
    where prefix n = take n mtns

-- The driver function: apply the height n mountain printer to each
-- n-step mountain diagram.  Whitespace is guaranteed by the order
-- in which the diagrams appear.
test n = mapM_ (printMtn n) $ mtns!!n

নমুনা ব্যবহার:

$ ghci mtn3.hs
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( mtn3.hs, interpreted )
Ok, modules loaded: Main.
λ> f 3
  /\  
 /  \ 
/    \

 /\/\ 
/    \

 /\   
/  \/\

   /\ 
/\/  \


/\/\/\
λ> 

0

গল্ফস্ক্রিপ্ট 103 ( ডেমো )

2*:§2\?,{2base.,§\-[0]*\+:a 1\{.2*@(.@+@@+}%:l$)\;),-1%{a,,{.l=2$=\a=1$+*' \\/'= }%\;n+}%\1=*l$(\;0>*}/

প্রোগ্রামটি পূর্ণসংখ্যার প্যারামিটারটিকে 0 থেকে 2 ^ (এন -1) পর্যন্ত সংখ্যার সমস্ত বাইনারি উপস্থাপনা পাহাড় হিসাবে রেন্ডার করার চেষ্টা করে। এটি অবৈধ সংমিশ্রণগুলি রেন্ডার করে না (উদা: যেমনটি 0 স্তরের নীচে যায়)।

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