একটি ASCII গোলকধাঁধা রেন্ডার করুন


18

চেহারা! এটি একটি ASCII ধাঁধা! বেশ কুলজার, অ্যামেজবল এবং স্টাফ।

+-+-----+---+
| |     |   |
| |  ++   | |
| |  ++ +-+ |
|       |   |
+-------+ | |
|         | |
+---------+-+

তবে, তবে, তবে ... গোলকধাঁধার সমস্ত অংশ কোন দিকে চলেছে তা নিয়ে কাজ করা বেদনা। আমি কেবল লেআউটটি আঁকতে চাই এবং গোলকধাঁধাটি নিজেকে অনেক বেশি সময় না দিয়ে সোপার কুল তৈরি করে।

যদি আমি কেবল এটি আঁকতে পারি ...

#############
# #     #   #
# #  ##   # #
# #  ## ### #
#       #   #
######### # #
#         # #
#############

খুব সুন্দর হবে!


বিধিগুলি (কারণ নিয়মগুলি শীতল):

  • একটি স্ট্রিংকে এসকিআই ম্যাজে রূপান্তর করতে কোড লিখুন এবং ফলাফলটি আউটপুট করুন।
  • কোনও অ-শ্বেতস্থান অক্ষর প্রাচীর হিসাবে পড়া হবে।
  • প্রাচীরের প্রতিটি চরই সিদ্ধান্ত নেবে যে কোনও চরিত্রটি তার প্রতিবেশীদের (কেবল উত্তর, দক্ষিণ, পূর্ব এবং পশ্চিম দিকের দিকের ভিত্তিতে) করা উচিত।
    • যদি চরের কোনও অ-শ্বেত স্পেস প্রতিবেশী না থাকে তবে এটি একটি প্লাস চিহ্ন (+) হবে।
    • যদি কোনও চরের উভয় উল্লম্ব (উত্তর-দক্ষিণ) এবং অনুভূমিক (পূর্ব-পশ্চিম) দিকের প্রতিবেশী থাকে তবে এটি একটি প্লাস চিহ্ন (+) হবে।
    • যদি কোনও চরটির কেবল উল্লম্ব (উত্তর-দক্ষিণ) দিকে প্রতিবেশী থাকে তবে এটি একটি পাইপের প্রতীক (|) হবে।
    • কোনও চরটির যদি অনুভূমিক (পূর্ব-পশ্চিম) দিকের প্রতিবেশী থাকে তবে এটি একটি বিয়োগ চিহ্ন (-) হবে।
  • ইনপুটটি একটি একক স্ট্রিং হতে পারে (নতুন লাইনের অক্ষর দ্বারা পৃথক করা রেখা বা স্ট্রিংগুলির একটি অ্যারে))
  • সমস্ত ইনপুট অক্ষর মুদ্রণযোগ্য ASCII অক্ষর হবে, আপনার প্রসারিত অক্ষরগুলি নিয়ে কাজ করার দরকার নেই।
  • আপনি দয়া করে কোনও পুরানো ভাষা ব্যবহার করুন।
  • যদি কোনও লাইনের আগে সাদা স্থান থাকে তবে এটি প্রতিটি লাইনের সমান পরিমাণ হওয়া উচিত। আউটপুট প্রতিটি লাইন পরে কোনও সাদা স্থান ঠিক আছে।
  • সবচেয়ে কম সংখ্যক বাইট দিয়ে এটি সমাধানের চেষ্টা করুন।

পরীক্ষার কেস:

1: ফ্রেম

ইনপুট:

##########
#        #
#        #
#        #
##########

আউটপুট:

+--------+
|        |
|        |
|        |
+--------+

2: ক্লাসিক গোলকধাঁধা

ইনপুট:

#################
        #       #
# ##### # ##### #
#   # # #     # #
# # # # ##### # #
#   # #       # # 
### # ####### # #
#   # #    #  # # 
# ### # ## # ##
#     # ##    #  
#################

আউটপুট:

--------+-------+
        |       |
| --+-+ | ----+ |
|   | | |     | |
| + | | +---- | |
|   | |       | | 
+-- | +----+- | |
|   | |    |  | | 
| --+ | ++ | -+
|     | ++    |  
+-----+-++----+--

3: সবুজ ডিম, মানুষ।

ইনপুট:

I do not like green eggs and ham.
I do not like them, sam I am.
Would you like them here or there?
I would not like them anywhere!

আউটপুট:

| ++ +++ ++++ +++++ +++- -++ ----
| ++ +++ ++++ +++++ +++ + +++
+-+++ +++ ++++ ++++ ++++ ++ +++---
| +++-+ +++ ++++ ++-+ +++++++++

4: আইকিলস

ইনপুট:

Word Icicle!
Word Icicle 
Word  cicle 
 ord  cicle 
 ord   icle 
 ord   i le 
 or    i le 
 or    i l  
 or      l  
 or         
  r         

আউটপুট:

++++ ++++++-
++++ ++++++ 
++++  +++++ 
 +++  +++++ 
 +++   ++++ 
 +++   | ++ 
 ++    | ++ 
 ++    | |  
 ++      |  
 ++         
  |         

1
সবুজ ডিম এবং হামের তৃতীয় লাইনটি শেষ হওয়া উচিত নয় ---?
লিফডওয়েভেন

1
মিশ্র প্রতিবেশীদের ফলাফল এখনও অস্পষ্ট; নিশ্চিত নন কেন আইজিকেলগুলিতে মোটামুটি কোনও -হবে বা ক্লাসিক গোলকধাঁধায় +নীচের সারিতে কেন চারটি থাকবে না ।
নীল

1
স্পেসের (যেমন ম্যাট্রিক্স) বর্গক্ষেত্রযুক্ত বর্গক্ষেত্র হিসাবে আমাদের ইনপুটটি গ্রহণ করার অনুমতি দেওয়া হচ্ছে? আউটপুটটির চারপাশে অতিরিক্ত শ্বেতস্থান থাকার অনুমতি রয়েছে কি? এছাড়াও, আপনি কি সত্যই smallest number of charactersবাইটস না মানে ?
ডিজাইমা

1
আমি মনে করি যে 1) ক্লাসিক গোলকধাঁধাটির +1 ম সারির মাঝখানে !হওয়া উচিত 2) আইসিকেলের আইটি প্রতিস্থাপন করা উচিত -। আপনি কি দয়া করে এগুলি দুটিবার পরীক্ষা করতে পারেন?
আর্নৌল্ড

1
দ্বারা whitespace, আপনি কি শুধু স্থান বলতে চান? আমি ট্যাবগুলি সমর্থন করতে চাই না এবং আপনি সম্ভবত আমাকে নতুন লাইনে রূপান্তর করতে চান না
জো কিং

উত্তর:


11

এপিএল (ডায়ালগ ইউনিকোড) , 57 35 বাইট এসবিসিএস

Gn22 এনএনজি দ্বারা একটি অভিনব সমাধানের জন্য ধন্যবাদ ।

আর্গুমেন্ট হিসাবে একটি অক্ষর ম্যাট্রিক্স গ্রহণ করে বেনামে টাসিট ফাংশন।

{⊃'+-|+'↓⍨25 4 2⊃¨⊂⍱∘⌽⍨' '≠,⍵}⌺3 3

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

{}⌺3 3 প্রতি 3-বাই -3 প্রতিবেশে, নিম্নলিখিত ফাংশনটি প্রয়োগ করুন:

,⍵ অভ্যাস (সমতল)

' '≠ বুলিয়ান যেখানে স্থান নেই

⍱∘⌽⍨ এই NOR এটি বিপরীত (সহ শীর্ষ নর নীচে, বাম দিক থেকে NOR ডানদিকে নেই)

5 4 2⊃¨⊂পুরো তালিকা থেকে 5 তম , 4 তম এবং 2 তম উপাদান বেছে নিন
  অর্থাৎ খালি স্ব, কোনও উল্লম্ব, কোনও অনুভূমিক নয়

2⊥ বেস -২ (বাইনারি)
  অর্থাৎ ≥4 এ মূল্যায়ন করুন : খালি স্ব; 3: প্রতিবেশী না; 2: অনুভূমিক প্রতিবেশী নয়; 1: উল্লম্ব নয়; 0: উভয় আছে

'+-|+'↓⍨ এই স্ট্রিং থেকে অনেকগুলি উপাদান
  যেমন খালি স্ব: ড্রপ করুন ; একা: +; উল্লম্ব প্রতিবেশী (গুলি) শুধুমাত্র: |+; অনুভূমিক: -|+; উভয়:+-|+

 প্রথম উপাদান (স্থান যদি অ উপলভ্য সঙ্গে প্যাড) বাছাই
  অর্থাত খালি স্ব: ; একা: +; উল্লম্ব প্রতিবেশী (গুলি) শুধুমাত্র: |; অনুভূমিক: -; উভয়:+


পুরানো সমাধান

আর্গুমেন্ট হিসাবে একটি অক্ষর ম্যাট্রিক্স গ্রহণ করে বেনামে টাসিট ফাংশন।

{' +-|+'⊃⍨1⍳⍨(' '=5⊃,⍵),(∧/,⊢)∨/2 21' '≠(90 1)/,⍵}⌺3 3

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

{}⌺3 3 প্রতি 3-বাই -3 প্রতিবেশে, নিম্নলিখিত ফাংশনটি প্রয়োগ করুন:

,⍵ অভ্যাস (সমতল)

()/ নিম্নলিখিত মাস্ক ব্যবহার করে ফিল্টার করুন:

  9⍴0 1 চক্রাকারে [0,1]9 এর দৈর্ঘ্যে পুনরায় আকার দিন (এন, ডাব্লু, ই, এস নির্বাচন করুন)

' '≠ বুলিয়ান যেখানে স্থান নেই

1⌽ এক ধাপ বাম দিকে ঘোরান; [W,E,S,N]

2 2⍴ 2-বাই -2 ম্যাট্রিক্সে পুনরায় আকার দিন; [[W,E],[S,N]]

∨/ সারি অনুসারে বা হ্রাস: [horizontal,vertical]

() নিম্নলিখিত সূক্ষ্ম ফাংশন প্রয়োগ করুন:

   পরিচয়; [horizontal,vertical]

  ∧/, এর ও হ্রাস দ্বারা পূর্ববর্তী; [both,horizontal,vertical]

(), নিম্নলিখিতটি পুনরায় সংশোধন করুন:

  ,⍵ পাড়া (চ্যাপ্টা) পাড়া

  5⊃ 5 তম উপাদানটি নিজেই বেছে নিন

  ' '= স্পেস (যেমন শূন্য) বুলিয়ান

 এখন আমাদের আছে [empty,both,horizontal,vertical]

1⍳⍨ বামতমতম 1 এর সূচক (কোনও প্রতিবেশী না হলে 5 দেয়)

' +-|+'⊃⍨ প্রতীক বাছাই করতে এটি ব্যবহার করুন

   


6

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

আই / ও ফর্ম্যাট: স্ট্রিংগুলির অ্যারে।

a=>a.map((s,y)=>s.replace(/\S/g,(_,x)=>'+|-+'[[-1,p=0,1,2].map(c=>p|=(a[y+c%2]||0)[x+~-c%2]>' '?c&1||2:0)|p]))

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

বা পরিবর্তে 108 টি বাইট অক্ষরের ম্যাট্রিক্স ব্যবহার করে।



5

ম্যাটল্যাব, 113 110 101 বাইট

function F(A)
B=A>32
c=[1 1 1]
f=@(c)conv2(B,c,'s')>1
h=f(c)
v=f(c')
char((13*h+92*v-94*(h&v)).*B+32)

ইনপুটটিকে যৌক্তিক রূপান্তরিত করে, অনুভূমিক এবং উল্লম্ব ক্ষেত্রে সমাবর্তনকে প্রয়োগ করে এবং ফলাফলগুলি সংযুক্ত বর্ণগুলি তৈরি করে।

আপনি পিপিসিজিতে আউটপুট আটকে রাখতে পারেন: আমাকে বলার জন্য @ অ্যাড্রিয়ানের দ্বারা 3 টি বাইট সংরক্ষণ করা হয়েছে: পি

9 টি বাইট সংরক্ষিত হয়েছে অসংখ্য ফ্লোয়ার মন্তব্যের জন্য ধন্যবাদ!



2

রেটিনা 0.8.2 , 92 বাইট

\S
0
(?<=(.)*)0(?=(?>.*\n(?<-1>.)*)0)|0(?=(.)*)(?<=0(?>(?<-2>.)*\n.*))
1
T`d`+|`\b.\b
T`d`-+

এটি অনলাইন চেষ্টা করুন! আয়তক্ষেত্রাকার ইনপুট প্রয়োজন। লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

\S
0

সমস্ত অ-ফাঁকা স্থানকে 0এস তে পরিবর্তন করুন ।

(?<=(.)*)0(?=(?>.*\n(?<-1>.)*)0)|0(?=(.)*)(?<=0(?>(?<-2>.)*\n.*))
1

সব জন্য চেহারা 0অপরের সাথে গুলি 0অবিলম্বে উপরে বা একই কলামে নিচে এবং তাদের একটি 1. পরিবর্তন 1গুলি এখন উল্লম্ব প্রতিবেশীদের সঙ্গে জায়গা তৈরী করছেন, 0গুলি কোন উল্লম্ব প্রতিবেশীদের আছে।

T`d`+|`\b.\b

অনুভূমিক প্রতিবেশী না থাকলে সমস্ত অঙ্ক সন্ধান করুন। 0গুলি, নয়তো কোন উল্লম্ব প্রতিবেশীদের তাই তারা হয়ে +গুলি, যখন 1, এস উল্লম্ব প্রতিবেশীদের তাই তারা হয়ে |সে।

T`d`-+

বাকী অঙ্কগুলির অনুভূমিক প্রতিবেশী রয়েছে। 1এছাড়াও উল্লম্ব প্রতিবেশীদের আছে র, তাই তারা হয়ে +, এস যখন 0গুলি শুধুমাত্র অনুভূমিক প্রতিবেশীদের নেই, তাই তারা হয়ে -সে।


1

পাইথন 3 , 336 বাইট

def g(s):
 h,j,s=' +|-+','',s.splitlines()
 s+=['']
 for n in range(len(s)):
  s[n]+=' '
  for i in range(len(s[n])-1):
   l,r,k=s[n][i-1],s[n][i+1],0
   try:u=s[n-1][i]
   except:u=' '
   try:d=s[n+1][i]
   except:d=' '
   if not s[n][i]==' ':
    k+=1
    if not u==d==' ':k+=1
    if not l==r==' ':k+=2
   j+=h[k]
  j+='\n'
 print(j)

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

এজ কেস ত্রুটিগুলি মোকাবেলায় আমাকে প্রচুর কোড ব্যবহার করতে হয়েছিল।


1

সি (জিসিসি) , 143 বাইট

char**y,*z,h,v;f(char**x){for(y=x;*y;++y)for(z=*y;*z;++z)if(*z-32){h=z[1]-32|z[-1]-32;v=y[1][z-*y]-32|y[-1][z-*y]-32;*z=h?v?43:45:(v?'|':43);}}

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

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

Ungolfed

f(char**x){
    char **y;
    for (y = x; *y; ++y) {
        char *z;
        for (z = *y; *z; ++z) {
            if (*z != ' ') {
                if (z[1] != ' ' || z[-1] != ' ') {
                    // Horizontal exists
                    if (y[1][z-*y] != ' ' || y[-1][z-*y] != ' ')
                        // Vertical exists
                        *z = '+';
                    else
                        *z = '-';
                } else {
                    // Horizontal doesn't exist
                    if (y[1][z-*y] != ' ' || y[-1][z-*y] != ' ')
                        // Vertical exists
                        *z = '|';
                    else
                        *z = '+';
                }
            }
        }
    }
}

এটি পয়েন্টার পাটিগণিতের একটি মজাদার চ্যালেঞ্জ ছিল। সি-স্টাইল পয়েন্টার পুনরাবৃত্তি ব্যবহার করে অনুভূমিক প্রতিবেশীগুলি পাওয়া সহজ তবে উল্লম্বগুলি আরও কঠোর ছিল। ভাগ্যক্রমে y পয়েন্টারটি এখনও কাছাকাছি রয়েছে (যা z এর প্রাথমিক মানকে নির্দেশ করে) তাই আমি এটি থেকে আমার সূচকটি কেটে নিতে পারি এবং এটি একটি আলাদা সারিতে একই উপাদান অ্যাক্সেস করতে ব্যবহার করতে পারি। যে y[-1][z-*y]কোনও যুক্তিসঙ্গত স্টাইলের মুখে উড়ে যাওয়ার কারণে এটি খুব ভুল লেখা অনুভব করেছে !


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