একমুখী গোলকধাঁধা তৈরি করুন


12

একটি বিজোড় পূর্ণসংখ্যা N (5 <= N <= 51) দেওয়া, পাশের দৈর্ঘ্যের N সহ একটি গোলকধাঁধা উত্পন্ন করুন যা নিম্নলিখিত প্রয়োজনীয়তাগুলি অনুসরণ করে:

গোলকধাঁধা অবশ্যই অক্ষর | -এবং সমন্বিত হওয়া উচিত +। এটি অবশ্যই |একটি উল্লম্ব প্রাচীর হিসাবে অক্ষরটি ব্যবহার করতে হবে , -অনুভূমিক প্রাচীর হিসাবে অক্ষরটি ব্যবহার করতে হবে এবং যদি সেই প্রাচীরটি ঘুরিয়ে দেয় তবে অক্ষরটি +ব্যবহার করা উচিত।

পথের প্রস্থ অবশ্যই একটি অক্ষর হতে হবে।

গোলকধাঁধা অবশ্যই কমপক্ষে চার বার চালু হবে।

গোলকধাঁটির বাহিরের দেয়াল অবশ্যই থাকা উচিত যা দুটি পয়েন্টে বিরতি দেয়: শুরু এবং শেষ।

গোলকধাঁধায় শুরু থেকে শেষ অবধি একটি অবিচ্ছেদ্য পথ থাকতে হবে।

উদাহরণস্বরূপ, নিম্নলিখিতটি একটি বৈধ গোলকধাঁধা: ( এন = 5)

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

এবং এন = 7 এর জন্য:

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

মনে রাখবেন, এটি , তাই কয়েকটি সংখ্যক বাইট বিজয়ী কোড।


9
এটি কোনও গোলকধাঁধা নয়, এটি একটি গোলকধাঁধা ইংরেজি.
stackexchange.com/a/144103/199361

@ edc65 আসলে এটির নাইট n
অলিভার নি

আমি এই বিষয়ে পরিষ্কার নয় "গোলকধাঁটিতে অবশ্যই শুরু থেকে শেষ অবধি একটি নন-ব্রেকিং পাথ থাকতে হবে" " এর অর্থ কি এই যে এখানে কেবল একটি-পাথ রয়েছে এবং এটি শুরু থেকে শেষ পর্যন্ত, বা শুরু থেকে শেষের পথগুলির সংখ্যা 1? মৃত প্রান্তের সাথে অন্য কোনও পথ থাকতে পারে? আলাদা লুপস?
xnor

বিজোড় পূর্ণসংখ্যার <50, <= 49
গোলাপফ্লোয়েডএক্স 33

2
@ edc65 আমি ধরে নিই যে ওপি মানেই না।
orlp

উত্তর:


10

জেলি , 36 35 34 33 32 বাইট

2*×5H_2Bị⁾ |
_3”-ẋ”+;;Çsẋ2U3¦ṁµY

TryItOnline!

একটি নাইটার তৈরি করে the যেমন অন্যান্য উপায়ে যেমন:

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

কিভাবে?

2*×5H_2Bị⁾ | - Link 1, pipes & spaces: n      e.g. 7
2*           - 2 raised to the nth power      e.g. 128
  ×5         - multiply by 5                  e.g. 640
    H        - halve                          e.g. 320
     _2      - subtract 2                     e.g. 318
       B     - convert to binary              e.g. [1,0,0,1,1,1,1,1,0]
        ị    - index into (1-based)
         ⁾ | - char list " |"                 e.g. " ||     |"

_3”-ẋ”+;;Çsẋ2U3¦ṁµY - Main link: n            e.g. 7
_3                  - n - 3                   e.g. 4
  ”-                - char list "-"
    ẋ               - repeat                  e.g. "----"
     ”+             - char list "+"
       ;            - concatenate             e.g. "+----"
         Ç          - call last link (1) as a monad
        ;           - concatenate             e.g. "+---- ||     |"" 
          s         - split into chunks of n  e.g. ["+---- |","|     |"]
           ẋ2       - repeat 2 times          e.g. ["+---- |",
                                                    "|     |",
                                              +-->  "+---- |",
                                              |     "|     |"]
              3¦    - apply to index 3:       |
             U      -    upend                +---  "| ----+"
                ṁ   - mould like n (i.e. repeat to fill)
                 µ  - monadic chain separation
                  Y - join with line feeds

(প্রতিটি বাইট মোটামুটি অ-তুচ্ছ পরিবর্তনগুলিতে জড়িত, আপনি আগ্রহী হলে সম্পাদনা ইতিহাস দেখুন, যদিও আমি সবেমাত্র লক্ষ্য করেছি যে লিংক 1 একই বাইট গণনাটিকে আরও প্রচলিত পুনরাবৃত্তি হিসাবে যুক্ত করুন এবং যোগদান করুন _2⁶ẋ“ ||“|”j:)


5

জাভাস্ক্রিপ্ট (ES6), 86 92 116

প্রায় একটি কলমোগর্ভ জটিলতা চ্যালেঞ্জ ... কিছুটা পার্শ্বীয় চিন্তাভাবনা (@ নীলের উত্তর দ্বারা অনুপ্রাণিত) দিয়ে, এটি খুব খাটো হতে পারে। সবে 90 turn ঘুরুন °

n=>`|${s=' '[r='repeat'](n-2)}|
| ${h='-'[r](n-3)}+
|${s}|
+${h} |
`[r](n).slice(n*~n)

পরীক্ষা

f=
n=>`|${s=' '[r='repeat'](n-2)}|
| ${h='-'[r](n-3)}+
|${s}|
+${h} |
`[r](n).slice(n*~n)

function update() {
  var i=+I.value
  O.textContent=i&1? f(i): 'even'
}

update()
<input id=I value=7 min=5 max=49 step=2 type=number oninput="update()"><pre id=O><pre>


@ নীল ওয়াও প্রতিদিন আমি নতুন কিছু শিখি। ধন্যবাদ
edc65

অ্যামেজিং! আমি 86 বাইট গণনা করছি ,
বিটিডব্লিউ

পছন্দ করুন ধন্যবাদ
edc65

4

ব্যাচ, 216 বাইট

@echo off
set s=
for /l %%i in (4,1,%1)do call set s=-%%s%%
set b= %s:-= %
set r=! %s%+
set s=+%s% !
call:e
for /l %%i in (5,2,%1)do call:l
:l
echo ^|%b%^|
set t=%s%
set s=%r%
set r=%t%
:e
echo %s:!=^|%

|গুলি ব্যাচ মধ্যে বিশ্রী তাই আমি হয় প্রতিফলিত উদাহরণ পরিবর্তে আবর্তিত।


আপনি কি 90 rot ঘোরা মানে? আমি এটি চেষ্টা করে দেখেছি এবং জেএসে অনেক সঞ্চয় করেছি। আবার ধন্যবাদ
edc65

@ edc65 আমি প্রথমে প্রতিবিম্বের জন্য যাচ্ছিলাম, তবে আপনি ঠিক বলেছেন যে আমি তার পরিবর্তে একটি ঘূর্ণন নিয়ে এসেছি।
নীল

3

পিএইচপি, 99 বাইট

আপ ডাউন ডাউন গেটস

for($s=str_pad("\n| ",$c=$argv[1],"-")."+\n";$i++<$c;)echo$i%2?$s=strrev($s):str_pad("|",$c-1)."|";

পিএইচপি, 157 বাইট

বাম ডান গেট

<?=($p=str_pad)($n="\n",$c=1+$argv[1],"+---").$p($n,$c-1,"|   ")." #|"[$c%4].str_repeat($p($n,$c,"| "),$c-5).$p($n,$c-1,"  | ")."|# "[$c%4].$p($n,$c,"--+-");

@ টিটাস বাইটগুলি হ্রাস করার জন্য আপনাকে ধন্যবাদ


1
3 বাইট সংরক্ষণ করুন assign $ n = "\ n"
টাইটাস

1
$p("",$c*($c-4),...)str_repeat(...,$c-4)(-2) এর পরিবর্তে
তিতাস

1
... এবং এর $p($n,$c-1," | ")পরিবর্তে আরও 3 বাইট$p("\n ",$c-1," | ")
টিটাস

1
($c)%4(-2) এ অপ্রয়োজনীয় প্যারেনস , $gকোড থেকে সরান (-1)
তিতাস

1
আপ-টু-ডাউন-সংস্করণ; (-4), str_pad অপ্রয়োজনীয় 3rd প্যারামিটার $c=$argv[1]-1পরিবর্তে ($c=$argv[1])-1, <=$cপরিবর্তে <$cএবং $cপরিবর্তে $c-1(-3)
তিতাস

3

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

একটি পুনরাবৃত্তি ফাংশন। কয়েকটি পিছনে স্থান ফাঁকা দেয়।

f=(n,w=n,s=' -'[n&1].repeat(w-3),c='|+'[n&1])=>n?`
`+(n&2?c+s+' |':'| '+s+c)+f(n-1,w):s

পরীক্ষা


ওহ বাহ, আমি কেবল পুনরাবৃত্তি চেষ্টা করেছিলাম এবং 9 বাইট বেশি দীর্ঘ শেষ করেছি। ভাল হয়েছে :-)
ETH প্রোডাকশনগুলি

2

রুবি 72 বা 69 বাইট

লাম্বদা ফাংশন। প্রদর্শিত হিসাবে, একটি নতুনরেখা দ্বারা পৃথক স্ট্রিং ফেরত। স্ট্রিংগুলির একটি অ্যারে ফিরিয়ে দিতে * $ / মুছুন।

->n{(1..n).map{|i|"|%s |+%s || %s|| %s+"[i%4*5,5]%(" -"[i%2]*(n-3))}*$/}

উদাহরণ থেকে 90 ডিগ্রি ঘোরানো একটি গোলকধাঁধা আঁকুন। প্রতিটি লাইনের জন্য একটি বিন্যাসের স্ট্রিং নির্বাচন করা হয় (উদাহরণস্বরূপ +%s |প্রথম লাইনটির জন্য (কোনও জিরোথ লাইন নেই) এবং %sঅপারেটরটি -ব্যবহার করে %( স্প্রিন্টফের সমতুল্য, তবে সংক্ষিপ্ত) এর সাহায্যে অ্যাপ্রোপ্রিয়েট সংখ্যা বা স্পেসের সাহায্যে প্রতিস্থাপিত হয় )


2

জাভা 7, 228 বাইট

String c(int n){String a="+x |",b="|y|\n",x,y,r=x=y="";int i=0;for(;i++<n-2;){x+=i>1?"-":"";y+=" ";}a=a.replace("x",x);b=b.replace("y",y);for(i=0;i<n;i++)r+=i%4<1?a+"\n":(i-2)%4==0?new StringBuffer(a).reverse()+"\n":b;return r;}

@ জোনাথান অ্যালান এর জেলি উত্তর হিসাবে অনুরূপ উল্লম্ব আউটপুট ব্যবহার করা হয়েছে ।

অবরুদ্ধ এবং পরীক্ষার কোড:

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

class M{
  static String c(int n){
    String a = "+x |",
           b = "|y|\n",
           x = "",
           y = "",
           r = "";
    int i = 0;
    for (; i++ < n-2;){
      x += i > 1
            ? "-"
            : "";
      y += " ";
    }
    a = a.replace("x", x);
    b = b.replace("y", y);
    for(i = 0; i < n; i++){
      r += i % 4 < 1
            ? a+"\n"
            : (i-2) % 4 == 0
               ? new StringBuffer(a).reverse()+"\n"
               : b;
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c(7));
    System.out.println();
    System.out.println(c(25));
  }
}

আউটপুট:

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


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

অজুহাত, কিন্তু Given an odd integer N (5 <= N <= 51), generate a maze with side length N। আপনার কাছে মনে হয় আপনার পক্ষে একটি শীর্ষ এবং নীচের দিকের দৈর্ঘ্য রয়েছে ...
ধ্বংসাত্মক লেবু

আমি এটি অতীতে পড়েছি আমার কোডটি এখনও সমস্ত বিধি / প্রয়োজনীয়তা মেনে চলে। আহ ভাল, আমি আমার মূল উত্তরে রোল ব্যাকড করেছি যা উচ্চতা হিসাবে একই প্রস্থ ব্যবহার করেছিল।
কেভিন ক্রুইজসেন

1

পাইথন 2, 89 বাইট

def f(n):x='+'+'-'*(n-3)+' |';y='|'+' '*(n-2)+'|';print'\n'.join(([x,y,x[::-1],y]*n)[:n])

repl.it

একটি অভ্যন্তরীণ প্রাচীর, xযেমন '+---- |'এবং একটি অভ্যন্তরীণ করিডোর তৈরি করে y, '| |'
তারপরে একটি তালিকা তৈরি করে [x,y,x[::-1],y](এর x[::-1]বিপরীতটি হয় x)
তারপরে সেই তালিকা nবার পুনরাবৃত্তি করে (একক তালিকা হিসাবে) *n, এবং এটিতে যোগদানের nসাথে প্রথম এন্ট্রিগুলিকে (...)[:n]ছাঁটাই করে লাইন ফিড সহ তালিকাটি ফলাফল সহ '\n'.join(...)মুদ্রণ করে এবং মুদ্রণ করে।


1

র‌্যাকেট 187 বাইট

@ জোনাথান অ্যালান দ্বারা প্রদর্শন প্যাটার্ন ব্যবহার করে

(let*((u "+---- |")(v "|     |")(sr(λ(s)(list->string(reverse(string->list s)))))(g #t)(d displayln)
(p(λ()(d(if g u(sr u)))(set! g(if g #f #t)))))(for((i(ceiling(/ n 2))))(p)(d v))(p))

Ungolfed:

(define (f n)
  (let* ((sr (lambda(s)
               (list->string
                (reverse
                 (string->list s)))))
         (u "+---- |")
         (v "|     |")
         (g #t)
         (d displayln)
         (p (lambda()
              (d (if g u (sr u)))
              (set! g (if g #f #t)))))
    (for ((i (ceiling (/ n 2))))
      (p)
      (d v))
    (p)))

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

(f 10)

আউটপুট:

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

1

জিএনইউ 140 বাইট বর্ধিত

-R এর জন্য +1 অন্তর্ভুক্ত

s/1{5}//
h
s/^/+---+\n|   |\n| | |\n  |  \n--+--/
/1/!b
:w
s/^..(..)[^$]*/\1&/gm
s/11//
/1/bw
G
:h
s/\n[^\n]*\n([^\n]*\n)/&\1/
s/1//
/1/bh

অনলাইনে চেষ্টা করে দেখুন!

আনারি ইনপুট নেয় ( এই sensকমত্য দেখুন )।

মূলত এটি আকার 5 ধাঁধাঁটি সন্নিবেশ করে, তারপরে প্রতিটি লাইনের 2 য় এবং 3 য় অক্ষরটি শুরুতে যতবার প্রয়োজন ততবার সংযোজন করে। তারপরে তৃতীয় লাইনটি অনুরূপ (বিকল্প |এবং ) যতবার প্রয়োজন ততবার নকল করুন ।

শুধুমাত্র মজার বিষয় যে, আমি ব্যবহার করে তা হল mলাইন 6 যা করতে পারবেন বিকল্পটি ^এবং $একটি newline পর যথাক্রমে মেলে (স্বাভাবিক আচরণ ছাড়াও) খালি স্ট্রিং এবং খালি স্ট্রিং একটি newline আগে।


1

টি-এসকিউএল, 123/79 বাইট

Golfed:

DECLARE @i INT=7

,@ INT=0z:PRINT
STUFF(CHOOSE(@%4+1,'+- |','|  |','| -+','|  |'),3,0,REPLICATE(IIF(@%2=0,'-',' '),@i))SET
@+=1IF @<@i GOTO z

Ungolfed:

DECLARE @i INT = 9

DECLARE @i INT=7

,@ INT=0
z:
  PRINT 
    STUFF(CHOOSE(@%4+1,'+- |','|  |','| -+','|  |'),3,0,
      REPLICATE(IIF(@%2=0,'-',' '),@i))
  SET @+=1
IF @<@i GOTO z

যদি আপনি প্রতারণা করেন এবং কেবল একটি সরু গোলকধাঁধা তৈরি করেন তবে স্ক্রিপ্টটি গল্ফ করে 79 বাইটে নামানো যেতে পারে:

Golfed:

DECLARE @i INT = 9

,@ INT=0z:PRINT CHOOSE(@%4+1,'+- |','|  |','| -+','|  |')SET @+=1IF @<@i GOTO z

Ungolfed:

DECLARE @i INT = 9

,@ INT=0
z:
  PRINT CHOOSE(@%4+1,'+- |','|  |','| -+','|  |')
  SET @+=1
IF @<@i GOTO z

দীর্ঘ উত্তরের জন্য ফিডল


0

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

f=(n,w=n-3)=>(h="-".repeat(w),n&2?`+${h} |`:`| ${h}+`)+(n>1?`
| ${" ".repeat(w)}|
`+f(n-2,w):"")

আমি আশা করছিলাম যে পুনরাবৃত্তিটি সবচেয়ে সংক্ষিপ্ততম রুটে পরিণত হবে এবং সম্ভবত এটি ...

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