সিয়েরপিনস্কি স্তরসমূহ


19

/\আপনি দিয়ে শুরু করে নিচের মতো লাইন যুক্ত করে প্যাটার্নের মতো সিয়েরপিনস্কি ত্রিভুজ তৈরি করতে পারেন ...

  1. কোন আলগা শাখা /বা \টুকরা আবার দুটি শাখা মধ্যে: /\
  2. শাখাগুলির কোনও সংঘর্ষ এর \/অধীনে কিছুই (ফাঁকা স্থান ছাড়া) মারা যায়।

এই নিয়মগুলি পুনরাবৃত্তি করলে ফলন হয়

     /\
    /\/\
   /\  /\
  /\/\/\/\
 /\      /\
/\/\    /\/\
etc...

( ভিহার্ট দ্বারা অনুপ্রেরণা )

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইতিবাচক পূর্ণসংখ্যক এন নেবে এবং এই ধরণের প্রথম এন লাইনগুলি স্টডআউটে প্রিন্ট করবে, প্রয়োজনের চেয়ে বেশি কোনও অগ্রণী বা অনুসরণীয় স্থান নেই।

উদাহরণস্বরূপ, ইনপুট 1হলে আউটপুট অবশ্যই হবে

/\

ইনপুট 2হলে আউটপুট অবশ্যই হবে

 /\
/\/\

ইনপুট 8হলে আউটপুট অবশ্যই হবে

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

ইত্যাদি।

সবচেয়ে কম বাইটস সহ কোডটি জয় করে।


1
কোড সংক্ষেপণ শেননিগানগুলি এড়ানোর জন্য আপনি কি এটি "সর্বাধিক বাইটস" বানাতে পারেন?
xnor

@ এক্সনর পরিবর্তন হয়েছে।
ক্যালভিনের

আমি এই পোস্ট করতে আক্ষরিক ছিল। লোভী ব্যক্তি। : /
কাজ ওল্ফ

এপিএলের উত্তর কোথায়?
জো

উত্তর:


9

গল্ফস্ক্রিপ্ট (৪২ বাইট)

~,-1%1\{' '*\.2base{'  /\\'2/=}%n@.2*^}/;;

অনলাইন ডেমো

এটি পাস্কালের ত্রিভুজ এবং সিয়েরপিনস্কি ত্রিভুজের মধ্যে একটি সুপরিচিত সম্পর্ককে কাজে লাগায়।


6

সিজেম, 48 46 বাইট

li(_S*"/\\":T+\{_N@S+TW%/S2**" /"/"\ "f/:+T*}*

প্রশ্নের 1 এবং 2 পর্যবেক্ষণের ভিত্তিতে সহজ পুনরাবৃত্তির পদ্ধতির approach

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

কিভাবে এটা কাজ করে

li(         " L := int(input()) - 1            ";
_S*         " A := L * ' '                     ";
"/\\":T+    " A += (T := '/\')                 ";
\{          " do L times:                      ";
  _N        "   push A, '\n'                   ";
  @S+       "   A += ' '                       ";
  TW%/      "   B := A.split(reverse(T))       ";
  S2**      "   A := '  '.join(B)              ";
  " /"/     "   B := A.split(' /')             ";
  "\ "f/    "   C := { X.split('\ ') : X ∊ B } ";
  :+T*      "   A := T.join(sum(C, []))        ";
}*          "                                  ";

সিজেম, 51 বাইট

li__2mL,1a\{2_@##)1$f*+}/<f{2b_"  /\\"2/f=@@,-S*\N}

আমি এই পদ্ধতিটি আরও ভাল পছন্দ করি তবে এটি পুনরাবৃত্তির সাথে প্রতিযোগিতা করতে পারে না। এমনকি অপসারণের পরেও 2mL(যা কমপক্ষে ও (2 এন ) কার্যকর হওয়ার সময় ফলাফল দেয়), আমি এখনও 48 বাইটে আছি ...

এই পদ্ধতির /\1 এর হিসাবে এনকোড হয় এবং 0 এর হিসাবে তাদের মধ্যে দ্বিগুণ স্থান। ফলাফলযুক্ত অ্যারেগুলি বাইনারি সংখ্যাগুলি বিবেচনা করে আমরা দেখতে পাই যে নবম সারির কনফিগারেশনটি 1 টির চেয়ে বড় nth পূর্ণসংখ্যার সাথে মিলে যায় যা বিভিন্ন ফারম্যাট সংখ্যার ( 2 2 k +1 ফর্মের পূর্ণসংখ্যার ) হিসাবে প্রকাশ করা যেতে পারে ।

কিভাবে এটা কাজ করে

li__2mL,1a         " push L := int(input()), L, R := range(log(L)/log(2)), A := [1] ";
\{2_@##)1$f*+}/    " for I in R: A += { a × 2**(2**I) : a ∊ A }                     ";
<                  " A := A[:L]                                                     ";
f{                 " for I in R: push L, I                                          ";
  2b_"  /\\"2/     "   push (B := base(I, 2)), B, S := [ '  ' '/\' ]                ";
  f=               "   for J in I: J := S[J]                                        ";
  @@,-S*\N         "   push (L - len(B)) * ' ', J, '\n'                             ";
}                  "                                                                ";

5

পাইথন 2 - 140 139 127 122 121 118 116

N=input()
b,V,m,n=' V/\\'
s=b*~-N+m+n
R=str.replace
while N:print s;N-=1;s=R(R(R(R(s+b,b+m,V),n+b,V),n+m,b+b),V,m+n)

অস্থায়ী স্ট্রিং প্রতিস্থাপনের উপর ভিত্তি করে ( /programming//a/8687380/3419103 ):

  1. / > V
  2. \ > V
  3. \/> __(2 স্পেস)
  4. V > /\

b*(N-1)+m+nহতে পারেb*~-N+m+n
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান: দুর্দান্ত! এখন আমি তোমাকে পেয়েছি, জাভাস্ক্রিপ্ট! ;)
ফালকো

4

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

minified:

T=n=>{S=' '.repeat(n-1);a='/\\';for(t=s=S+a+S;--n;t+='\n'+s)s=s.replace(/\\\//g,'  ').replace(/ \/|\\ /g,a);return t}

সম্প্রসারিত:

T = n => {
    S = ' '.repeat( n-1 );
    a = '/\\';
    for( t = s = S + a + S; --n; t += '\n' + s )
        s = s.replace( /\\\//g, '  ' ).replace( / \/|\\ /g, a );

    return t;
}

নমুনা আউটপুট (এর জন্য n = 20):

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

এখন যদি কেবলমাত্র repeatএবং replaceফাংশনের নামগুলি এত দীর্ঘ না হত। : P: P


3

পাইথ, 45 বাইট

K"/\\"Jt+*QdKVQpbJ=JjKsmcd"\ "cj*2dc+Jd_K" /"

উদাহরণ রান

$ pyth -c 'K"/\\"Jt+*QdKVQpbJ=JjKsmcd"\ "cj*2dc+Jd_K" /"' <<< 16
               /\
              /\/\
             /\  /\
            /\/\/\/\
           /\      /\
          /\/\    /\/\
         /\  /\  /\  /\
        /\/\/\/\/\/\/\/\
       /\              /\
      /\/\            /\/\
     /\  /\          /\  /\
    /\/\/\/\        /\/\/\/\
   /\      /\      /\      /\
  /\/\    /\/\    /\/\    /\/\
 /\  /\  /\  /\  /\  /\  /\  /\
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\

কিভাবে এটা কাজ করে

                            # Q = eval(input())
K"/\\"                      # K = "/\\"
      Jt+*QdK               # J = (Q * " " + K)[1:]
             VQ             # for N in range(Q):
               pbJ          #     print(J, end="\n")
                            #
=JjK                        #     J = K.join(
    sm                      #         sum(list(map(lambda d:
      cd"\ "                #             d.split("\ "),
            c               #                                                .split(    )
             j*2d           #              " ".join(                        )
                 c   _K     #                                .split(K[::-1])
                  +Jd       #                       (J + " ")
                       " /" #                                                       " /"
                            #     ))))

3

রুবি, 90

f=->n{a=["/\\".center(2*n)]
2.upto(n){a<<a[-1].gsub("\\/","  ").gsub(/ \/|\\ /,"/\\")}
puts a}

ব্যাখ্যা

  • ইনপুটটিকে ল্যাম্বডায় আর্গুমেন্ট হিসাবে নেওয়া হয়। এটি একটি হতে পারে বলে আশা করা হচ্ছে Integer
  • প্রতিটি পাশ দিয়ে ফাঁকা দিয়ে String#centerএকটি তৈরি করতে ব্যবহার করুন এবং এটি একটি ( ) এ রেখে দিন।String "/\"n - 2Arraya
  • প্রতিস্থাপিত প্রতিটি ঘটনাসমূহের সাথে প্রতিস্থাপিত এবং প্রতিস্থাপিত বা প্রতিস্থাপনের সাথে aসর্বশেষ উপাদানটিতে যুক্ত করুন ।a"\/"" "" /"" \""/\"
  • putsপ্রতিটি উপাদান aনিজস্ব লাইনে মুদ্রণ করতে ব্যবহার করুন ।

3

হাস্কেল, 128 112

g n=unlines$take n$i t([1..n]>>" ")%(i(\l->l++l%i(t.t)(t l>>"  ")%l)["/\\"]!!n)
t=tail
(%)=zipWith(++)
i=iterate

আমি যদি আমার 128 এর মতো অক্ষরগুলি গণনা করিimport Data.Listunlines
আপনিও

@ ফ্লনক unlinesএর উপস্থাপনায় আছে।
গর্বিত হাসেলেলার

উফফ, সম্ভবত মন্তব্য করার আগে আমার এটি সন্ধান করা উচিত ছিল। আমার খারাপ!
ফ্লোনক

2

জাভাস্ক্রিপ্ট (E6) 107 106

সম্পাদনা: স্থির বাইট গণনা, পুনরাবৃত্তি করা।

অন্যান্য জেএস উত্তরের চেয়ে খুব বেশি আলাদা নয় ... অনুরোধ অনুসারে কমপক্ষে এটি একটি 'প্রিন্ট' করে। কোরটি '/' 'with' এর সাথে '/ \' এবং সমস্ত নতুন প্রতিটি লাইনে '' দিয়ে প্রতিস্থাপন করছে।

F=(n,o=t='/\\',b=' ')=>
  n--&&
    console.log(b.repeat(n)+o)|
    F(n,(b+o+b).replace(/../g,s=>s==b+b|s=='\\/'?b+b:t))

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(15)

আউটপুট

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

2

পার্ল 5 - 56 বাইট

Actual 0 এর প্রকৃত নাল বাইট অক্ষর দ্বারা প্রতিস্থাপন করা যেতে পারে

#!/usr/bin/perl -l
$p="/\\";$_=$"x~$_.$p,y/\0/ /,print,$p^="\0\0$p"for-<>..-1

এটি এই সত্যটি ব্যবহার করছে যে আপনি যদি শীর্ষস্থানীয় স্থানগুলি উপেক্ষা করেন এবং প্রদত্ত সারিতে f / n) = f (n-1) the (f (n-1) <হিসাবে '/ \' 1 এবং '' হিসাবে 0 হিসাবে প্রতিনিধিত্ব করেন < <1)। তবে পার্লের বিটওয়াইজ স্ট্রিং ম্যানিপুলেশনের জন্য উপরের কোডের গণনাগুলি স্ট্রিংগুলিতে কার্যকর করা হয় যা প্রত্যাশিত আউটপুট (কোনও অগ্রণী স্থান নেই, নাল বাইট দ্বারা প্রতিস্থাপিত অন্যান্য স্থানগুলি) এর কাছাকাছি থাকে।

$p="/\\";          # initialize
  $_=$"x~$_.$p,    # loop start, add spaces
  y/\0/ /,         # replace nulls with spaces
  print,           # output
  $p^="\0\0$p"     # calculate next string
for-<>..-1         # loop from -n to -1

1

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

n=i=input()
while i:print' '*i+''.join("/ \ "[j&i+1>0::2]for j in range(n-i+1));i-=1

0

লাম্বদা সহ জাভাস্ক্রিপ্ট, 141 128

141

f=n=>{for(a="25",q=0;++q<n;a=a[r='replace'](/^|$/mg,1)[r](/(.*)$/,"$1\n$1")[r](/..(?=.*$)/g,x=>x%3?11:25));return a[r](/./g,x=>"  /  \\"[x])}

128

f=n=>(t=a=>--n?t(a[r='replace'](/^|$/mg,1)[r](/(.*)$/,"$1\n$1")[r](/..(?=.*$)/g,x=>x%3?11:25)):a)("25")[r](/./g,x=>"  /  \\"[x])

ফায়ারফক্সে পরীক্ষা করা যেতে পারে (n = 16):

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

0

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

i=input()
x=1
while i:i-=1;print " "*i+bin(x)[2:].replace("0","  ").replace("1", "/\\");x^=2*x

প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! চমৎকার উত্তর: ডি
বিড়াল

0

গণিত, 86 বাইট

Column[Row/@Mod[Table[Binomial[n,k],{n,0,#-1},{k,0,n}],2]/.{1->"/\\",0->"  "},Center]&
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.