অন্ধকূপ ক্রোলার


40

ইনপুট

  • একটি অন্ধকারের দেয়ালের প্রতিনিধিত্বকারী একটি বাইনারি ম্যাট্রিক্স M
  • অন্ধকূপের মধ্যে প্লেয়ারের অবস্থান (x,y)
  • দিক d যে প্লেয়ারটি বর্তমানে রয়েছে (0 = উত্তর, 1 = ইস্ট, 2 = দক্ষিণ, 3 = পশ্চিম)

আউটপুট

30×10 অক্ষরের ASCII শিল্প হিসাবে প্লেয়ারের দর্শনের ক্ষেত্রের দেয়ালগুলির সিউডো -3 ডি উপস্থাপনা ।

এর সাথে হ্যাং পেতে সহায়তা করার জন্য সংশ্লিষ্ট মানচিত্র এবং কম্পাসের সাথে নীচে কয়েকটি সম্ভাব্য আউটপুট ফ্রেম রয়েছে (তবে মানচিত্রটি আঁকতে এবং কম্পাসটি চ্যালেঞ্জের অংশ নয়)।

অ্যানিমেশন

সবিস্তার বিবরণী

দেখার ক্ষেত্র

খেলোয়াড়ের তার দেখার ক্ষেত্রের 13 দেয়াল রয়েছে, যা A থেকে M পর্যন্ত লেবেলযুক্ত । নীচে প্লেয়ারের তুলনায় দেয়ালের অবস্থানগুলি (হলুদ রঙে) সমস্ত সম্ভাব্য দিকনির্দেশে রয়েছে।

দেখার ক্ষেত্র

দেয়াল আঁকছে

দেয়াল থেকে আকৃষ্ট করা অনুমিত হয় A থেকে M দেওয়া যা পূর্বে টানা কোন অংশ কাছাকাছি দেয়াল ওভাররাইট করা হতে পারে, ঠিক এই যাতে। আপনি অবশ্যই এটিকে আলাদাভাবে বাস্তবায়ন করতে পারবেন যতক্ষণ না চূড়ান্ত ফলাফল একই।

সমগ্র আউটপুট 7 স্বতন্ত্র অক্ষর টানা হয়: " ", "'", ".", "|", "-", "_"এবং ":"

যেহেতু এই চ্যালেঞ্জের শরীরে দেয়ালগুলির আকারগুলি বিশদ বিবরণ করা এটি দীর্ঘতর করে তুলবে, সেগুলি পরিবর্তে নিম্নলিখিত টিআইও লিঙ্কে সরবরাহ করা হয়েছে:

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

প্রদত্ত দেয়ালের অংশ না হওয়া অক্ষরগুলি "?"এই চিত্রগুলিতে একটি দিয়ে চিহ্নিত করা হয়েছে। এগুলি অবশ্যই 'স্বচ্ছ' চরিত্র হিসাবে বিবেচনা করা উচিত যা একেবারেই আঁকা হয় না। অন্যদিকে, প্রাচীরের মধ্যে থাকা সমস্ত জায়গাগুলি 'সলিড' এবং পূর্বে সেখানে আঁকানো অন্য কোনও অক্ষর ওভাররাইট করতে হবে।

বিধি

ইনপুট সম্পর্কে

  • Mxyd
  • আপনি 0-ইনডেক্সড বা 1-ইনডেক্সড স্থানাঙ্ক ব্যবহার করতে পারেন।
  • দিকনির্দেশগুলির জন্য আপনি আপনার পছন্দের 4 স্বতন্ত্র মান ব্যবহার করতে পারেন।
  • 3×3
  • আপনি ধরে নিতে পারেন যে প্রান্তগুলিতে সর্বদা চারপাশের দেয়াল থাকবে।
  • প্লেয়ারটি খালি স্কোয়ারে থাকার নিশ্চয়তা দেয়।
  • ইনপুটটি বৈধ হওয়ার গ্যারান্টিযুক্ত।

আউটপুট সম্পর্কে

  • দেওয়ালগুলি অবশ্যই বর্ণিত হিসাবে আঁকতে হবে।
  • তবে আউটপুট ফর্ম্যাটটিও নমনীয়: একক স্ট্রিং, স্ট্রিংগুলির অ্যারে, অক্ষরের ম্যাট্রিক্স ইত্যাদি
  • নেতৃস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্থানটি যতক্ষণ না এটি সুসংগত হিসাবে গ্রহণযোগ্য।

এটি

পরীক্ষার মামলা

সমস্ত পরীক্ষার ক্ষেত্রে নিম্নলিখিত ম্যাট্রিক্স ব্যবহার করা হচ্ছে:

[ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
  [ 1, 0, 1, 1, 1, 0, 0, 0, 0, 1 ],
  [ 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 ],
  [ 1, 0, 0, 0, 0, 0, 1, 1, 0, 1 ],
  [ 1, 0, 0, 1, 0, 0, 0, 1, 0, 1 ],
  [ 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 ],
  [ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1 ],
  [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 ],
  [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ]

(0,0)

x=3, y=3, d=0
x=6, y=4, d=3
x=4, y=4, d=1
x=1, y=5, d=2
x=7, y=7, d=3
x=6, y=6, d=1
x=8, y=1, d=2
x=7, y=6, d=1

প্রত্যাশিত ফলাফল:

------------------------------    ------------------------------
 x=3, y=3, d=0:                    x=6, y=4, d=3:
------------------------------    ------------------------------
__                          __    '.                          .'
  |'.                    .'|        |                        |  
  |   '.--------------.'   |        |----.                   |  
  |    |              |    |        |    | '.--------.       |  
  |    |              |    |        |    |  |        |       |  
  |    |              |    |        |    |  |        |       |  
  |    |              |    |        |    | .'--------'       |  
  |   .'--------------'.   |        |----'                   |  
__|.'                    '.|__      |                        |  
                                  .'                          '.
------------------------------    ------------------------------
 x=4, y=4, d=1:                    x=1, y=5, d=2:
------------------------------    ------------------------------
                            .'    __ ________________________ .'
                           |        |                        |  
-------.              .----|        |                        |  
       | '.--------.' |    |        |                        |  
       |  |        |  |    |        |                        |  
       |  |        |  |    |        |                        |  
       | .'--------'. |    |        |                        |  
-------'              '----|        |                        |  
                           |      __|________________________|  
                            '.                                '.
------------------------------    ------------------------------
 x=7, y=7, d=3:                    x=6, y=6, d=1:
------------------------------    ------------------------------
'.                                '.                            
  |'.                               |'.                         
  |   '.                            |   '.                      
  |    | '.                 .-      |    |--.--------.--------.-
  |    |  |:               :|       |    |  |        |        | 
  |    |  |:               :|       |    |  |        |        | 
  |    | .'                 '-      |    |--'--------'--------'-
  |   .'                            |   .'                      
  |.'                               |.'                         
.'                                .'                            
------------------------------    ------------------------------
 x=8, y=1, d=2:                    x=7, y=6, d=1:
------------------------------    ------------------------------
'.                          __    '.                            
  |'.                    .'|        |                           
  |   '.              .'   |        |----.--------------.-------
  |    | '.        .' |    |        |    |              |       
  |    |  |:      :|  |    |        |    |              |       
  |    |  |:      :|  |    |        |    |              |       
  |    | .'        '. |    |        |    |              |       
  |   .'              '.   |        |----'--------------'-------
  |.'                    '.|__      |                           
.'                                .'                            

সম্পর্কিত চ্যালেঞ্জ:

২০১৩ সালের এই চ্যালেঞ্জটি নিবিড়ভাবে সম্পর্কিত। তবে এটির একটি পৃথক বিজয়ী মানদণ্ড (কোড-চ্যালেঞ্জ) রয়েছে, আউটপুটটির অনেক বেশি আলগা স্পেসিফিকেশন এবং ইন্টারেক্টিভ I / O প্রয়োজন।


এটি তাত্ক্ষণিকভাবে আমাকে 3 ডি মনস্টার ম্যাজের স্মরণ করিয়ে দিয়েছে, যদিও এটি অবশ্যই ব্লক গ্রাফিক্স ব্যবহার করে।
নিল

9
আপনার চ্যালেঞ্জগুলি এত মজাদার এবং ভালভাবে লেখা!
অলিভার


উত্তর:


10

পরিষ্কার ( স্নেপ্পি সহ ), 800 785 670 644 বাইট

460 402 বাইট কোড + 360 242-বাইট স্ট্রিং আক্ষরিক
(এখানে এবং টিআইওতে পালিয়ে গেছে কারণ এটি বৈধ ইউটিএফ -8 নয়)

আপনি এখানে আক্ষরিক দৈর্ঘ্য যাচাই করতে পারেন

import StdEnv,Data.List,Data.Maybe,Codec.Compression.Snappy,Text
@a b|b<'~'=b=a
$m x y d=map(@' ')(foldl(\a b=[@u v\\u<-a&v<-b])['~~'..][join['
']k\\Just(Just 1)<-[mapMaybe(\e=e!?(x+[u,v,~u,~v]!!d))(m!?(y+[~v,u,v,~u]!!d))\\u<-[-2,2,-1,1,0,-1,1,0,-1,1,0,-1,1]&v<-[3,3,3,3,3,2,2,2,1,1,1,0,0]]&k<-nub[q\\w<-split"#"(snappy_uncompress"\211\6\44\41\41\41\55\56\40\41\40\174\72\5\4\60\55\47\40\41\41\41\43\41\41\41\176\56\55\r\1\24\56\40\41\176\174\40\r\1\4\174\72\72\r\0\0\47\r\46\35\72\25\1\31\103\0\41\25\24\35\113\176\25\0\31\133\11\224\r\152\20\56\40\40\40\41\21\217\10\40\47\56\31\14\4\40\174\126\14\0\4\56\47\21\74\0\47\1\74\1\340\r\220\25\242\11\1\25\250\25\360\11\1\25\253\376\30\0\21\30\25\333\11\1\24\47\41\41\43\137\137\11\154\20\41\40\40\174\47\r\344\1\157\5\341\1\11\5\336\172\11\0\34\56\47\41\137\137\174\56\47\1\347\20\43\176\176\40\137\132\1\0\4\40\41\75\211\76\1\0\1\356\5\150\116\1\0\376\35\0\376\35\0\126\35\0\132\347\0\20\137\174\41\43\47\101\337\51\74\41\133\122\4\0\10\56\47\40"),q<-let l=[[c\\c<-:rpad s 30'~']\\s<-split"!"w]in[l,map reverse l]]])

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

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

সঙ্কুচিত স্ট্রিং ( স্পষ্টতার সাথে #প্রতিস্থাপন সহ \n) হ'ল:

!!!-. ! |:! |:!-' !!!
!!!~.--------. !~|        |:!~|        |:!~'--------' !!!
!!!~~~~~~~~~~.--------.!~~~~~~~~~~|        |!~~~~~~~~~~|        |!~~~~~~~~~~'--------'!!!
!!-------.   !       | '.!       |  |!       |  |!       | .'!-------'   !!
!!~~~~~~~.--------------.!~~~~~~~|              |!~~~~~~~|              |!~~~~~~~|              |!~~~~~~~|              |!~~~~~~~'--------------'!!
__      !  |'.   !  |   '.!  |    |!  |    |!  |    |!  |    |!  |   .'!__|.'   !
~~ ________________________ !~~|                        |!~~|                        |!~~|                        |!~~|                        |!~~|                        |!~~|                        |!~~|                        |!~~|________________________|!
'. !  |!  |!  |!  |!  |!  |!  |!  |!.' 

এটি !নতুন পংক্তির পরিবর্তে বিভিন্ন পর্দার উপাদানগুলির বাম পাশের সংস্করণগুলিকে এনকোড করে এবং এর ~পরিবর্তে ?, যা পরে ~নিজের এবং তাদের লাইন-বিপরীতগুলি অনুসন্ধানের তালিকায় যুক্ত হওয়ার আগে 30 অক্ষরের সাথে ডান-প্যাডযুক্ত হয় ।

কোডের বাকী অংশগুলি কেবল সীমানা ছাড়িয়ে যাওয়া কেসগুলিকে উপেক্ষা করে পরিচালনা সমন্বয় পরিচালনা করে।


5

পাইথন 2 , 864 854 848 826 810 বাইট

L=[zip(*[iter(w)]*30)for w in zip(*[iter("eJzdllESgyAMRL+5Rf7yRQ7AZbhIDl9BwTqzSVtHrbKffR0Mm13HEM5SFHIoadpNI3snDyaS6NCknhU+JfZOvq8kLoIBU1oEI+RTbiePGzBa3QM0rf78TGl17+CZr5ZrUXBN+ECfY1GvGKEqtDsSI4s6xTn5jgqyqNcTTnUjTQO2FAEqTC0ngCrtpywenX5le6or1SsGi9ZLBKt0HuXtVEeUNGdzG6EsRNmo2EzLxuBbqFH8njmfwnqGcl+VY+s5+5ezSYXVel4dxaRK/6F15SatK1frvm//y4aoT4Ckj6XWfY2cbvz2fLSCPiiVvR+3ZuerzDwPSqeSvgAP9woa".decode('base64').decode('zip'))]*300)]
E=enumerate
def f(m,x,y,d):
 D=eval(`[[' ']*30]*10`);w,h=len(m[0]),len(m);a=[m,zip(*m)[::-1]][d%2];x,y=[x,y,w+~x,h+~y,y,w+~x,h+~y,x][d::4];X=sum([[0]*(x<2)+list(l)[x-2+(x<2):x+3]for l in[l*2for l in[a,[l[::-1]for l in a[::-1]]][d/2]*2][y:y+4]],[])
 for d,w in zip(L,'sropqmklhfgca'):
  for j,l in E(d):
   for i,q in E(l):
    if q*X[ord(w)%32]>=' ':D[j][i]=q
 for l in D:print''.join(l)

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


4

কাঠকয়লা , 500 332 বাইট

F⁴≔⮌E§θ⁰⁺00⭆θ§μλθ≔E✂θ⊖ζ⁺⁶ζ¹✂ι⊖η⁺⁶η¹θFε≔⮌E§θ⁰⭆θ§μλθB³⁰χ F²«‖FΦ⪪⟦“ |0⟧P+N?⟧‹G”³¦⁰”{➙d⊟EX⍘k↧D({Vt⍘gRd◨ⅉ^δ#T;”³¦¹“ ¶↖+9G₂pF^c1e⌈¬;”³χω⁰χ”{➙∧⊟∧◨ηü∧↖z↨⁸\G'λI∧¡∕⪫θJoΣ³⊖I⊟ζ⊙”²¦⁰”{➙∧⊟∧◨ηü∨§·◧﹪d‹⟲ OzºκFⅉRï⎇”²¦⁷ω⁰χ”{➙∧⊟≔⊘⬤|↔3Zθ✂≔÷t⍘ε✂↨≔⧴×ld≕≡⌕m⟧6ψ=Z”⁰¦⁰”}∧80KυgCAêJm⟦↘/§‖Ck⮌C₂¡μ↗W”⁰¦²ω⁰χ”{⊟∨·◧¤∨¶⧴⬤2GL▷⁸ê5Gψ”⁰¦⁰⟧³I§⭆θ⭆³§μ⎇ι⊕ξ⁻⁵ξλ«J⁻⊟κײ⁹¬ι⊟κ⊟κ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। কিছুটা বিরক্তিকর পদ্ধতির, আমি ভয় করি; সংক্ষিপ্ত স্ট্রিং আক্ষরিক মুদ্রণ প্রচুর। ব্যাখ্যা:

F⁴≔⮌E§θ⁰⁺00⭆θ§μλθ

0প্রতিটি পাশে দুটি অতিরিক্ত গুলি দিয়ে অ্যারে প্যাড করুন ।

≔E✂θ⊖ζ⁺⁶ζ¹✂ι⊖η⁺⁶η¹θ

7x7প্রদত্ত স্থানাঙ্কগুলিকে কেন্দ্র করে অ্যারের একটি উপবিংশ টুকরো টুকরো করুন।

Fε≔⮌E§θ⁰⭆θ§μλθ

প্রদত্ত দিকনির্দেশের জন্য উপযুক্ত হিসাবে অ্যারেটি ঘোরান।

B³⁰χ 

(নোট ট্রেলিং স্পেস) একটি খালি 30×10বক্স আঁকুন যাতে আউটপুট সর্বদা একটি সামঞ্জস্যপূর্ণ আকার হয়।

F²«‖

এর মধ্যে প্রতিফলিত করে প্রতিটি অর্ধেক আলাদাভাবে আঁকুন।

FΦ⪪⟦...⟧³I§⭆θ⭆³§μ⎇ι⁻⁵ξ⊕ξλ«

প্রাচীর বর্ণনাকারীর একটি অ্যারে নিন, (স্ট্রিং, ওয়াই-কো-অর্ডিনেট, এক্স-কো-অর্ডিনেট) এর অংশগুলিতে বিভক্ত করুন, সেই অংশগুলিতে ফিল্টার করুন যা অ্যারের প্রাসঙ্গিক অর্ধে প্রাসঙ্গিক অবস্থানে একটি প্রাচীর রয়েছে এবং দেয়ালগুলি লুপ করবে। অ্যারে থেকে 12 টি দেয়াল বের করে এবং খণ্ড সূচকটি ব্যবহার করে তাদের সূচিক্যকরণের দ্বারা অবস্থানটি গণনা করা হয় কারণ এই অংশটি সরাসরি খণ্ড সূচক ব্যবহার করে প্রাচীরের অবস্থান নির্ধারণের চেয়ে গলফিয়ার।

J⁻⊟κײ⁹¬ι⊟κ⊟κ

প্রাচীরের স্থানাঙ্কগুলিতে ঝাঁপুন এবং এটি মুদ্রণ করুন। লক্ষ্য করুন negates অনুধ্যায়ী থেকে এক্স-স্থানাঙ্ক [0, 30)থেকে (-30, 0]যাতে এক ক্যানভাস পাস কার্যকরভাবে বাঁদিকে 29 অক্ষর স্থানান্তরিত করা হয়।


1
@ আর্নল্ড আসলে, আমি প্রতিসাম্যের কোনও সুবিধা নিচ্ছি না, প্রতিটি অর্ধেক আলাদাভাবে আঁকিয়ে আমার তৃতীয় অংশ কেটে নেওয়া উচিত।
নিল

1
168 বাইট গল্ফ স্ট্রোকের জন্য +1। আমি মনে করি এটি এখানে দেখা সবচেয়ে বড় একক গল্ফ।
এলপেড্রো

2

রুবি , 412 391 385 383 বাইট

->a,x,y,d{b=Array.new(97){[" "]*10}
e=[-1,0,1,0]
14.times{|i|m=-i%3-1
w=[31,25,15,9][n=i>2?4-i/3:(m*=2;3)]
(a*3)[y+n*e[d]+m*c=e[d-3]][x+n*c-m*e[d]]&&[p=w*(m*2-1)/2,r=[12,7,4,3][n]*m*m.abs+m/3].min.upto([q=w*(m*2+1)/2,r].max){|j|t=" .'"*9
b[j+15]=(p<j&&j<q ?%w{-%2s- -%4s- _%7s_}[-n]%"":t[k=(j^j>>9)%(36/-~n)]+"   :|  |    |"[k%13]*(k/3*2)+t[-k]).center(10).chars}}
b[0,30].transpose}

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

সত্যবাদী / মিথ্যা মানগুলির অ্যারে হিসাবে ইনপুট নেয় (নোটটি 0রুবীতে সত্য, তবে nilমিথ্যা।

অক্ষরের অ্যারে আউটপুট করে।

ব্যাখ্যা

ব্লকগুলি সামনে থেকে পিছনে টানা দূরত্ব nহ্রাস এবং পাশ থেকে পাশের অবস্থান mসাইক্লিং -1,1,0বাম, ডান, মাঝখানে দিয়ে are দূরবর্তী সারির মাঝের ব্লক ইটি আসলে দু'বার আঁকানো হয়েছে কারণ আমাদের দুটি / এ / বি এবং ব্লক সি / ডি পরীক্ষা করতে হবে। n,mএবং অনুসন্ধান অ্যারেতে মানগুলি এবং dসংশোধন করতে ব্যবহৃত হয় । যদি রেঞ্জের বাইরে থাকে তবে রেঞ্জ সেলের বাইরে আনা হয় এবং কোনও ত্রুটি নিক্ষেপ করা হয় না, তবে যদি সীমার বাইরে থাকেxyaxnilynil সারিতে ফেরত পাঠানো হবে এবং যখন সেল জন্য অনুসন্ধান করতে চেষ্টা করে রুবি একটি টাইপ ত্রুটি নিক্ষেপ করা হবে। এটি এড়ানোর জন্য অনুসন্ধানের আগে অ্যারেটি উল্লম্ব দিকটিতে ত্রিভুজ করা হয়। যদি সত্যবাদী মান পাওয়া যায় তবে একটি ব্লক অঙ্কিত হয়।

আউটপুটটি b10-উপাদান অ্যারেগুলির একটি অ্যারেতে আউটপুটটির কলামগুলি উপস্থাপন করে এবং ফাংশন শেষে 10 টি সারিতে স্থানান্তরিত হয়। সমস্ত ব্লকের পুরো সম্মুখ চেহারা আঁকা হয় (এটি ভিউপোর্টে প্রদর্শিত হয় বা না) সুতরাং পরিসরের ত্রুটিগুলি এড়াতে অ্যারেতে অতিরিক্ত স্থান প্রয়োজন। পরিসীমা jভিউপোর্ট মান থেকে -15থেকে +14, এই 15 পুষিয়ে হয় যখন অ্যারের সংরক্ষণ একটি সীমার দিতে 0করার 29। প্রতিটি টানা প্রতিটি ব্লকের জন্য তিনটি মান গণনা করা হয়: pএবং qসামনের প্রাচীরের বাম এবং ডান কোণে যথাক্রমে এবং rপাশের প্রাচীরের পিছনে। jঘুরতে কলামগুলি অঙ্কন করে এই তিনটি মানের সর্বনিম্ন থেকে সর্বোচ্চে পুনরাবৃত্তি করা হয়।

3 ধরণের লাইন রয়েছে: অনুভূমিক -বা _, উল্লম্ব |বা :, এবং পুনরাবৃত্তি " .'"প্যাটার্ন সহ তির্যক । যেখানে p < j < qফাঁকা জায়গাগুলিযুক্ত কলামগুলি সামনের মুখটি গঠনের জন্য আঁকা -বা _আঁকা। jএই ব্যাপ্তির বাইরে কোথায় , স্থানযুক্ত কলামগুলি, |বা প্রান্তগুলি এবং / অথবা পাশের মুখটি তৈরি করতে :প্রতীকগুলি দ্বারা আবৃত t=" .'"। এটি ভেরিয়েবল দ্বারা পরিচালিত হয় k=jযেখানে jইতিবাচক বা k=-j-1যেখানে jনেতিবাচক। শীর্ষ এবং নীচের ক্যাপগুলির মধ্যে অক্ষরের সংখ্যা k/3*2। বহিরাগত ব্লকের বাইরের প্রান্তগুলি সঠিকভাবে পরিচালনা করার জন্য যেখানেn=3 , kমডিউল 9 গ্রহণ করা আবশ্যক, কিন্তু এই ছোট মানের জন্য না অবশ্যই করতে হবেnkঅতএব মডুলো নেওয়া হয় 36/-~n, যেখানে -~nমূল্যায়ন করে n+1

অবহেলিত কোড

->a,x,y,d{
  b=Array.new(97){[" "]*10}                                        #Set up array for output, allow space for plotting outside viewport
  e=[-1,0,1,0]                                                     #Direction offsets from player position
  14.times{|i|                                                     #Iterate through all blocks including block E twice 
    m=-i%3-1                                                       #Cycle -1,1,0 = left, right, centre
    n=i>2?4-i/3:(m*=2;3)                                           #Distance n=4-i/3. But if i/3==0 n=3 and double m for blocks A,B 
    w=[31,25,15,9][n]                                              #Width of front face of block
    r=[12,7,4,3][n]*m*m.abs+m/3                                    #Value of j for back edge of block. m/3 offsets by -1 when m negative 
    (a*3)[y+n*e[d]+m*c=e[d-3]][x+n*c-m*e[d]]&&(                    #If a block is present at the location then
      [p=w*(m*2-1)/2,r].min.upto([q=w*(m*2+1)/2,r].max){|j|        #Calculate left and right edges of front of block p,q and iterate
        t=" .'"*9                                                  #t=character constant for diagonal lines 
        k=(j^j>>9)%(36/-~n)                                        #k=j for positive j=distance from centre. For negative j, k=-1-j by XOR with j>>9=-1. If n=3 take modulo 9 for correct output of outer side of block. 
        b[j+15]=(p<j&&j<q ?%w{-%2s- -%4s- _%7s_}[-n]%"":           #If j between p&q, draw horizontal lines separated by 2,4 or 7 spaces depending on value of n
        t[k]+"   :|  |    |"[k%13]*(k/3*2)+t[-k]).center(10).chars #else draw space or vertical line capped by diagonal markers
      }
    )
  }
b[0,30].transpose}                                                 #Truncate values outside viewport, transpose, and return value.

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