केतन के निवासी - सबसे लंबी सड़क!


16

यह कैटन के बसने वालों का एक एंडगेम बोर्ड है:

कैटन बोर्ड

पृष्ठभूमि:

सड़कों (लंबी छड़ी के टुकड़े) और बस्तियों (और शहर) को छोटे झोपड़ियों द्वारा प्रदान किया जाता है। हम निम्नलिखित योजना का उपयोग करके इन टुकड़ों के प्लेसमेंट को एन्कोड करते हैं: ऊपर से, हमारे पास एक पंक्ति क्षैतिज कोने और किनारे हैं जहां एक सड़क रखी जा सकती है। फिर हमारे पास केवल सड़कों का एक स्तंभ है, और इसके आगे। लाल के लिए R का उपयोग करना, नारंगी के लिए O, और B के लिए नीला, और _ के लिए कुछ भी नहीं, चित्रित बोर्ड को इनकोड किया जाएगा:

________RR_R_
__R_
__RR_R_RRR_____R_
B___R
_B_________B__OO_OOR_
B__B_R
BB_BBB_____B____RR_R_
OBB_O
OO__BB_BB__OOO_OO
O_O_
_O_OOO_O_____

इस तरह एक बोर्ड आपके इनपुट स्ट्रिंग होगा। कोई भी अक्षर [A-Z]खिलाड़ी के रंग का संकेत दे सकता है, लेकिन अधिकतम चार रंग (खाली सहित) होंगे। बोर्ड को अन्यथा बसने वालों के नियमों के अनुसार वैध होने की गारंटी दी जाती है, जिसका अर्थ है:

  • प्रत्येक रंग में अधिकांश दो सन्निहित सड़क नेटवर्क होंगे, जो अन्य खिलाड़ियों की बस्तियों / शहरों (वर्टेक्स) से अलग हो सकते हैं या नहीं टूट सकते हैं। नमूना छवि के दाईं ओर लाल सड़क को तोड़ते हुए नारंगी बस्ती देखें।
    • प्रत्येक सड़क नेटवर्क को कम से कम एक निपटान की गारंटी है।
  • सभी बस्तियों और शहरों को निकटतम अन्य बस्ती / शहर से कम से कम दो किनारों की गारंटी दी जाती है (आपकी या अन्यथा)
  • एक खिलाड़ी के खेल बोर्ड में केवल 15 सड़कें हो सकती हैं।
  • कैटन उत्साही के लिए: इस समस्या के उद्देश्य के लिए बस्तियों और शहरों के बीच कोई अंतर नहीं है, इसलिए मैं इनपुट स्ट्रिंग में अंतर नहीं करता हूं।

यह सब "इनपुट" स्ट्रिंग के विनिर्देश के लिए है।

सबसे लंबी सड़क:

सेटलर्स में, खिलाड़ियों को "सबसे लंबी सड़क" होने के लिए दो जीत अंक मिलते हैं। इसे परिभाषित किया गया है: प्रारंभ बिंदु से अंत बिंदु तक सबसे लंबी सन्निहित एकल पथ (सड़कों में मापा जाता है), जो विरोधियों के निपटान या शहर से नहीं टूटा है । जब तक आप एक विशेष प्रारंभ बिंदु से एक विशेष अंत बिंदु तक मार्ग का पता लगा सकते हैं, तब तक साइकिल ठीक है। तो, 6 सड़कों के एक लूप प्लस वन रोड ब्रांचिंग की लंबाई 7 है, लेकिन विपरीत छोर पर 6 रोड लूप से दो ब्रांचिंग के साथ एक अभी भी केवल 7 के लायक है।

उदाहरण के नक्शे में, दाईं ओर लाल सड़क केवल 4 के लायक है, क्योंकि वह बोर्ड के दाईं ओर एक ऑरेंज सेटलमेंट द्वारा काट दिया गया है (इसलिए बस्तियों को बिल्कुल शामिल किया गया है)। ब्लू की लंबाई 13 की सड़क है, और ऑरेंज की लंबाई 12 की सड़क है। रेड की शीर्ष सड़क केवल 7 के लायक है, क्योंकि यह इसके बगल में दो एकल सड़कों से नहीं जुड़ती है।

आउटपुट:

सभी खिलाड़ी जिनके पास सबसे लंबी लंबाई की सड़क है (यह एक से अधिक हो सकता है यदि संबंध हैं), उसके बाद व्हॉट्सएप और / या अंडरस्कोर सीमांकित गणना आधार 10 में आधार संख्या कितनी लंबी है।

तो उदाहरण बोर्ड के लिए आउटपुट होगा:

B 13

समस्या कथन:

आप एक प्रोग्राम या फ़ंक्शन लिख सकते हैं , STDIN के माध्यम से इनपुट बोर्ड प्राप्त करता है या आपके फ़ंक्शन के लिए एक स्ट्रिंग तर्क के रूप में, जो ऊपर वर्णित आउटपुट को स्ट्रिंग के रूप में देता है या इसे STDOUT (या निकटतम विकल्प) पर प्रिंट करता है। आप वैकल्पिक रूप से आउटपुट में एक एकल अनुगामी न्यूलाइन शामिल कर सकते हैं।

यह , सबसे छोटा कार्यक्रम जीत है। मानक कमियां निश्चित रूप से प्रतिबंधित हैं


2
असली समस्या बयान: ऑरेंज खिलाड़ी एक झटका है।
corsiKa

From the top, we have a row horizontal vertices and edges where a road can be placed. Then we have a column of only roads, and so forth. मुझे यह पता लगाने में कई मिनट लगे कि इसका क्या मतलब है। आपको अधिक स्पष्ट रूप से समझाना चाहिए कि क्षैतिज पंक्तियों में बस्तियां और निपटान स्थान भी शामिल हैं।
DLosc

@ कोरसीका मेरे पास कोई है जो मुझसे पहले था!
जेरी यिर्मयाह

1
छवि में नारंगी और लाल वास्तव में समान हैं। आपको दूसरा रंग चुनना चाहिए था।
mbomb007

जवाबों:


3

पायथन 2, 445 400 बाइट्स

मैं सेटलर्स का प्रशंसक हूं, इसलिए यह चुनौती मजेदार थी।

T="^"
Z=26
A=T*52
for i in range(11):A+=(T*(i%2)*3).join(x for x in raw_input()).center(Z,T)
A+=T*52
def f(c,p=0,l=0,B=A):
 b=l;C=B[0:p]+T+B[p+1:];n=(Z,1)[p%2]
 for i in(p<1)*range(390):
    if(i/Z%2<1&i%2>0)|(i/Z%2>0&i%2<1):b=max(b,f(c,i))
 for i in(p-n,p+n)*(B[p]==c):
    for j in(i-Z,i-1,i+1,i+Z)*(B[i]in c+"_"):b=max(b,f(c,j,l+1,C))
 return b
i=l=0
for x in A:
 if x<T:i=f(x)
 if i>l:c=x;l=i
print c,l

एक टैब के साथ 4 स्थानों की प्रत्येक घटना की जगह स्कोर दर्शाता है।

व्याख्या

फ़ंक्शन परिभाषा से पहले की लाइनें इनपुट पढ़ती हैं, और एक सामान्य स्ट्रिंग बोर्ड को एक एकल स्ट्रिंग चर में बनाते हैं। कार्यक्षेत्र सड़क खंडों का प्रतिनिधित्व करने वाली छोटी पंक्तियों में "^" वर्ण सम्मिलित करता है। यह "^" वर्णों के साथ बोर्ड को भी पैड करता है।

^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^________RR_R_^^^^^^^
^^^^^^_^^^_^^^R^^^_^^^^^^^
^^^^__RR_R_RRR_____R_^^^^^
^^^^B^^^_^^^_^^^_^^^R^^^^^
^^_B_________B__OO_OOR_^^^
^^B^^^_^^^_^^^B^^^_^^^R^^^
^^BB_BBB_____B____RR_R_^^^
^^^^O^^^B^^^B^^^_^^^O^^^^^
^^^^OO__BB_BB__OOO_OO^^^^^
^^^^^^O^^^_^^^O^^^_^^^^^^^
^^^^^^_O_OOO_O_____^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^

जब डिफ़ॉल्ट मापदंडों के साथ कहा जाता है, तो फ़ंक्शन किसी दिए गए रंग की सड़क की लंबाई लौटाता है। पहला लूप केवल तभी सक्रिय होता है जब स्थिति (पी) पैरामीटर की आपूर्ति की गई थी। यह प्रत्येक वैध सड़क की स्थिति में सड़क की लंबाई को पुन: खोजता है, और सबसे लंबे समय तक ट्रैक रखता है। जब स्थिति पैरामीटर पर एक सड़क होती है, तो फ़ंक्शन पुनरावर्ती रूप से एक ही रंग के आसन्न सड़कों की लंबाई जोड़ता है। बोर्ड की कार्यशील प्रति में सड़क को "~" से बदल दिया जाता है ताकि यह सुनिश्चित हो सके कि यह उन खंडों को नहीं बताता है जो पहले ही गिने जा चुके हैं।

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

इसे यहां डेमो करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.