2 ডি মেজে মাইনাস 1 ডি


27

এই চ্যালেঞ্জটি 2 ডি ম্যাজগুলিকে 1 ডি ম্যাজে রূপান্তর করা।

সংক্ষিপ্ত বিবরণ

+-+-+-+-+-+-+   +-+-+-+-+-+-+                    graph {
| |   |     |   |A|   |    B|   A         B        A -- D
+ + + + +-+-+   + + + + +-+-+    \        |        C -- D
|   | |     |   |   | |     |     \       |        D -- E
+-+-+ +-+-+ +   +-+-+ +-+-+ +      \      |        E -- F
|           |   |C   D E   F|   C---D-E---F        E -- G
+-+-+-+ +-+ +   +-+-+-+ +-+ +         |   |        B -- F
|         | |   |      G  | |     .---G   |        F -- J
+ +-+-+-+ + +   + +-+-+-+ + +   .'   /    |        G -- H
| |       | |   |H|I      |J|   H I-'     J        G -- I
+-+-+-+-+-+-+   +-+-+-+-+-+-+     (ascii)        } // (graphviz dot)       
   Figure 1       Figure 2                 Figure 3

এই চ্যালেঞ্জের উদ্দেশ্যে, একটি traditionalতিহ্যবাহী 2 ডি গোলকধাঁধাটি একটি আয়তক্ষেত্রাকার গোলকধাঁধা যা জাল পয়েন্টগুলি থেকে তৈরি হয়েছিল যেখানে নীচের সমস্তগুলি ধারণ করে:

  • এটি বন্ধ (বাইরের রিমটি দেয়াল দ্বারা সংযুক্ত)।
  • সমস্ত জাল পয়েন্টগুলি দেয়ালের সাথে সংযুক্ত
  • এটি সংযুক্ত (প্রতিটি এবং দুটি জায়গার জন্য এক্স এবং ওয়াইয়ের মধ্যে একটি পথ রয়েছে)
  • এটি অ্যাসাইক্লিক (ব্যাকট্র্যাকিং ছাড়াই কোনও এক্স স্পেস এক্স থেকে এক্স পর্যন্ত কোনও পাথ নেই)

চিত্র 1 একটি traditionalতিহ্যবাহী 2D গোলকধাঁধা দেখায়। এই ম্যাজগুলির আগ্রহের তিনটি ক্ষেত্র রয়েছে:

  • ডেড শেষ - এমন এক স্থান থেকে যেখানে কেবলমাত্র একটি উপলভ্য পথ রয়েছে
  • করিডোর - এমন দুটি জায়গা যেখানে থেকে দুটি উপলভ্য পথ রয়েছে
  • সিদ্ধান্ত বিন্দু - যে স্থানগুলি থেকে তিন বা চারটি উপলভ্য পথ রয়েছে

এই জাতীয় প্রতিটি ধাঁধাটির জন্য, একটি গ্রাফ তৈরি করতে পারে যেখানে মৃত প্রান্ত এবং সিদ্ধান্তের পয়েন্টগুলি নোড হয় এবং একটি করিডোরের সাথে একটি পথ দ্বারা সংযুক্ত প্রতিটি দুটি নোডের মধ্যে একটি প্রান্ত থাকে। চিত্র 2 এ জাতীয় নোডযুক্ত লেবেলযুক্ত একই চিত্র এবং চিত্র 3 ধাঁধা এর গ্রাফ (এএসসিআইআই এবং গ্রাফভিজ ডট স্বীকৃতিতে) দেখায়।

1 ডি ম্যাজস

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

                                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  D|  D E|G E F|  F  |  G  |    |  D|  D E|G E F|  F  |  G  |
                                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            Figure 4                         Figure 5

এই গোলকধাঁটি নেভিগেট করার নিয়ম নীচে রয়েছে। প্রতিটি পদক্ষেপ ফরোয়ার্ড ( >) বা পিছনে ( <) হিসাবে উপস্থাপিত হতে পারে । পূর্বনির্ধারিতভাবে এখানে এবং পশ্চাদপসরণ আমাদের স্বজ্ঞাত স্থানিক সচেতনতার একই অর্থ; এগিয়ে তত্ক্ষণাত ডানদিকে অবস্থিতিতে চলে যায় এবং তত্ক্ষণাত বাম দিকে পিছনে চলে যায়।

ওয়ার্প পয়েন্টগুলি এমন জায়গাগুলির প্রতিনিধিত্ব করে যা প্রতিবেশীদের সাথে সংশ্লেষকে অমূল্যভাবে পরিবর্তিত করে। যদি আপনি প্রতিবেশী থেকে কোনও ওয়ার্প পয়েন্টে আসেন তবে দুটি রেপ পয়েন্টের অবস্থানটি বদলে যাবে; যদি আপনি কোনও ওয়ার্প পয়েন্ট থেকে প্রতিবেশীর কাছে আসেন তবে সেগুলি অদলবদল করা হয় না। উদাহরণস্বরূপ, চিত্র 6 এ, 1 থেকে পিছনে সরে যাওয়া আপনাকে 2 এ নিয়ে আসে (যেহেতু 1 জি এর প্রতিবেশী, এবং আমরা প্রতিবেশী থেকে এগিয়ে চলেছি, পয়েন্ট 2 এবং @ অদলবদল হয়েছে)। 2 (ওয়ার্প পয়েন্ট জি) থেকে এগিয়ে যাওয়া আপনাকে 3 এ নিয়ে আসে (এখানে, আমরা একটি ওয়ার্প পয়েন্ট থেকে শুরু করছি, সুতরাং কোনও অদলবদল নেই)। একইভাবে, 3 থেকে পিছনে সরে যাওয়া আপনাকে @ এ নিয়ে আসে।

        54 2367    89^   @1
|  D|  D E|G E F|  F  |  G  |
                     Y     X
          Figure 6

চিত্র 6 এছাড়াও চলাচলের ক্রম ব্যবহার করে এক্স থেকে Y পর্যন্ত নেভিগেশন একটি উদাহরণ দেখায় <<>><>>>>>। এই পদক্ষেপগুলি আপনাকে 123456789^ক্রম অনুসারে লেবেলযুক্ত পয়েন্টগুলিতে নিয়ে আসে । পরবর্তী বিভাগে কোড স্নিপেট ব্যবহার করে এটি নির্দ্বিধায় অনুভব করুন।

2D কে 1 ডি তে রূপান্তর করা হচ্ছে

একটি 1 ডি গোলকধাঁধা দেওয়া, যে কোনও গ্রাফ তৈরি করতে পারে যেখানে প্রতিটি নোড হয় মৃত প্রান্ত বা একটি ওয়ার্প পয়েন্ট জোড়া এবং একটি করিডোর বরাবর সংযুক্ত যে কোনও দুটি নোডের মধ্যে প্রান্তগুলি বিদ্যমান। এই গ্রাফটি আমাদের 1 ডি এবং 2 ডি ম্যাজগুলির তুলনা করতে দেয়।

উদাহরণস্বরূপ, চিত্র 4-এ 1 ডি গোলকধাঁধাটি চিত্র 1-এ একই ধাঁধা why গ্রাফ তৈরি করতে এই লেবেলগুলি ব্যবহার করে চিত্র 7 এর গ্রাফটি আবার চিত্র 3। চিত্র 8 এই গ্রাফটি তৈরির একটি ব্রেকআউট দেখায়।

|  D|  D E|G E F|  F  |  G  |
 A   C           B   J H   I 
          Figure 7

|  D|  D E|G E F|  F  |  G  |
+ + + + + + + + + + + + + + + <- lattice points
|A  |C    |     |B   J|H   I| <- dead ends
|A D|C D E|G E F|B F J|H G I| <- all nodes (dead ends+warp points); i.e.:
                                 "where each end is either a dead end
                                  or a warp point pair"; note that each
                                  pair of warp points is the same node.
|A-D|C-D-E|G-E-F|B-F-J|H-G-I| <- corridors; note each is a connection, since
  1   2 3   4 5   6 7   8 9      "edges exist between any two nodes
                                  connected along a corridor"
   graph {                 graph {                 
     A -- D  // 1 <---->     A -- D                
     C -- D  // 2 <---->     C -- D                
     D -- E  // 3 <---->     D -- E                
     G -- E  // 4 <---->     E -- G                
     E -- F  // 5 <---->     E -- F                
     B -- F  // 6 <---->     B -- F                
     F -- J  // 7 <---->     F -- J                
     H -- G  // 8 <---->     G -- H                
     G -- I  // 9 <---->     G -- I                
   }                ^      }
    Built from      |      From Figure 3
     1D maze         `-> isomorphic mappings
                Figure 8

(নোট করুন যে প্রতিটি গ্রাফের লেবেল এবং বিন্যাস চিত্রের উদ্দেশ্যে প্রান্তিককরণের জন্য কৃত্রিমভাবে বেছে নেওয়া হয়েছিল; সাধারণত এটি বলতে গ্রাফের আইসোমরফিজম সমস্যা )।

নিম্নলিখিত স্নিপেটটি 1D গোলকধাঁটির মেকানিক্স এবং 1D গোলকধাঁধা, সমতুল্য গ্রাফ এবং 2 ডি গোলকধাঁধার মধ্যে সংযোগটি কল্পনা করতে সহায়তা করে।

আপনি যেমন এই স্নিপেটে 1 ডি গোলকধাঁধা নেভিগেট হিসাবে, আপনি স্পর্শ সর্বশেষ দুটি নোড হাইলাইট করা হয়। সমতুল্য গ্রাফ এবং 2 ডি গোলকধাঁধায় একই নোড একইভাবে হাইলাইট করা হয়।


সাধারণভাবে, যে কোনও traditionalতিহ্যবাহী 2 ডি গোলকধাঁধাটির জন্য এই ধরণের সমতুল্য 1 ডি গোলকধাঁটি তৈরি করা যেতে পারে। কিছুটা জটিল উদাহরণ চিত্র 9:

+-+-+-+-+-+-+   +-+-+-+-+-+-+                   graph {
| |   |   | |   |A|   |   |B|   A         B       A -- D
+ + + + + + +   + + + + + + +    \       /        C -- D
|   | | |   |   |   | | |   |     \     /         D -- E
+-+-+ + +-+-+   +-+-+ + +-+-+      \   /          B -- E
|           |   |C   D E    |   C---D-E           E -- F
+-+-+-+ +-+ +   +-+-+-+ +-+ +         |\          E -- I
|         | |   |      F  | |     .---F \         F -- G
+ +-+-+-+ + +   + +-+-+-+ + +   .'   /   \        G -- H
| |       | |   |G|H      |I|   G H-'     I       H -- I
+-+-+-+-+-+-+   +-+-+-+-+-+-+     (ascii)       } // (graphviz dot)
   Figure 9       Figure 10             Figure 11

|  D|  D E  |F E  |  F  |       |  D|  D E  |F E  |  F  |
                                 A   C     I     B G   H
      Figure 12                       Figure 13

এই গোলকধাঁটির চারটি পথ সহ একটি নোড রয়েছে (চিত্র 10-এ)। চিত্র 11 এর গ্রাফটি দেখায়। চিত্র 12 হ'ল সমান 1 ডি গোলকধাঁধা; চিত্র 13 এর সাথে চিত্র 11 এর সাথে তুলনা করতে মৃত প্রান্তগুলির লেবেলগুলির সাথে একই ধাঁধাটি দেখায়।

চ্যালেঞ্জ

ইনপুট হিসাবে একটি 2 ডি ধাঁধাঁ দেওয়া দেওয়া, একটি ফাংশন বা প্রোগ্রাম লিখুন যা 2 ডি গোলকধাঁধাটি ওয়ার্প পয়েন্টগুলির সাথে 1 ডি গোলকধাঁধায় রূপান্তর করে। ওয়ার্প পয়েন্টগুলি প্রতিটি ক্ষেত্রে 52 টি অক্ষরের ব্যবহার করতে পারে।

ইনপুট গ্যারান্টি দেয় (যদি এর কোনওটি যদি ইনপুটটিতে পূরণ না হয় তবে আপনাকে এটি মোকাবেলা করতে হবে না):

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

আউটপুট ফরমেট:

  1. আপনার আউটপুটটি 1 ডি ধাঁধা দেখানো একক লাইন হওয়া উচিত ।
  2. আপনার আউটপুটে কোনও শীর্ষস্থানীয় / চলমান সাদা স্থান থাকতে হবে; ব্যাতিক্রমী একটি নতুন লাইন ঠিক আছে।
  3. প্রথম অক্ষর এবং তারপরে অন্যান্য প্রতিটি চরিত্র হ'ল জাল পয়েন্ট।
  4. সমস্ত দেয়াল জাল পয়েন্টে থাকা উচিত; এবং তাদের মধ্যে সমস্ত ওয়ার্প পয়েন্ট।
  5. আপনার 1 ডি গোলকধাঁধার গ্রাফটি 2 ডি গোলকোষের গ্রাফের সমতুল্য হওয়া উচিত।
  6. আপনার 1 ডি ম্যাজগুলি অবশ্যই কমপ্যাক্ট হওয়া উচিত; সমস্ত নন-জাল পয়েন্টগুলি অবশ্যই মৃত প্রান্তে (অর্থাত্ দেওয়াল সংলগ্ন) বা ওয়ার্প পয়েন্ট হতে হবে।
  7. শুধুমাত্র অক্ষর আপনার আউটপুটে ওয়ার্প পয়েন্ট হতে হবে। প্রতিটি ওয়ার্প পয়েন্ট লাইনে ঠিক দু'বার ঘটে।

উদাহরণ:

|  D|  D E|G E F|  F  |  G  | <- (1,2) The single line output
+ + + + + + + + + + + + + + + <- lattice point spacing... (3) 
                                 (4,6) lattice points are all walls or spaces
                                 (5) See Figure 8
                                 (7) D, E, F, G appear twice; no other labels

এটি কোড-গল্ফ। বিজয়ী হ'ল সর্বনিম্ন বাইট সহ সঠিক নন-লুফোল জমা।

পরীক্ষামূলক

এই চ্যালেঞ্জের জন্য কোনও পরীক্ষার কেস নেই, যেহেতু কোনও অনিয়ন্ত্রিত গোলকধাঁধার জন্য প্রচুর সংখ্যক সঠিক আউটপুট রয়েছে।

আমি অবশ্য সি ++ এ একটি পরীক্ষক তৈরি করেছি (এই পরীক্ষক গ্রাফ ক্যানোনিকালাইজেশনের মাধ্যমে উভয় সমাধান গ্রাফ করে )।

এছাড়াও সঠিক ফর্ম্যাটিংটি চিত্রিত করতে এখানে কয়েকটি উদাহরণ দেওয়া হয়েছে:

উদাহরণ 1

+-+-+-+-+-+-+
| |   |     |
+ + + + +-+-+
|   | |     |
+-+-+ +-+-+ +
|           |
+-+-+-+ +-+ +
|         | |
+ +-+-+-+ + +
| |       | |
+-+-+-+-+-+-+
->
|  D|  D E|G E F|  F  |  G  |

উদাহরণ 2

+-+-+-+-+-+-+
| |   |   | |
+ + + + + + +
|   | | |   |
+-+-+ + +-+-+
|           |
+-+-+-+ +-+ +
|         | |
+ +-+-+-+ + +
| |       | |
+-+-+-+-+-+-+
->
|  D|  D E  |F E  |  F  |

আরও উদাহরণ এখানে পাওয়া যাবে


1
আমি মনে করি না 1 ডি ম্যাজগুলির ব্যাখ্যা মোটেও পরিষ্কার ...
mbomb007

যে বেশ শান্ত. হ্যাঁ যে সাহায্য করে।
mbomb007

যদিও আপনার ইন্টারেক্টিভ স্ক্রিপ্টটি সহায়তা করেছে, এটি এখনও একটি কঠিন সমস্যা। সুতরাং আমি এটি এড়িয়ে চলেছি। এটি সম্পর্কে আমার বোঝাপড়া এখনও নিখুঁত।
mbomb007

1 ডি ধাঁধাঁর বর্ণনাটি স্কেচিযুক্ত। 1 ডি ধাঁধাঁর উল্লম্ব বারের অক্ষরগুলি এমন প্রাচীর যা আপনি অতিক্রম করতে পারবেন না তা বুঝতে 7 নম্বর পর্যন্ত আমাকে পড়তে হয়েছিল।
edc65

1
উদাহরণস্বরূপ 1 ডি ধাঁধাঁটির
স্পার

উত্তর:


3

সঙ্গে পাইথন 2 igraph , 492 369 বাইট

import igraph,string
def f(s):
 C=s.find('\n')/2;N=' ';g=igraph.Graph(0,[(i,i+j)for i in range(len(s)/(4*C+4)*C)for j in(1,C)if s[(i/C*2+1)*(2*C+2)+i%C*2+2*j+j/C*3]==N]);V=g.vs;g.d=g.degree;O='';V(_d=1)[N]=N;V(_d_gt=2)[N]=list(string.ascii_letters)
 while g.es:
    v=V(_d=1)[0];O+='|'+v[N]
    while g.d(v):w=v.neighbors()[0];g-=(v,w);v=w;O+=N+v[N]if v[N]else''
 print O+'|'

(পঞ্চম এবং ষষ্ঠ লাইন স্ট্যাক এক্সচেঞ্জ শো হিসাবে চারটি স্পেস নয়, একটি ট্যাব দিয়ে শুরু হয়))

  • কিছু পাটিগণিত পুনরায় সাজানো ছয় বাইট সংরক্ষণ করা
  • জিপের পরিবর্তে একটি স্লাইস ব্যবহার করে সাতটি বাইট সংরক্ষণ করা
  • g+=tuple(v.neighbors())পরিবর্তে তিনটি বাইট ব্যবহার করে সংরক্ষণ করা হয়েছেg.add_edge(*v.neighbors())
  • এর g-=g.es[g.incident(v)]পরিবর্তে সাতটি বাইট ব্যবহার করে সংরক্ষণ করা হয়েছেg.delete_edges(g.incident(v))
  • সংরক্ষণ করা এগারো বাইট এলিয়াসিং g.d=g.degree
  • 52 টি বাইট (!) সঞ্চিত একটি লুপ দূর করে যা সমস্ত করিডোরকে তাদের প্রতিবেশীদের মধ্যে একটি প্রান্তের সাথে ডিগ্রি -2 শীর্ষকে প্রতিস্থাপন করে সঙ্কুচিত করে। পরিবর্তে, আউটপুট লুপ কেবল এই শিখুনটিকে উপেক্ষা করে।
  • সংরক্ষিত 13 বাইট লক্ষ্য করে যে নামগুলি অর্পণ করার সময়, প্রদত্ত পুনরাবৃত্তযোগ্যগুলি খুব দীর্ঘ হলে আইগ্রাফ যত্ন করে না
  • Rসারিগুলির সংখ্যার জন্য ভেরিয়েবল না রেখে চারটি বাইট সংরক্ষণ করা হয়েছে , এর গণনাটিকে একমাত্র ব্যবহারের স্থানে নিয়ে যাওয়া
  • দুটি স্তরের স্তরের স্থানগুলির পরিবর্তে দ্বিতীয় স্তরের ইন্ডেন্টেশনটি ট্যাবগুলিতে পরিবর্তন করে সংরক্ষণ করা
  • সংরক্ষিত ছয় বাইট সাজানোর 2*(i%C)জন্য i%C*2, 2*(i/C)থেকে i/C*2, এবং (C-1)*jথেকেj*C-j
  • চারটি বাইট নামকরণ সংরক্ষণ করেছেন N='n'
  • সংরক্ষিত এক বাইট নির্ধারণের একটি অক্ষর ব্যবহার স্থান হলে <'-'বদলে ==' ', ভাবনাটি হলো এই যে শুধুমাত্র কার্যকর অক্ষর প্রদর্শিত অধীনে।
  • তখন বুঝতে পারলাম ' 'পরিবর্তে আমি ভার্টেক্স অ্যাট্রিবিউটটির নাম রাখতে পারি 'n'এবং Nউত্সের দুটি আক্ষরিক জায়গার জন্য এবং এর ==Nপরিবর্তে <'-'আরও পাঁচটি বাইট সংরক্ষণ করতে পারি

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

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

import string
import igraph
def f(s):
  C = s.find('\n')/2 # number of maze vertices in each row
  R = len(s)/(4*C+4) # number of rows
  def strpos(r, c):
    """Index of the vertex at row r, col c in the newline-delimited string s"""
    return (2*r+1)*(2*C+2) + 2*c + 1
  def vertpos(i):
    """Index of the i-th vertex in s"""
    return strpos(i/C, i%C)
  g = igraph.Graph(edges=[(i, i+(C if j else 1))
                          for i in range(R*C)
                          for j in (0, 1)
                          if s[vertpos(i)+(2*C+2 if j else 1)] == ' '])
  V = g.vs # the graph's vertex sequence
  O = ''
  V(_degree=1)['n'] = ' ' # All leaves are named space
  W = V(_degree_gt=2) # All warp points...
  W['n'] = list(string.ascii_letters[:len(W)]) # ...are named successive letters
  while g.es: # while any edges remain...
    v = V(_degree=1)[0] # find a leaf
    O += '|'+v['n'] # start a new 'block'
    while v.degree():
      w = v.neighbors()[0] # pick a neighbor
      g -= (v, w) # delete that edge
      v = w
      if v['n']: # If it's a dead end or warp point...
        O += ' '+v['n'] # ...write out the new neighbor
  print O+'|'

আপনি পাঁচটি উদাহরণ মাইজের ফলাফল দেখতে পাচ্ছেন । (দুর্ভাগ্যক্রমে, igraphট্রাই ইট অনলাইন এ উপলব্ধ নেই; এই ফলাফলগুলি সেজম্যাথক্লাউড থেকে রফতানি করা হয়েছিল ))


4

হাস্কেল - 481 405 387 বাইট

import Data.List
s&t=elemIndices s t
l=last
c!(x:y:z)=l$(y:c)!(x:z):do{[x:p,q]<-mapM([id,reverse]<*>)[[x],[y]];x&[l q];[[]!((q++p):c++z)]}
c![x]=x:[]!c
c!z=z
main=interact(\m->let{g=' '&m;
u=(\\[k|k<-g,length(v>>=(k&))==2])<$>[]!v;
v=[[x,y]|x<-g,y<-g,elem(y-x-1)[0,head$'\n'&m]];
}in '|':(u>>=(++"|").init.(>>=(:" ").toEnum.((+)<*>(+65).(*32).(`div`26)).l.(-1:).(&(nub$u>>=init.tail)))))

এটি গোলকধাঁধার ফাঁকা জায়গাগুলির একটি তালিকা তৈরি করে, স্ট্রিংয়ের সূচক অনুসারে সংখ্যাযুক্ত এবং সংলগ্ন স্পেসগুলির সমস্ত জোড়া খুঁজে পেতে এটি ব্যবহার করে। এরপরে এটি জোড়াটিকে প্রথম / শেষ উপাদানগুলির সাথে মিলের ভিত্তিতে দীর্ঘতর পয়েন্টগুলির ক্রমিকগুলিতে সেল করে এবং করিডোরগুলি সরিয়ে দেয়, যাতে প্রতিটি অনুক্রম 1 ডি বিভ্রান্তির একটি কক্ষ হয়। এরপরে কমপক্ষে একটি ঘরের অভ্যন্তরের পয়েন্টগুলি (ওয়ার্প পয়েন্টগুলি) সংশ্লিষ্ট বর্ণগুলিতে এবং বাকী স্থানগুলিতে স্থান করে ক্রমগুলি স্ট্রিংয়ে অনুবাদ করা হয়।

2D গোলকধাঁটিটি STDIN থেকে পড়ে এবং 1D গোলকধাঁধাটি STDOUT এ মুদ্রিত হয়।

সম্পাদনা: 62 কমে প্রতিস্থাপন কাপড় একটি গুচ্ছ অন্য 14 সাজানোর এবং আলগোরিদিম একটি বিট পরিবর্তন বাইট, এবং chrসঙ্গে toEnumযেমন Laikoni দ্বারা প্রস্তাবিত।

2 সম্পাদনা করুন: যুক্তিটি সহজ করে আরও 3 টি বাইট সংরক্ষণ করা হয়েছে (!), তালিকার >>=সাথে তাল মিলিয়ে চিনির 3 ব্যবহার করুন এবং কনটাক্ট ব্যবহার করে 2 ব্যবহার করুন u


আমি মনে করি প্যাটার্ন গার্ডগুলির আগে আপনার নতুন লাইন এবং স্পেসের দরকার নেই, যেমন o(x:p)q|x==last q=[q++p]|1>0=[]খুব বেশি কাজ করা উচিত।
লাইকনি

এছাড়াও toEnumকাজ করা উচিত পরিবর্তে chr, তারপর import Data.Charনেমে যেতে পারে।
লাইকনি

এবং শেষ অবধি, চ্যালেঞ্জটি কোনও প্রোগ্রাম বা ফাংশন চেয়েছে, আপনি main=interact(\m->...)ঠিক সাথে প্রতিস্থাপন করতে পারেন f m=...। অজগর উত্তরটি মারার জন্য এটি যথেষ্ট হওয়া উচিত, যদি এর অর্থ আপনার কাছে কিছু থাকে।
লাইকনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.