मंजिल योजना!


11

डिस्क्लेमर: इस सवाल के भीतर बताई गई कहानी पूरी तरह से काल्पनिक है, और इंट्रो प्रदान करने के उद्देश्य से पूरी तरह से आविष्कार की गई है।

मेरा एक दोस्त है जो एक वास्तुकार है, और, कोड-गोल्फ की अवधारणा और उसे इस साइट की व्याख्या करने के बाद, उन्होंने कहा कि मुझे कुछ बदलाव के लिए वास्तव में उपयोगी कोड चाहिए। मैंने उनसे पूछा कि वह क्या उपयोगी मानेंगे, और, एक वास्तुकार होने के नाते, उन्होंने जवाब दिया कि वह एक फर्श योजनाकार होने का आनंद लेंगे जिसने उन्हें एक निश्चित आकार के घर के भीतर कुछ निश्चित आकार के कमरों के लिए सभी संभव व्यवस्थाएं दीं। मुझे लगा कि मैं साबित करूंगा कि कोड-गोल्फ सब के बाद बेकार नहीं था, और उसे यह कार्यक्रम सबसे कम संख्या में बाइट्स में संभव था।

आपका कार्य:

एक प्रोग्राम या फ़ंक्शन लिखें, जब पूरे घर के आयामों वाले एक सरणी डी दिया जाता है, और एक दूसरा सरणी आर जिसमें आंतरिक कमरों के आयाम होते हैं, एएससीआईआई कला के रूप में आउटपुट, घर के अंदर कमरों के सभी संभव कॉन्फ़िगरेशन।

घर के सभी कमरों और बाहरी दीवारों का उपयोग मानक ASCII बक्से के रूप में किया जाना चाहिए | ऊर्ध्वाधर दीवारों के लिए प्रतीक, - क्षैतिज दीवारों के रूप में प्रतीक, और कोनों के लिए + प्रतीक। उदाहरण के लिए, [4,4] आयाम वाला एक घर ऐसा दिखेगा:

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

जैसा कि आप देख सकते हैं, कोनों को आयामों के एक सेट के भाग के रूप में नहीं गिना जाता है। की संख्या - या | साइड बनाने वाले वर्णों को आयामों में दी गई संख्या के बराबर होना चाहिए। कमरे दीवारें साझा कर सकते हैं, या घर के साथ दीवारें साझा कर सकते हैं। एक कमरे में छोटे कमरे नहीं हो सकते।

उदाहरण के लिए, कॉन्फ़िगरेशन

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

D = [5,8], और R = [[2,2], [2,3]] के लिए मान्य है।

इनपुट:

दो सरणियों, जिनमें से एक में दो पूर्णांक होते हैं, घर के लिए आयाम और जिनमें से दूसरे में सरणियों की एक श्रृंखला होती है, जिसमें कमरों के लिए आयाम होते हैं।

आउटपुट:

या तो तार के रूप में सभी संभव घरों की एक सरणी, या सभी संभव घरों से युक्त एक स्ट्रिंग, कुछ सुसंगत तरीके से सीमांकित। ध्यान दें कि सटीक समान कॉन्फ़िगरेशन के घुमाव केवल एक बार गिने जाने चाहिए।

परीक्षण के मामलों:

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], है ना?
HatsuPointerKun

@HatsuPointerKun, उस टाइपो को खोजने के लिए धन्यवाद। यह अब तय हो गया है।
ग्रिफ़ॉन

2
यह वास्तव में एक प्रसिद्ध तथ्य है कि आर्किटेक्ट नोटपैड में एएससीआईआई कला के साथ अपने अधिकांश डिजाइन करते हैं।
Sanchises

जवाबों:


2

पायथन 2 , 625 607 602 563 551 बाइट्स

  1. -5 बाइट्स Mr.Xcoder के लिए धन्यवाद।
  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 बाइट्स
बजे मिस्टर एक्सकोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.