বিপরীত প্রকৌশলী বন্ধনী আয়তক্ষেত্র


24

প্রতিটি প্রোগ্রামার জানে যে আয়তক্ষেত্রগুলি সত্যই মজাদার। এই মজা বাড়িয়ে তোলার জন্য, এই সুন্দর এবং अस्पष्ट চিত্রগুলি আন্তঃ বোনা বন্ধনীগুলির দলে রূপান্তরিত হতে পারে।

এই চ্যালেঞ্জটি আমার আগেরটির বিপরীত ।

ধরা যাক আপনার মতো ইন্টারলকিং আয়তক্ষেত্রগুলির একটি গ্রুপ রয়েছে:

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

অতিরিক্ত নোট:

  • কোনও দু'জন +আর সংলগ্ন হবে না
  • কোনও দুটি আয়তক্ষেত্র কখনও প্রান্ত বা কোণ ভাগ করে নেবে না
  • প্রতিটি কলামে কেবলমাত্র সর্বাধিক এক উল্লম্ব প্রান্ত থাকবে

প্রথম ধাপটি কোনও আয়তক্ষেত্রের বাম-সর্বাধিক প্রান্তটি দেখানো। এটিকে চারটি বন্ধনী ধরণের একটি নির্ধারণ করুন ({[<। আমি পছন্দ করে [

   +------------+
   |            |
[--+-]     +----+-+
[  | ]     |    | |
[  | ] +---+--+ | |
[  | ] |   |  | | |
[--+-] | +-+--+-+-+-+
   |   | | |  | | | |
   |   | | |  | | | |
   |   | | |  | | | |    +-+
   |   +-+-+--+ | | |    | |
   |     | |    | | |  +-+-+-+
   +-----+-+----+ | |  | | | |
         | |      | |  | +-+ |
         | +------+ |  |     |
         |          |  |     |
         +----------+  +-----+

এখন দ্বিতীয় বাম দিকের আয়তক্ষেত্রটি দেখুন। যেহেতু এটি একটি [আয়তক্ষেত্রকে ওভারল্যাপ করে তাই এটি অবশ্যই অন্য ধরণের হতে হবে। আমি পছন্দ করে (

   (------------)
   (            )
[--(-]     +----)-+
[  ( ]     |    ) |
[  ( ] +---+--+ ) |
[  ( ] |   |  | ) |
[--(-] | +-+--+-)-+-+
   (   | | |  | ) | |
   (   | | |  | ) | |
   (   | | |  | ) | |    +-+
   (   +-+-+--+ ) | |    | |
   (     | |    ) | |  +-+-+-+
   (-----+-+----) | |  | | | |
         | |      | |  | +-+ |
         | +------+ |  |     |
         |          |  |     |
         +----------+  +-----+

পরবর্তী বাম-সর্বাধিক আয়তক্ষেত্রটি কোনও পূর্ববর্তী আয়তক্ষেত্রের সাথে ছেদ করে না তবে পূর্ববর্তী মধ্যে বাসা বাঁধে। আমি (আবার এটি বরাদ্দ করা চয়ন । সাধারণত যদি আয়তক্ষেত্রটি নীচে বাসা বাঁধছে তবে একই ধরণের আয়তক্ষেত্রটি একইভাবে নির্ধারণ করা ভাল তবে অনুভূত হয় যে কখনও কখনও ব্যাকট্র্যাকিংয়ের প্রয়োজন হয়।

   (------------)
   (            )
[--(-]     +----)-+
[  ( ]     |    ) |
[  ( ] (---+--) ) |
[  ( ] (   |  ) ) |
[--(-] ( +-+--)-)-+-+
   (   ( | |  ) ) | |
   (   ( | |  ) ) | |
   (   ( | |  ) ) | |    +-+
   (   (-+-+--) ) | |    | |
   (     | |    ) | |  +-+-+-+
   (-----+-+----) | |  | | | |
         | |      | |  | +-+ |
         | +------+ |  |     |
         |          |  |     |
         +----------+  +-----+

এই পরবর্তী আয়তক্ষেত্রটি [আবার বরাদ্দ করা যেতে পারে ।

   (------------)
   (            )
[--(-]     +----)-+
[  ( ]     |    ) |
[  ( ] (---+--) ) |
[  ( ] (   |  ) ) |
[--(-] ( [-+--)-)-+-]
   (   ( [ |  ) ) | ]
   (   ( [ |  ) ) | ]
   (   ( [ |  ) ) | ]    +-+
   (   (-[-+--) ) | ]    | |
   (     [ |    ) | ]  +-+-+-+
   (-----[-+----) | ]  | | | |
         [ |      | ]  | +-+ |
         [ +------+ ]  |     |
         [          ]  |     |
         [----------]  +-----+

এই পরবর্তী আয়তক্ষেত্র মজাদার। এটি একটি (এবং একটি [আয়তক্ষেত্র উভয়কে ছেদ করে , তাই আমি এটিকে একটি {আয়তক্ষেত্র বলতে পারি (বা <তবে কেউ সেগুলি পছন্দ করে না)।

   (------------)
   (            )
[--(-]     {----)-}
[  ( ]     {    ) }
[  ( ] (---{--) ) }
[  ( ] (   {  ) ) }
[--(-] ( [-{--)-)-}-]
   (   ( [ {  ) ) } ]
   (   ( [ {  ) ) } ]
   (   ( [ {  ) ) } ]    +-+
   (   (-[-{--) ) } ]    | |
   (     [ {    ) } ]  +-+-+-+
   (-----[-{----) } ]  | | | |
         [ {      } ]  | +-+ |
         [ {------} ]  |     |
         [          ]  |     |
         [----------]  +-----+

শেষ দুটি আয়তক্ষেত্র খুব খারাপ নয় n't এগুলি যে কোনও দুটি ভিন্ন ধরণের হতে পারে।

   (------------)
   (            )
[--(-]     {----)-}
[  ( ]     {    ) }
[  ( ] (---{--) ) }
[  ( ] (   {  ) ) }
[--(-] ( [-{--)-)-}-]
   (   ( [ {  ) ) } ]
   (   ( [ {  ) ) } ]
   (   ( [ {  ) ) } ]    {-}
   (   (-[-{--) ) } ]    { }
   (     [ {    ) } ]  <-{-}->
   (-----[-{----) } ]  < { } >
         [ {      } ]  < {-} >
         [ {------} ]  <     >
         [          ]  <     >
         [----------]  <----->

আয়তক্ষেত্রগুলি পড়া, আমি পেয়েছি [(]([{))}]<{}> উপরের ইনপুটটির জন্য এটি একটি সম্ভাব্য আউটপুট হবে। এখানে অনেকগুলি সম্ভাব্য বিকল্পের তালিকা রয়েছে, সম্পূর্ণ নয়:

[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...

ইনপুট

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

আউটপুট

যে কোনও বৈধ বন্ধনী স্ট্রিং যা আয়তক্ষেত্রের ছেদবদ্ধতার সীমাবদ্ধতা মেনে চলে। Alচ্ছিক ট্রেলিং নিউলাইন ছাড়াও, বন্ধনী ছাড়া অন্য কোনও অক্ষর থাকতে হবে না। প্রধান নিয়মটি হ'ল, যদি দুটি স্কোয়ার ছেদ করে তবে তাদের বিভিন্ন ব্রাকেট ধরণের দেওয়া উচিত।

লক্ষ্য

এটি কোড-গল্ফ, মানের তুলনায় (অভাব) পরিমাণ।


3
এফওয়াইআই "এক্সারসারবেট" এর অর্থ "খারাপ জিনিসকে আরও খারাপ করা"।
পল আর

@ পলআর আমি বিশ্বাস করি যে বিষয়টি ছিল
বিড়াল

ওহ, ঠিক আছে, স্পষ্টতই বিন্দু যা ছিল তা সরাসরি আমার মাথার উপর দিয়ে গেল!
পল আর

আমরা অনুমান করতে পারেন প্রতিটি আয়তক্ষেত্র যে হয়েছে কিছু উচ্চতা? যেমন এটির +উপরের-বাম কোণার জন্য একটি থাকতে পারে না এবং তারপরে +নীচে-বাম কোণার জন্য (অবিলম্বে নীচে) ?
টেরোসৌরোস

উত্তর:


2

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

def c(i):
 a,b,c,d={},0,[],{}
 for e in map("".join,zip(*i.split("\n"))):
  if"+"in e:
   f=e.index("+"),e.rindex("+")
   if f in a:j=a.pop(f);d[j]=f+(d[j],len(c));c.append(j)
   else:a[f]=b;d[b]=len(c);c.append(b);b+=1
 g,h={},0
 while d:
  i={list(d)[0]};
  for j,(k,l,m,n)in d.items():
   for(o,p,q,r)in(d[v]for v in i):
    if not(m>r or n<q or k>p or l<o or(q<m<n<r and o<k>l<p)):break
   else:i.add(j)
  for j in i:del d[j];g[j]=h
  h+=1
 s,u=set(),""
 for t in c:u+="[{(<]})>"[g[t]+4*(t in s)];s.add(t)
 return u

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

ইনপুট: আসকি শিল্প যুক্ত একটি স্ট্রিং। কোনও ট্রেলিং নিউলাইন নেই, এবং সমস্ত লাইন স্পেস ব্যবহার করে একই দৈর্ঘ্যে প্যাড করতে হবে। এটি কেবল কোণগুলির দিকে তাকান বলে কোনও | এর বা এর কোনওটি সেখানে না রাখাই আপনার পক্ষে সম্পূর্ণরূপে ঠিক।

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


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