হেক্সাগনগুলির ত্রিভুজ


20

মনে করুন |/\অক্ষর দ্বারা গঠিত হেক্সাগনগুলির একটি অসীম টাইলিং ।

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

প্রদত্ত ইনপুট n > 0, _tষধের মাঝখানে একটি নোঙ্গরযুক্ত নীচের উদাহরণগুলিতে বর্ণিত হিসাবে এই টাইলিংয়ের একটি ত্রিভুজাকার অংশ আউটপুট দিন :

n=1
\_/

n=2
\/ \/
 \_/

n=3
\  |  /
 \/ \/
  \_/

n=4
\/ \ / \/
 \  |  /
  \/ \/
   \_/

n=5
\  |   |  /
 \/ \ / \/
  \  |  /
   \/ \/
    \_/

n=6
\/ \ / \ / \/
 \  |   |  /
  \/ \ / \/
   \  |  /
    \/ \/
     \_/

n=7
\  |   |   |  /
 \/ \ / \ / \/
  \  |   |  /
   \/ \ / \/
    \  |  /
     \/ \/
      \_/

n=8
\/ \ / \ / \ / \/
 \  |   |   |  /
  \/ \ / \ / \/
   \  |   |  /
    \/ \ / \/
     \  |  /
      \/ \/
       \_/

and so on

বিধি

  • শীর্ষস্থানীয় / পিছনের নিউলাইনগুলি বা অন্যান্য সাদা স্থান pচ্ছিক, যদি অক্ষরগুলি যথাযথভাবে সরে যায় line
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরিয়ে দিতে পারেন।
  • আউটপুট কনসোলে থাকতে পারে, একটি চিত্র হিসাবে সংরক্ষণ করা হয়, স্ট্রিংগুলির তালিকা হিসাবে ফিরে আসে, ইত্যাদি etc.
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

আপনি যদি ফলাফলের শীর্ষের সাথে শেষ পয়েন্টগুলির সংখ্যা গণনা করেন তবে আপনি A029578 পাবেন (প্রাকৃতিক সংখ্যাগুলি সমান সংখ্যার সাথে আন্তঃবাহিত ) পাবেন অফসেটের সাথে 4. 2 , 4 , 3 , 6 , 4 , 8 , 5 , 10 , 6 , 12 , 7 , 14 , ...
ইঞ্জিনিয়ার টোস্ট

"চিত্র হিসাবে সংরক্ষণ করা" এর অর্থ কী? এই ট্যাগ কি ascii- শিল্প?
tsh

@tsh হাইপারকার্ড বা এমন কিছুর মতো জিনিসের জন্য যেখানে ক্যানভাসে আউটপুট তাদের "স্টডআউট" আউটপুটের সমতুল্য। আমি খুঁতখুঁতে নই কিভাবে আউটপুট প্রদর্শন করা হয়।
অ্যাডমবর্কবার্ক

উত্তর:


8

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

i=k=input()
while i:i-=1;print(" "*(k+~i)+"\\"+i*' /  |\  '[i%2::2])[:k-~i]+"_/"[i>0:]

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

এরিকের একটি কৌশল আমাকে 3 বাইট গল্ফ দেওয়ার অনুমতি দেয়! জনাথন অ্যালানকে 3 বাইট সংরক্ষণ করা হয়েছে।

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

প্রথমত, এই stdin এবং দুটি পৃথক ভেরিয়েবল তা নির্ধারণ থেকে ইনপুট পায় iএবং k। তারপরে, ভেরিয়েবল iসত্যবাদী হওয়ার পরেও আমরা এটিকে হ্রাস করি এবং তদনুসারে স্ট্রিংগুলি তৈরি করি; এটি ইনপুট থেকে লুপিংয়ের জন্য একটি শর্টহ্যান্ড - সর্বমোট 0 থেকে নীচে।

স্ট্রিংগুলি তৈরি করা হচ্ছে

আমি এটিকে আরও বেশি ভাগে ভাগ করব:

  • প্রথম প্রথম, নেতৃস্থানীয় ব্যবধান পেয়ে তা অর্জন করা হয় " "*(k+~i)। যেহেতু iপরিসীমাটির মাধ্যমে ম্যাপ করা হয়েছে (ইনপুট, 0] , তাই আমাদের অবশ্যই এটি k(আমাদের নিরাপদে সঞ্চিত মূল ইনপুট) থেকে বিয়োগ করতে হবে , হ্রাস করতে হবে এবং বহুগুণ এমন একটি স্থান পুনরাবৃত্তি করতে হবে।

  • +"\\"- "\"উপরের স্পেসে চরিত্রটি যুক্ত করে ।

  • ' / |\ '[i%2::2]- আমাদের দুটি স্ট্রিং উত্পন্ন করে যথা: "/ \ "এবং " | "নিম্নলিখিত পদ্ধতিতে:

    • যদি iবিজোড় হয় তবে i% 2 হ'ল 1 , [i%2::2]সূচক 1 (0-সূচকযুক্ত) থেকে শুরু করে আমাদের বৃহত্তর স্ট্রিংয়ের প্রতিটি 2 টি অক্ষর প্রদান করে ।

    • যদি iএমনকি, আমি% 2 হয় 1 , একই আছে এইভাবে উপরে প্রক্রিয়া ছাড়া আর সূচিতে শুরু 0

  • +~-i*- উপরের উত্পন্ন স্ট্রিংটি হয় হয় "/ \ "বা " | ", আই -1 বার পুনরাবৃত্তি করে এবং অন্যান্য স্ট্রিংগুলিতে সংযোজন করে। বিটওয়াইজ অপারেটরের সুবিধা ( ~- বিটওয়াইস কমপ্লিমেন্ট, সমতুল্য আমি -১ থেকে বিয়োগ ) এর প্রসঙ্গে এটি প্রথম বন্ধনী প্রয়োজন হয় না।

  • [:k-~i]- উপরে সূচি k- ~ i = কে - (-1 - i) = k + 1 + i অবধি স্ট্রিংয়ের সমস্ত অক্ষরকে সম্মিলিত করে

  • +"_/"[i>0:]- এটি কেবলমাত্র আমি যোগ করতে "/"চাইলে 1 ডলার যোগ করে , অন্যথায় এটি যুক্ত হয় _/

সম্পূর্ণ উদাহরণ / কার্যকরকরণের বিশদ

আসুন দখল কিভাবে জিনিস একটি ইনপুট জন্য কাজ একটি উদাহরণ 4 :

i=k=input()        # i and k are assigned to 4.
while i:           # Starts the loop. The initial value of i is 4.
i-=1;              # Decrement i. i is now 3.
" "*(k+~i)         # A space repeated k - 1 - i = 4 - 1 - 3 = 0 times.
+"\\"              # Plus the character "\". CS (Current string): "\".
' /  |\  '[i%2::2] # The string ' /  |\  '[3%2::2] = ' /  |\  '[1::2] = "/ \ ".
i*                 # ^ repeated i = 3 times: "/ \ / \ / \ ".
+                  # And concatenate. CS: "\/ \ / \ / \ "
[:k-~i]            # Get the characters of ^ up to index k + 1 + i = 4 + 1 + 3 = 8.
                   # CS: "\/ \ / \".
+"_/"[i>0:]        # Append "_/"[i>0:] = "_/"[3>0:] = "_/"[1:] = "/".
                   # CS: "\/ \ / \/".
print              # Output the result "\/ \ / \/".
while i:           # i is truthy (> 0), thus we loop again.
i-=1;              # Decrement i. i becomes 2.
" "*(k+~i)         # " " repeated 4 - 2 - 1 = 1 time. 
+"\\"              # Plus "\". CS: " \".
' /  |\  '[i%2::2] # ' /  |\  '[2%2::2] = ' /  |\  '[::2] = "  | ".
+i*                # Repeat i = 2 times and append: "  | ". CS: " \  |  |".
[:k-~i]            # CS up until k + 1 + i = 4 + 2 + 1 = 7. CS: " \  |  ".
+"_/"[i>0:]        # Append "/". CS: " \  |  /".
print              # Outputs the CS: " \  |  /".
while i:           # i is truthy (> 0), thus we loop again.
i-=1;              # Decrement i. i is now 1.
" "*(k+~i)         # " " repeated 4 - 1 - 1 = 2 times. 
+"\\"              # Plus "\". CS: "  \".
' /  |\  '[i%2::2] # ' /  |\  '[2%2::2] = ' /  |\  '[::2] = "/ \ ".
+i*                # Repeat i = 1 time and append: "/ \ ". CS: "  \/ \ ".
[:k-~i]            # CS up until k + i + 1 = 4 + 2 = 6. CS: "  \/ \".
+"_/"[i>0:]        # Append "/". CS: "  \/ \/".
print              # Outputs the CS: "  \/ \/".
while i:           # i is truthy (> 0), thus we loop again.
i-=1;              # Decrement i. i is now 0.
" "*(k+~i)         # " " repeated 4 - 1 - 0 = 3 times. 
+"\\"              # Plus "\". CS: "   \".
' /  |\  '[i%2::2] # ' /  |\  '[1%2::2] = ' /  |\  '[1::2] = "  | ".
+i*                # Repeat i = 0 times and append: "   \". CS: "   \".
[:k-~i]            # CS up until k + i + 1 = 4 + 0 + 1 = 5. CS: "   \".
+"_/"[i>0:]        # Append "_/" (because i > 0 is False since i == 0). CS: "  \_/".
print              # Outputs the CS: "  \_/".
while i:           # i == 0, hence the condition is falsy and the loop ends. 
                   # Program terminates.

i-=1লুপের শুরুতে সরান এবং এটিকে 87 বাইটে নামানোর জন্য কিছুটা ভিন্ন ডান-পাশের গঠন ব্যবহার করুন ।
জোনাথন অ্যালান

... সত্যিকার অর্থে 86 বাইটে আরও ভাল আপনার ডান পাশের গঠনের মতো কিছু ব্যবহার করে :)
জোনাথন অ্যালান

@ জোনাথন অ্যালান ... ধন্যবাদ! (যদিও ব্যাখ্যাটি পুনরায় করা হবে ... শক্ত! ... দীর্ঘশ্বাস )
মিঃ এক্সকডার

@ জোনাথান অ্যালান আমি একটি বিকল্প পেয়েছি যা হ্রাস বিবৃতিটির ক্রমটিকে বিপরীত করে না।
মিঃ এক্সকোডার


2

05 এ বি 1 ই , 33 বাইট

1ŸεÐi'_ë"/ \   | "4ôsès∍}'\ì.∞}.c

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


এটি অনলাইন চেষ্টা করুন! - "0300" এবং "2010" ধরণটি শোষণ করার চেষ্টা করা হয়েছে, এত উত্তপ্ত হয়নি।
ম্যাজিক অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টপাস ইউরান এটি একটি আন্ডারস্কোর খুব বেশি মুদ্রণ করে না: পি
এরিক দ্য আউটগল্ফার




2

পাইথন 2 , 123 112 110 109 100 98 96 বাইট

i=n=input()
while i:a=i%2;print' '*(n-i)+'\%s/'%['_',((-~i/2)*'/   \  |'[a::2])[a:~a]][i>1];i-=1

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

  • রডের উত্তরের মতো ইনপুট এবং স্ট্রিং ফর্ম্যাটিং ব্যবহার করে একগুচ্ছ বাইটস সংরক্ষণ করা
  • মিঃ এক্সকোডারকে 2 বাইট সংরক্ষণ করা হয়েছে

1
আপনি প্রতিস্থাপন 2 বাইট সংরক্ষণ করতে পারবেন -1-aসঙ্গে ~a(যেমন আমি আমার উত্তর করেছিল)।
মিঃ এক্সকডার

@ মিঃ এক্সকোডার ধন্যবাদ :)
টিফিল্ড





0

হাস্কেল, 101 99 বাইট

j 1=["\\_/"]
j n|r<-([1,3..n-1]>>)=('\\':cycle[init$r"/ \\ ",' ':r" |  "]!!n++"/"):map(' ':)(j$n-1)

লাইনের একটি তালিকা ফেরত দেয়।

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

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

j 1=["\\_/"]               -- base case, n=1

j n                        -- for all other n
   |r<-([1,3..n-1]>>)      -- let r be the function that makes n/2 copies of
                           -- it's argument
   =                       -- the result is
      '\\':                --  a backslash, followed by
      cycle[  ]!!n         --  the inner part, which is
          init$r"/ \\ "    --    all but the last char of some copies of
                           --    "/ \ " for even line numbers, or
          ' ':r" |  "      --    some copies of " |  " prepended by a space
                           --    for odd line numbers
                           --    (chosen by indexing an infinite list of
                           --     both values alternating)   
      ++"/"                --  followed by a slash
    :                      --  and append a
               j$n-1        --  recursive call with n-1
      map(' ':)            --  where each line is prepended by a space

সম্পাদনা: @ লাইকনি দুটি বাইট সংরক্ষণ করেছেন। ধন্যবাদ!


([1,3..n-1]>>)পরিবর্তে ব্যবহার করা যেতে পারে ([1..div n 2]>>)
লাইকনি

0

জাভা (ওপেনজেডিকে 8) , 315 306 বাইট

i->{String r="";int j=0,k,u=i*2;char[][]c=new char[i][u+1];c[i-1][i]=95;for(;j<i;r+="".valueOf(c[j++]).replace('\0',' ')+"\n")for(k=0;k<u+1;k++){if(k==j)c[j][k]=92;if(k==u-j)c[j][k]=47;if(k>j&k<u-j)if((i-j)%2<1)c[j][k]=(k-j-1)%2<1?(char)(47+((k-j-1)/2)%2*45):32;else if((k-j-1)%4==2)c[j][k]='|';}return r;}

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


0

জাভা (ওপেনজেডিকে 8) , 198 বাইট

শেষ পর্যন্ত এটি 200 বাইটের নিচে পেয়েছে। সম্ভবত পরে একটি ব্যাখ্যা পোস্ট করবে।

i->{for(int k=i+1;i>0;System.out.println(("".format("%"+(k-i)+"s","")+"\\"+(i<2?"":"".format("%"+(i-1)+"s","")).replace(" ","/ \\ ,  | ".split(",")[i%2])).substring(0,i<2?k:k+i)+(--i<1?"_/":"/")));}

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


0

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

f=(y,s='\\')=>--y?s+(y&1?' / \\':' |  ').repeat(y).slice(~y-y)+`/
`+f(y,' '+s):s+'_/'

ডেমো




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