তাতামিবাড়ি সলভার


10

পটভূমি

তাতামিবাড়ি নিকোলির নকশাকৃত লজিক ধাঁধা।

একটি তাতামিবাড়ির ধাঁধাটি একটি আয়তক্ষেত্রাকার গ্রিডে বাজানো হয় যার মধ্যে তিনটি বিভিন্ন ধরণের প্রতীক রয়েছে: +, -। এবং |। সমাধানকারীকে নিম্নলিখিত নিয়ম অনুসারে গ্রিডটি আয়তক্ষেত্রাকার বা বর্গক্ষেত্র অঞ্চলে ভাগ করতে হবে:

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

নীচে একটি সমাধান সহ একটি উদাহরণ ধাঁধা:

তাতামিবাড়ির ধাঁধা উদাহরণ তাতামিবাড়ির ধাঁধা সমাধান উদাহরণ

কার্য

প্রদত্ত তাতামিবাড়ির ধাঁধাটি সমাধান করুন।

ইনপুট আউটপুট

ইনপুটটি 2D গ্রিড যা প্রদত্ত তাতামিবাড়ির ধাঁধাটি উপস্থাপন করে। প্রতিটি সেল চার অক্ষরের এক রয়েছে: +, -, |, এবং আপনার পছন্দের একটি চরিত্র একটি অ-খেই সেল প্রতিনিধিত্ব করতে। পরীক্ষার ক্ষেত্রে, একটি নক্ষত্র *ব্যবহার করা হয়।

আপনি যে কোনও উপযুক্ত আউটপুট ফর্ম্যাট চয়ন করতে পারেন যা তাতামিবাড়ির ধাঁধাটির কোনও বৈধ সমাধানকে দ্ব্যর্থহীনভাবে উপস্থাপন করতে পারে। এর মধ্যে অন্তর্ভুক্ত রয়েছে তবে এটি সীমাবদ্ধ নয়: (যদি সন্দেহ হয় তবে মন্তব্যে জিজ্ঞাসা করুন))

  • 4-টিউপলগুলির একটি তালিকা, যেখানে প্রতিটি টিপলে শীর্ষ সূচক, বাম সূচক, আয়তক্ষেত্রের প্রস্থ এবং উচ্চতা (বা কোনও সমতুল্য উপস্থাপনা) অন্তর্ভুক্ত থাকে
  • ইনপুট হিসাবে একই আকারের একটি সাংখ্যিক গ্রিড, যেখানে প্রতিটি সংখ্যা একটি আয়তক্ষেত্র উপস্থাপন করে
  • স্থানাঙ্ক সেটগুলির একটি তালিকা, যেখানে প্রতিটি সেটে একটি আয়তক্ষেত্রের ঘরের সমস্ত স্থানাঙ্ককে অন্তর্ভুক্ত করে

যদি ধাঁধাটির একাধিক সমাধান থাকে তবে আপনি এর বৈধ সমাধানগুলির কোনও সংখ্যা (এক বা একাধিক) আউটপুট দিতে পারেন। ইনপুটটিতে কমপক্ষে একটি সমাধান থাকার গ্যারান্টিযুক্ত।

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

Puzzle:
|-*
*+|
*-*
Solution:
122
134
554
=====
Puzzle:
+***
**|*
*+**
***-
Solution:
1122
1122
3322
3344
======
Puzzle:
|*+*+
*****
****-
***+|
+****
Solution:
12233
12233
44444
55667
55667
=======
Puzzle:
****-**
**-**|*
*|*****
****-**
*******
**+*|**
*****+*
One possible solution:
1122222
1133344
1155544
1155544
6667744
6667788
6667788
===========
Puzzle:
*-****|+**
+*-******|
****+*****
*-******||
**++|*****
+****-|***
-****-**+*
********-*
|*+*+|****
*-*--**+*+
Solution:
1111122334
5666622334
7777822994
7777A2299B
CCDEA2299B
CCFFFFGGHH
IIIIJJGGHH
KLLMMNGGOO
KLLMMNGGPP
QQRRSSSTPP

বিধি

স্ট্যান্ডার্ড বিধি প্রযোজ্য। বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

উত্তর:


5

পাইথন 2 , 417 374 366 বাইট

ইনপুট হ'ল লাইনগুলির তালিকা, ~অ-ক্লু করার জন্য। বিন্যাসে স্ট্যাডারের একক সমাধান আউটপুট দেয় (x_start, width, y_start, height)

R=range
k=input()
X,Y=len(k[0]),len(k)
W,H=R(X),R(Y)
Q=[[]]
for q in Q:C=[(x,y)for(a,b,c,d)in q for x in(a,a+b)for y in(c,c+d)];max(map(C.count,C+W))<4>0<all(sum(w>x-s>-1<y-t<h<[c for r in k[t:t+h]for c in r[s:s+w]if'~'>c]==['+|-'[cmp(h,w)]]for(s,w,t,h)in q)==1for x in W for y in H)>exit(q);Q+=[q+[(s,w+1,t,h+1)]for s in W for w in R(X-s)for t in H for h in R(Y-t)]

এটি অনলাইন চেষ্টা করুন! প্রস্তাবিত পরীক্ষার ক্ষেত্রে এটি অত্যন্ত অদক্ষ।


Ungolfed

grid = input()
total_width = len(grid[0])
total_height = len(grid)

partitions = [[]]

for partition in partitions:
    # list the corners of all rectangles in the current partition
    corners = [(x, y)
               for (start_x, width, start_y, height) in partition
               for x in (start_x, start_x + width)
               for y in (start_y, start_y + height)]
    # if no corners appears more than three times ...
    if corners != [] and max(map(corners.count, corners)) < 4:
        # .. and all fields are covered by a single rectangle ...
        if all(
                sum(width > x - start_x > -1 < y - start_y < height
                    for (start_x, width, start_y, height) in partition) == 1
                for x in range(total_width)
                for y in range(total_height)):
            # ... and all rectangles contain a single non-~
            # symbol that matches their shape:
            if all(
                [char for row in grid[start_y: start_y + height]
                    for char in row[start_x:start_x + width] if '~' > char]
                == ['+|-'[cmp(height, width)]]
                    for (start_x, width, start_y, height) in partition):
                # output the current partition and stop the program
                exit(partition)

    # append each possible rectangle in the grid to the current partition,
    # and add each new partition to the list of partitions.
    partitions += [partition + [(start_x, width + 1, start_y, height + 1)]
                   for start_x in range(total_width)
                   for width in range(total_width - start_x)
                   for start_y in range(total_height)
                   for height in range(total_height - start_y)]

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

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