মিনোটোরের জন্য বাড়ির উন্নতি


42

মিনোটোরের জন্য বাড়ির উন্নতি

ক্রিটান গোলকধাঁধা আঁকা বেশ সহজ। কেবলমাত্র একটি প্রতিসম আকৃতি দিয়ে শুরু করুন (এখানে লাল রঙে)। আসুন আমরা এই লাইনের সমস্ত নোডকে 'নোড' বলি। তারপরে আপনি খিলানগুলি আঁকতে শুরু করুন (কালো): প্রথমটি সর্বদা শীর্ষ মধ্য নোডে শুরু হয় এবং ডানদিকে তার পাশের নোডের সাথে সংযুক্ত হয়, তারপরে পূর্ববর্তী খিলানের নিকটবর্তী দুটি নোড সংযুক্ত থাকে। এটি পুনরাবৃত্তি করা হবে যতক্ষণ না সমস্ত নোড areাকা থাকে।

GIF

এখন আমরা এই ধারণাকে সাধারণীকরণ করতে পারি: আমরা আরও Lআকার যুক্ত করে সহজেই নতুন প্রাথমিক নিদর্শনগুলি তৈরি করতে পারি । আমি নীচের হিসাবে প্রাথমিক আকারগুলি গণনা করেছি:

ডিগ্রী

সর্বাধিক বাম প্যাটার্ন 0 ডিগ্রি এর একটি ক্রিটান গোলকধাঁধা উত্পাদন করবে । পরেরটি ডিগ্রি 1 (মূল একটি) ইত্যাদির একটি ক্রিটান গোলকধাঁধা তৈরি করবে etc.

কার্য

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

উদাহরণ

মূল ক্রেটন ল্যাবিরিথ (ডিগ্রি 1) এর আউটপুট নিম্নলিখিত:

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

প্রাথমিক প্যাটার্ন:

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

0 ডিগ্রির ক্রিস্টিয়ান গোলকধাঁধির মতো দেখতে হবে:

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

প্রাথমিক প্যাটার্ন:

+ | +
--+--
+ | +

উত্তর:


10

পার্ল 5, 349 বাইট

say$p="| "x$_,"+","-"x(16*$n-4*$_+13),"+ $p"for 0..4*($n=pop)+3;say$p="| "x(3*$n+2),"+ | ","| "x2x$n,"+ $p|";$p=~s/..//,$q="-"x(4*$_-1),say"$p+$q+ ","| "x(2*$n-2*$_+1),"+$q+ $p|"for 1..$n;$p=~s/..//;say$p,("+---"."-"x4x$n)x2,"+ $p|";$p=~s/..//,$q="-"x(4*$n+3)."-"x4x$_,say"$p+$q+ | ","| "x2x($n-abs$_),"+$q+ $p|"for-$n..$n;say" "x(8*$n+6),"+----$q+"

( কমান্ড লাইন আর্গুমেন্ট হিসাবে এন পাস করুন ।)

ছয়টি বিভাগে গোলকধাঁধার লাইন বাই লাইন গণনা করে:

  • প্রথম 4n + 4 লাইন,
  • পরবর্তী লাইন (একমাত্র লাইন নয় -),
  • পরবর্তী এন লাইন,
  • পরবর্তী লাইন (প্রাথমিক প্যাটার্নের মাঝখানে রেখা),
  • পরবর্তী 2n + 1 লাইন,
  • চূড়ান্ত রেখা (শীর্ষস্থানীয় স্থানগুলির সাথে রেখা)।

6

পাইথন 3.5, 703 695 676 648 587 581 542 535 500 486 462 431 423 411 বাইট:

( 55 বাইট (486 -> 431) সংরক্ষণের পরামর্শের জন্য @ ফ্লোয়ারকে ধন্যবাদ! )

def j(r):R=range;Z=zip;B=r+r+2;P,M='+-';X='| ';q=[*Z(R(0,B-1,2),R(B-1,0,-2))];L=r+1;A=2+r;print('\n'.join([X*w+P+M*v+P+' |'*w for v,w in Z(R(4*L*4-3,0,-4),R(4*L))]+[X*g+P*o+M*k+u+M*k+P*o+' |'*-~g for g,o,k,u in Z([*R(4*L-A,0,-1),*R(4*L-A)],[0]+[1]*(3*r+2),[0,*R(1,4*L,2),*R(4*L+1,11*r,2)],[M*y+'+ '+X*b+P+M*y for y,b in q]+[M*B+P+M*B]+[M*y+'+ '+X*b+P+M*y for y,b in q[::-1]+q[1:]])]+[' '*(8*r+6)+P+M*(8*r+7)+P]))

শিরোনামের প্রতিযোগী খুব বেশি না, তবে আমি এখনও এটি একটি শট দিয়েছি এবং এটি পুরোপুরি কার্যকর হয়। আমি যেখানে যেতে পারি সময়ের সাথে এটি আরও সংক্ষিপ্ত করার চেষ্টা করব, তবে আপাতত, আমি এটি পছন্দ করি এবং এর চেয়ে বেশি সুখী হতে পারি না।

এটি অনলাইন চেষ্টা করুন! (আইডিয়ন) (আপাতত অনলাইন সংকলক সীমাবদ্ধতার কারণে এখানে কিছুটা আলাদা লাগতে পারে However তবে এটি এখনও অনেকটা একই।)

ব্যাখ্যা:

এই ব্যাখ্যার উদ্দেশ্যগুলির জন্য, ধরে নেওয়া যাক যে উপরের ফাংশনটি rসমান হওয়ায় ইনপুট দিয়ে সম্পাদিত হয়েছিল 1। যা বলা হচ্ছে, মূলত যা ঘটছে, তা ধাপে ধাপে ...

  1. q=[*Z(R(0,B-1,2),R(B-1,0,-2))]

    একটি জিপ অবজেক্ট, q2 টি রেঞ্জ অবজেক্ট দিয়ে তৈরি করা হয়, এটির মধ্যে প্রতিটি সেকেন্ডের পূর্ণসংখ্যার পরিসীমা থাকে 0=>r+r+1এবং অপরটি প্রতিটি দ্বিতীয় পূর্ণসংখ্যার ব্যাপ্তিতে থাকে r+r+1=>0। এটি কারণ একটি নির্দিষ্ট ডিগ্রির একটি ক্রিটান গোলকধাঁধার প্রতিটি প্রারম্ভিক প্যাটার্নে -প্রতিটি লাইনে সর্বদা একটি সমান সংখ্যার উপস্থিতি থাকবে । উদাহরণস্বরূপ, একটি ক্রিটান গোলকধাঁধা ডিগ্রির জন্য 1, r+r+1সমান 3হয় এবং এইভাবে, এর প্যাটার্নটি সর্বদা 0ড্যাশ দিয়ে শুরু হবে , তারপরে 4(2 + 2) ড্যাশগুলির সাথে অন্য একটি লাইন থাকবে । এই জিপ অবজেক্টটি r+1গোলকধাঁধার প্যাটার্নের প্রথম লাইনের জন্য ব্যবহৃত হবে ।

    নোট: শুধুমাত্র কারণ qএকটি তালিকা রয়েছে এবং বাকি থেকে পৃথক করা হয়, কারণ qকয়েক বার উল্লেখ করা হয় এবং subscripted, এবং পুনরাবৃত্তি অনেকটা সংরক্ষণ করতে এবং subscripting দিই, আমি কেবল একটি জিপ বস্তুর নির্মিত qএকটি তালিকা আকারে।

  2. print('\n'.join([X*w+P+M*v+P+' |'*w for v,w in Z(R(4*L*4-3,0,-4),R(4*L))]+[X*g+P*o+M*k+u+M*k+P*o+' |'*-~g for g,o,k,u in Z([*R(4*L-A,0,-1),*R(4*L-A)],[0]+[1]*(3*r+2),[0,*R(1,4*L,2),*R(4*L+1,11*r,2)],[M*y+'+ '+X*b+P+M*y for y,b in q]+[M*B+P+M*B]+[M*y+'+ '+X*b+P+M*y for y,b in q[::-1]+q[1:]])]+[' '*(8*r+6)+P+M*(8*r+7)+P]))

    এটি শেষ পদক্ষেপ, যেখানে গোলকধাঁধাটি নির্মিত এবং একসাথে করা হয়েছে। এখানে তিনটি তালিকা, প্রথমটি 4*r+1গোলকধাঁধার শীর্ষ রেখাসমূহ নিয়ে গঠিত, দ্বিতীয়টি গোলকধাঁধার মাঝের 3*r+3রেখার সমন্বিত এবং দ্বিতীয়টি গোলকধাঁধার খুব শেষ রেখার সমন্বিত সর্বশেষ তালিকার সাথে একত্রিত হয়েছে, লাইন বিরতি ( \n) দিয়ে একটি দীর্ঘ স্ট্রিং। পরিশেষে, পুরো গোলকধাঁটি নিয়ে গঠিত এই বিশাল স্ট্রিংটি মুদ্রিত হয়েছে। এই 2 টি তালিকা এবং 1 টি স্ট্রিংয়ে আসলে কী রয়েছে সে সম্পর্কে আরও গভীরতার দিকে চলুন:

    • 1 ম তালিকা, যাতে প্রতিটি লাইন একের পর এক তৈরি করার জন্য নেতৃস্থানীয় |বা +চিহ্নগুলি, পরিসরে একটি বিজোড় সংখ্যার ড্যাশ 0=>4*(r+1), পিছনে |বা +চিহ্নগুলি এবং তারপরে একটি নতুন লাইন ( \n) তৈরি করার জন্য অন্য একটি জিপ করা অবজেক্টটি তালিকা বোঝার জন্য ব্যবহৃত হয় । ডিগ্রি 1গোলকধাঁধার ক্ষেত্রে , এই তালিকাটি ফিরে আসে:

      +-----------------------------+
      | +-------------------------+ |
      | | +---------------------+ | |
      | | | +-----------------+ | | |
      | | | | +-------------+ | | | |
      | | | | | +---------+ | | | | |
      | | | | | | +-----+ | | | | | |
      | | | | | | | +-+ | | | | | | |
      
    • ২ য় তালিকার মধ্যে একটি জিপ অবজেক্ট রয়েছে যার মধ্যে ৪ টি তালিকা রয়েছে এবং প্রতিটি তালিকার শীর্ষস্থানীয় / |চলমান +প্রতীকগুলির সংখ্যা, চিহ্নগুলির সংখ্যা, ড্যাশের সংখ্যা এবং শেষ অবধি সর্বশেষ তালিকার সাথে মিল রয়েছে, যার প্রথম r+1লাইন রয়েছে জিপ অবজেক্ট অনুযায়ী প্যাটার্নটি তৈরি করা হয়েছে q, প্যাটার্নের মাঝখানে রেখাটি (কোনওটি নেই |) এবং r+2প্রতিসম প্যাটার্নের শেষ লাইনগুলি। এই নির্দিষ্ট ক্ষেত্রে, এই তালিকার জিপ অবজেক্টে ব্যবহৃত সর্বশেষ তালিকাটি ফিরে আসবে:

      + | | | +
      --+ | +--
      ----+----
      --+ | +-- 
      + | | | + 
      --+ | +--  <- Last line created especially for use in the middle of the labyrinth itself.
      

      এবং তাই, 1 ডিগ্রি গোলকধাঁধার ক্ষেত্রে, এই পুরো তালিকাটি ফিরে আসবে:

      | | | | | + | | | + | | | | | |
      | | | | +---+ | +---+ | | | | |
      | | | +-------+-------+ | | | |
      | | +-------+ | +-------+ | | |
      | +-------+ | | | +-------+ | |
      +-----------+ | +-----------+ | <- Here is where the extra line of the pattern is used.
      
    • এই চূড়ান্ত তালিকা, যা শেষ লাইন তৈরি করা হয়। এখানে স্থানের তালিকা Pসংখ্যার শেষ রেখার দৈর্ঘ্যের প্রথম বিভাগটি (প্রথম স্থানের আগে একটি) তৈরি করা হবে। তারপরে, একই লাইনের শেষ বিভাগের (সমাপ্তি বিভাগের) দৈর্ঘ্য + 4 টি ড্যাশ যুক্ত করা হয়, এর সবগুলি পূর্ববর্তী এবং পরে একটি একক +চিহ্ন দ্বারা অনুসরণ করা হয় । 1 ডিগ্রি গোলকধাঁধার ক্ষেত্রে, এই শেষ তালিকাটি ফিরে আসে:

                    +---------------+
      

    এই সমস্ত একসাথে যোগদানের পরে, এই পদক্ষেপ অবশেষে সমাপ্ত গোলকধাঁধাটি ফিরিয়ে দেয়। 1 ডিগ্রি গোলকধাঁধার ক্ষেত্রে, শেষ পর্যন্ত এটি ফিরে আসবে:

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

1
আপনি সম্ভবত প্রথম সংজ্ঞায়িত R=rangeকরতে পারেন বা এরকম কিছু? একই জন্য P='+'?
flawr

1
আমি মনে করি আপনার বলার সুবর্ণ সুযোগটি নেওয়া উচিতfor g,o,k,u in Z
শার্লক 9

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