মেঝে পরিকল্পনা!


11

দাবি অস্বীকার: এই প্রশ্নের মধ্যে বর্ণিত গল্পটি সম্পূর্ণ কল্পিত, এবং কেবলমাত্র একটি পরিচিতি সরবরাহের উদ্দেশ্যে উদ্ভাবিত হয়েছিল।

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

তোমার কাজ:

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

| ব্যবহার করে সমস্ত কক্ষ এবং বাড়ির বাহ্যিক প্রাচীরগুলি স্ট্যান্ডার্ড ASCII বাক্স হিসাবে গঠন করা উচিত উল্লম্ব দেয়ালের জন্য প্রতীক, - অনুভূমিক প্রাচীর হিসাবে প্রতীক এবং কোণগুলির জন্য + প্রতীক। উদাহরণস্বরূপ, মাত্রা [4,4] সহ একটি বাড়িটি দেখতে পাবেন:

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

আপনি দেখতে পাচ্ছেন, কোণগুলি মাত্রার একটি সেট অংশ হিসাবে গণনা করে না। - বা | এর সংখ্যা একটি পক্ষ তৈরির অক্ষরগুলির মাত্রাগুলিতে প্রদত্ত সংখ্যার সমান হওয়া উচিত। ঘরগুলি প্রাচীর ভাগ করে নিতে পারে বা দেয়াল ভাগ করতে পারে। একটি ঘরে নিজের মধ্যে আরও ছোট কক্ষ থাকতে পারে না।

উদাহরণস্বরূপ, কনফিগারেশন

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

ডি = [5,8], এবং আর = [[২,২], [২,৩]] এর জন্য বৈধ।

ইনপুট:

দুটি অ্যারে, যার একটিতে দুটি পূর্ণসংখ্যা, বাড়ির মাত্রা এবং অন্যটিতে কক্ষগুলির জন্য মাত্রা যুক্ত সিরিজের একটি অ্যারে রয়েছে।

আউটপুট:

হয় স্ট্রিং হিসাবে সমস্ত সম্ভাব্য বাড়ির একটি অ্যারে, বা সমস্ত সম্ভাব্য ঘর সম্বলিত একটি স্ট্রিং, কিছুটা ধারাবাহিক উপায়ে সীমায়িত হয়। মনে রাখবেন যে ঠিক একই কনফিগারেশনের ঘূর্ণনগুলি কেবল একবার গণনা করা উচিত।

পরীক্ষার কেস:

D     R                   ->   Output

[4,3] [[2,1],[4,1]]       -> +-+-+ +-+-+ +-+-+  Note that though there is an option to switch which side the [2,1] room and the [4,1] room are on, doing so would merely be rotating the house by 180 degrees, and therefore these possibilities do not count.  
                             | | | +-+ | | | |
                             +-+ | | | | | | |
                             | | | | | | +-+ |
                             | | | +-+ | | | |
                             +-+-+ +-+-+ +-+-+

[4,7] [[3,1],[4,2],[2,2]  -> +----+--+ +----+--+ +----+--+ +----+--+  There are some more possiblities I didn't feel like adding, but it's the same four again, just with the [4,2] and the [2,2] room switched.  
                             |    |  | |    |  | |    |  | |    |  |
                             |    |  | |    |  | |    |  | |    |  |
                             +---++--+ +--+-+-++ +-+--++-+ ++---+--+
                             |   |   | |  |   || | |   | | ||   |  |
                             +---+---+ +--+---++ +-+---+-+ ++---+--+

স্কোরিং:

এটি , বাইট জয়ের সর্বনিম্ন স্কোর!


মিররিং কি একই কনফিগারেশন হিসাবে গণনা করা হয়?

না। আপনাকে অবশ্যই মিররযুক্ত কনফিগারেশনগুলি পুনরুত্পাদন করতে হবে।
গ্রিফন

4
আপনার প্রথম পরীক্ষার মামলাটি মিথ্যা নয়? D = [4,2], কিন্তু আপনার বাড়ি [4,3], তাই না?
হাটসুপয়েন্টারকুন

@ হাটসুপয়েন্টারকুন, টাইপোটি খুঁজে পাওয়ার জন্য আপনাকে ধন্যবাদ। এটা এখন স্থির।
গ্রিফন

2
এটি প্রকৃতপক্ষে একটি সুপরিচিত সত্য যে স্থপতিরা নোটপ্যাডে ASCII শিল্পের সাথে তাদের নকশার বেশিরভাগ কাজ করেন।
সান্চাইজস

উত্তর:


2

পাইথন 2 , 625 607 602 563 551 বাইট

  1. মিস্টার এক্সকোডারকে -5 বাইট ধন্যবাদ thanks
  2. গভীর-অনুলিপি এড়ানো যখন -12 বাইট।
  3. কিছু তালিকা সরলকরণের সাথে -39 বাইট।
r,z=range,len
L,C=D;p,q,v,w=['+'],['|'],'*',' '
H=[p+['-']*C+p]
P=[[e[:]for e in H+[q+[w]*C+q]*L+H]]
def g(M,x,y,N):
 m=[e[:]for e in M]
 try:
  for i in r(z(N)):
   for j in r(z(N[0])):
	if v==N[i][j]and w!=M[x+i][y+j]:return[]
	m[x+i][y+j]=m[x+i][y+j]in[w,v,N[i][j]]and N[i][j]or'+'
 except:return[]
 return m
for l,c in R:
 H=[p+['-']*c+p]
 P=[g(U,x,y,[e[:]for e in H+[q+[v]*c+q]*l+H])for U in P for x in r(L+2)for y in r(C+2)]
F=[]
for m in P:
 if[e[::-1]for e in m[::-1]]not in F:F+=[m]
for m in F:
 print
 for e in m:print''.join(e).replace(v,w)

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

কিছু ব্যাখ্যা এটি একটি লোভী পদ্ধতির:

  1. প্রথম কক্ষটি বরাদ্দ করা যেতে পারে এমন সমস্ত অবস্থান সন্ধান করুন
  2. সমস্ত সম্ভাব্য অবস্থান সন্ধান করুন যেখানে ঘরের অবশিষ্ট ফাঁকা জায়গা থেকে পরবর্তী ঘর বরাদ্দ করা যেতে পারে এবং অন্যান্য কক্ষগুলির জন্য।
  3. যদি শেষ কক্ষটি সফলভাবে কোড আউটপুট কনফিগারেশন বরাদ্দ করা হয় তবে এটি কোনও পূর্ববর্তী কনফিগারেশনটির 180 °-প্রসারণ নয়।


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