পূর্বসূরীর-সমাপ্ত আসকি কিউবস


34

প্রথম প্রিসেসর-সমাপ্ত এসকিউ কিউব (পিএসি 1) পার্শ্ব দৈর্ঘ্য 1 সহ একটি সাধারণ ঘনক্ষেত এবং এটি দেখতে দেখতে:

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

পিএসি 2 একটি জ্যামিতিক আকৃতি যেমন যে তার পূর্বসুরী (সঙ্গে এটি মিশ্রন পিএসি 1 ) একটি পার্শ্ব দৈর্ঘ্য সমাপ্ত 2 ঘনক্ষেত্র:

      front                back
   /////////\           /////////\
  /////////  \         /////////  \
 /////\\\\\   \       /////////    \
/////  \\\\\   \     /////////      \
\\\\\  /////   /     \\\\\\\\\      /
 \\\\\/////   /       \\\\\\\\\    /
  \\\\\\\\\  /         \\\\\\\\\  /
   \\\\\\\\\/           \\\\\\\\\/

যেহেতু ব্যাক- ভিউ একধরণের বোরিং, আমরা কেবল সামনের- দর্শনটিতে আগ্রহী ।

পিএসি 3 এর ক্ষেত্রেও একই রকম : কিছু ভিজ্যুয়াল চিন্তাভাবনা নিয়ে পিএসি 2 টি ঘুরিয়ে ঘুরিয়ে পিএসি 3 এ প্লাগ ইন করা যেতে পারে যাতে শক্ত পাশের দৈর্ঘ্য 3 কিউব হয়:

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

এবং পিএসি 4 এর সাথে :

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

টাস্ক:

একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যা n গ্রহণ করে এবং উপরের চিত্রের মতো ঠিক পিএসি এন এর সামনের সামনের দৃশ্যটি প্রিন্ট করে বা মুদ্রণ করে । অতিরিক্ত পিছনে সাদা স্থান গ্রহণযোগ্য।

এটি , সুতরাং আপনার পছন্দমতো ভাষাতে যতটা সম্ভব বাইট ব্যবহার করার চেষ্টা করুন।


দীর্ঘস্থায়ী উল্টানো আউটপুট, বা বাম এবং ডানদিকে স্যুইচ করা কি ঠিক আছে?
বুসুক্সুয়ান

না, "আলো" সামঞ্জস্য রাখা চ্যালেঞ্জের অংশ।
লাইকনি

সাধারণত কোড-গল্ফ প্রশ্নের জন্য অনুগ্রহটি প্রতিযোগিতা এবং উত্তরগুলির গল্ফিংকে উত্সাহিত করার জন্য সবচেয়ে সংক্ষিপ্ত উত্তরের দিকে যায় তবে এটি কার্যকরভাবে প্রয়োগ করা যায় না, এবং এটির প্রাপ্য যে কোনও উত্তরে এটির জন্য আপনাকে স্বাগত জানাতেই আরও বেশি কিছু হবে।
mbomb007

উত্তর:


11

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

f=
(n,l=n*4+1,r=1,i=n*2,g=a=>` / \\ /
`.replace(/./g,c=>c.repeat(a.pop())))=>n?g([r,,l,--i])+g([r,2,l,--i])+f(n-1,l-1?1:r-4,r-1?1:l-4).replace(/(\S).*(.)/g,r-1?`$1   $&$2$2$2$2`:`$1$1$1$1$&   $2`)+g([r,2,l,,,i])+g([r,,l,,,i+1]):``
<input type=number min=0 oninput=o.textContent=f(+this.value)><pre id=o>


4

ব্যাচ, 559 432 400 বাইট

@echo off
set m=
for /l %%i in (1,1,%1)do call set m=  %%m%%
call:c "%m:~2%" %m: =//%/\
exit/b
:c
setlocal
set m=%~1%2%~3
echo  %m%
echo %m:/\=/  \%
set s=%~1
if "%s:~,1%"=="/" goto g
set t=%2
set t=%t:~3,-3%
if %t:~,1%==/ (call:c "%s:~2%////" /\%t:/=\% "   \%~3")else call:c "%s:~2%/   " %t:\=/%/\ "\\\\%~3"
:g
set m=%m:/=-%
set m=%m:\=/%
set m=%m:-=\%
echo %m:\/=\  /%
echo  %m%

ব্যাখ্যা: কিউবের নীচের অর্ধেকটি উপরের অর্ধেককে প্রতিবিম্বিত করে আঁকা হয়। অর্ধেকটি আরও সাতটি ছয়টি তিনটি স্ট্রিপ অংশে বিভক্ত করা হয়েছে , এই চিত্রটি উপরের অর্ধেকটি দেখায়:

1       12/////////////////\233
1      12/////////////////  \233
1     ////12/\\\\\\\\\\\\\23   \3
1    ////12/  \\\\\\\\\\\\\23   \3
1   /////   12/////////\23\\\\   \3
1  /////   12/////////  \23\\\\   \3
1 /////   ////12/\\\\\23   \\\\\   \3
1/////   ////12/  \\\\\23   \\\\\   \3
  1. ইন্ডেন্টেশন (যা প্রতিটি সারিতে হ্রাস পায়) এবং বাম ত্রিভুজ, যা প্রতিটি অন্যান্য সারিতে বৃদ্ধি করে
  2. মাঝের সঙ্কুচিত জিগজ্যাগ ত্রিভুজটি, প্রতিটি অন্যান্য সারিতে বিকল্প পাশে ছোট ত্রিভুজ সহ
  3. ডান ত্রিভুজ, যা বামের সাথে সিঙ্কে বৃদ্ধি পায়

সম্পাদনা করুন: কোডটি উন্নত করে 20% এর বেশি সংরক্ষণ করা হয়েছে যা উপরের অংশটি নীচের অংশে প্রতিবিম্বিত করে। বাম দুটি এবং মাঝারি তিনটি স্ট্রিপগুলি মার্জ করে প্রায় 10% সংরক্ষণ করা হয়েছে।


4

ক্যানভাস , 36 বাইট

;Xø;{1x/╋
ø╶{«5⁸2²4×⁸²«1╋²«\+;↔53╋}═

এখানে চেষ্টা করুন!


এসওজিএলের এএসসিআইআই আর্ট সংস্করণটি এসওজিএল একটি এএসসিআইআই আর্ট চ্যালেঞ্জের তুলনায় ছড়িয়ে পড়েছে?
dylnan

@ অল্লান ক্যানভাসের মধ্যে অন্তর্নির্মিত স্থানটির তির্যক স্থানটি ছিল না যা এটি কিছুটা গল্ফ করতে পারে। চ্যালেঞ্জটির জন্য একটি বিল্ট-ইন যোগ করা ঠিক মনে হয়নি
dজেমা

বুঝেছি. উৎসুক. এখনও দুটি দুর্দান্ত ভাষা
ডাইলানান

4

এসওজিএল ভি0.12 , 32 বাইট

ø.∫4*I└*2∙f«5└*∙+¼F«╝┼;↔±53╬5}╬±

এখানে চেষ্টা করুন!

সরল ব্যাখ্যা:
1..xx প্রত্যেকটির জন্য পুনরাবৃত্তি
২. প্রস্থ i*4+1এবং উচ্চতা = একটি আকৃতি তৈরি করুন = (0-indexed)i // 2
3. প্যাড করুন যাতে এটি দেখতে
4 -র মতো মনে হয় 4. অনুভূমিকভাবে একটি "\" আকার যুক্ত করুন
5. পূর্ববর্তী পদক্ষেপটি সন্নিবেশ করুন ভিতরে 6 বিপরীত। প্রতিটি পরে, উল্লম্বভাবে আয়না

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

ø                                 push an empty string - starting stage
 .∫                          }    iterate over 1..input
   4*                               multiply the 1-indexed counter by 4
     I                              and add 1
      └*                            repeat "/" that many times
        2∙                          and repeat vertically twice. Top 2 lines are done
          f«                        push the 0-indexed counter floor divided by 2
            5└*                     push "/" repeated 5 times
               ∙                    and repeat that vertically by the result of the "f«"
                +                   add vertically, creating a "⌐" shape
                 ¼                  prepend each next line with one less space than the above
                  F«                push 1-indexed counter floor divided by 2
                    ╝               create a "\" diagonal that long
                     ┼              and append it horizontally. Shell is done of this hexagon
                      ;↔±           get the previous item on the stack and reverse it horizontally
                         53╬5       and at [5;3] insert the previous result in this
                              ╬±  once everything's done, mirror vertically to finish the hexagon

2

হাস্কেল , 232 227 224 187 183 180 175 বাইট

m '/'='\\'
m '\\'='/'
m c=c
r=reverse
k=map
n?s=('/'<$[1..4*n])++s
f 0=[]
f n=n?"/\\":n?"/  \\":[1?k m(r s)++"   \\"|s<-f$n-1]
s="":k(' ':)s
((++).r<*>k(k m)).zipWith(++)s.r.f

শেষ লাইনের বেনামে ফাংশনটি একটি পূর্ণসংখ্যার আর্গুমেন্ট নেয় এবং সেই আকারের ঘনকটির জন্য মুদ্রিত হওয়ার জন্য লাইনগুলি দেয়।

ধারণাটি হ'ল ছোট থেকে বড় কিউবগুলি আঁকতে পুনরাবৃত্তিটি ব্যবহার করা। মাপের 1 কিউবের উপরের অর্ধেকটি দেখে নেওয়া যাক 1 এরপরে আমরা পূর্বের অর্ধেকটি আয়না করে আকারের 2 কিউবের উপরের অর্ধেকটি পাই এবং এর চারপাশে স্ল্যাশ এবং স্পেসগুলির একটি নির্দিষ্ট প্যাটার্ন যুক্ত করব:

                                         ///////// \
                                        ///////// \
     ///// \ ==> / \\\\\ ==> //// / \\\\\    \
    ///// \ / \\\\\ //// / \\\\\    \

সুতরাং অ্যালগরিদম একটি ঘনক আঁকা আকার এন হয়

  1. আকারের উপরের কিউব অর্ধেক এন -1 এর জন্য লাইনগুলি পান ।
  2. প্রতিটি লাইন ( /s এবং \s উল্টিয়ে ) এবং প্যাড ////এবং \চারপাশে মিরর করুন ।
  3. প্যাটার্ন ////এন প্লাস /\এবং সাথে দুটি লাইন প্রস্তুত করুন / \
  4. পূর্ণ কিউব পেতে ফলাফল লাইনগুলি মিরর করুন।
  5. স্থানের উপযুক্ত সংখ্যার সাথে প্যাড লাইন।

3
বেনামে ফাংশন অনুমোদিত, তাই আপনি বাদ দিতে পারেন g=(\l->r l++k(k m)l)এর মতোই liftM2 (++) r (k(k m)), যা আবার সংক্ষিপ্ত করা যায় (++).r<*>k(k m)এটি অনলাইন চেষ্টা করুন!
লাইকোনি

2

রুবি , 174 167 169 167 বাইট

->n{a=(1..m=n*4).map{' '*m}
(-n..0).map{|i|(-2*i).times{|k|a[y=k+2*j=n+i][m+~k+i*2,2+k*2-s=4*i]=?/*(1-~j%2*s)+'  '*k+?\\*(1-j%2*s)
a[~y]=a[y].tr('/\\','\\\\/')}}
a*$/}

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

n*4স্পেসে ভরা স্ট্রিংগুলির একটি অ্যারে তৈরি করে , তারপরে এটি ক্রমান্বয়ে ছোট কিউবগুলিতে ওভাররাইট করে।

মন্তব্য করা কোড

->n{a=(1..m=n*4).map{' '*m}                 #make an array of n*4 strings of n*4 spaces (up to centreline of final output)
  (-n..0).map{|i|                           #iterate through cube sizes from n down to 0 (i is negative -n to 0)
    (-2*i).times{|k|                        #iterate through the number of lines in the top half of the cube
      a[y=k+2*j=n+i][m+~k+i*2,2+k*2-s=4*i]= #overwrite the correct part of the correct line
      ?/*(1-~j%2*s)+'  '*k+?\\*(1-j%2*s)    #with the correct string of the form "/spaces\" with an additional -4*i symbols on one side
      a[~y]=a[y].tr('/\\','\\\\/')          #copy the current line from top half into bottom half, subsituting / for \ and vice versa
    }
  }
a*$/}                                       #return the elements of the array a, concatenated with newlines $/

2

পাইথন 2 , 254 234 226 203 201 199 বাইট

শেষ অবধি 200!

P=[];n=0
M=lambda r:(u''+r).translate({47:92,92:47})
exec r"n+=1;q='/'*4;P=[q*n+'/\\',q*n+'/  \\']+[q+'%s   \\'%M(r[::-1])for r in P];"*input()
print'\n'.join(l.center(8*n)for l in(P+map(M,P[::-1])))

ট্রিকস:

এই ফাংশনটি সব swap 'র ব্যবহার করা হয় \সঙ্গে /এবং তদ্বিপরীত
একটি Python2 দীর্ঘ বিট - সঙ্গে ইউনিকোড কেবলমাত্র তখনই কাজ
খুঁজে বার করো এই কিভাবে এটি কাজ করে জন্য

M=lambda r:(u''+r).translate({47:92,92:47})

প্রতিটি পুনরাবৃত্তির
জন্য নতুন শীর্ষ দুটি সারি উত্পন্ন করে এখনের জন্য আমি পূর্ববর্তী পুনরাবৃত্তি থেকে এই লাইনগুলি পাওয়ার জন্য কমপ্যাক্ট উপায়টি খুঁজে পাচ্ছি না

P=[q*n+'/\\',q*n+'/  \\']

পূর্ববর্তী পুনরাবৃত্তির সমস্ত সারি বিপরীত করুন এবং স্ল্যাশগুলি সোপ করুন

[q+'%s   \\'%M(r[::-1])for r in P]

উপরের অর্ধেক অনুলিপি করুন, সারিগুলির বিপরীতে, স্ল্যাশগুলি বদলে দিন

P+map(M,P[::-1])

কেন্দ্র প্যাডিং স্ট্রিংয়ের জন্য ঝরঝরে পদ্ধতি

l.center(8*n)

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


1

স্ট্যাক্স , 36 বাইট

äª.$u>↓Z╙╝B↨EXª¡╜?Xáhç∙╩p/♂ù⌠r↨c⌐f/*

এটি চালান এবং এটি ডিবাগ করুন

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

এখানে প্রোগ্রামটি আনপ্যাকড, অবরুদ্ধ এবং মন্তব্য করা হয়েছে।

{               begin block to repeat
  iHYH^H'\*     make a string of '\' characters and set the Y register
                  pseudo-code: push(((y = (i * 2)) * 2 + 1) * 2 * '\')
                  given the 0-based iteration index `i`, let y = 2 * i
                  and push a string consisting of (i*8 + 2) backslashes
  2M            split the string into to equal size (i*4 + 1) substrings
  ~+            push array to input stack and concatenate
                  on the first iteration, this is a no-op
                  subsequently, it prepends the array to the result so far
  {             begin a block to use for mapping
    4'\*+       append 4 backslashes to this element
    :R          "brace-wise" reverse
                  this reverses the string AND the slashes in it
    |YH3+92&    write 92 to index (++y * 2 + 3) in the array
                  this puts the trailing backslash at the correct position
                  this will be an out of bounds index, so the string will grow
                  92 is the character code for backslash 
  m             execute map using block
}*              repeat block specified number of times
|C              vertically center all rows
{               begin block for output mapping
  Q             output this line without popping
  :Rr           "brace-wise" reverse, and then actually reverse
                  net effect is to swap forward and backward slashes
m               execute map using block
rm              reverse array, and output all rows

এটি চালান


1

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

বিজয়ীর চেয়ে দীর্ঘ, তবে পদ্ধতির আকর্ষণীয় হতে পারে - এমনকি cosএবং pi:) ব্যবহার করে

কোড:

i s e f|max e f>s=""|max e f<s=" "|e==s="\\"|1<2="/"
w n y x=head$do{d<-[1..n];o<-[-2*d..2*d];z<-[(cos(pi*(n-d)))*o+x];i(2*d)(abs$z-y)(abs$z+y-1)}++" "
n!h=h<$>[1-2*n..2*n]
f n=((2*n)!)<$>n!w n

এটি এইভাবে চালান:

mapM_ putStrLn (f 4)

এই প্রোগ্রামটি মূলত এর মতো অনেকগুলি হীরা 'আঁকে':

------------------------
------------------------
-----------/\-----------
----------/  \----------
---------/    \---------
--------/      \--------
--------\      /--------
---------\    /---------
----------\  /----------
-----------\/-----------
------------------------
------------------------

ফাংশন i s e fআকারের একটি হীরা 'আঁকে' s, কোথায় e, fরয়েছে (abs$z-y)(abs$z+y-1)

ফাংশনটি সঠিকভাবে wআঁকানো হিরেগুলি i স্থানগুলিতে সংশোধন করে। headএর সংজ্ঞা হিসাবে ব্যবহৃত শুধুমাত্র শীর্ষতম স্তরটি দেখার জন্য দায়ী।

এখানে চেষ্টা করুন


1
কোড কারও সংক্ষিপ্ত করবেন কীভাবে কারও কিছু ধারণা থাকতে পারে?
রাদেক

0

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

FN«↗×⊗⊕ι/↓↘G↖²→⊕×⁴⊕ι↘²\G←⁴↘⊕⊗ι→⁴\M⁴→‖T»‖M↓

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

FN«

কিউবগুলি ছোট থেকে বড় পর্যন্ত আঁকুন। (বৃহত্তম থেকে ক্ষুদ্রতম অঙ্কনের অর্থ হ'ল আমি বিজোড় সংখ্যার জন্য একটি আয়না চিত্র নিয়ে এসেছি যার জন্য ঠিক করতে খুব বেশি বাইট লাগবে))

↗×⊗⊕ι/

এর একটি লাইন মুদ্রণ করুন /। (এটি \ডানদিকে গুলি হয়ে উঠবে , তবে অঙ্কনটি মিরর করা হয়েছে কারণ লুপের শেষে এটি গল্ফিয়ার।

↓↘G↖²→⊕×⁴⊕ι↘²\

শীর্ষে দুটি সারি মুদ্রণ করুন \। (সমস্ত \গুলোকে একটি বহুভুতে অঙ্কনের অর্থ হ'ল কার্সারটি একটি বিশ্রী অবস্থানে শেষ হয়েছিল যার জন্য ঠিক করতে অনেকগুলি বাইট খরচ পড়তে পারে))

G←⁴↘⊕⊗ι→⁴\

এর বাম চারটি সারি মুদ্রণ করুন \। (পঞ্চম সারিটি পূর্ববর্তী কিউব থেকে আসে))

M⁴→

পরবর্তী ঘনকটির শুরুতে যান।

‖T»

পরবর্তী কিউবের জন্য অনুভূমিকভাবে প্রস্তুত প্রতিফলিত করুন।

‖M↓

কিউব সম্পূর্ণ করতে উল্লম্বভাবে সবকিছু মিরর করুন।

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