हेक्सागोनल रॉड स्कूपलचर में आयोजित पानी


22

मेरे पास हेक्सागोनल छड़ का गुच्छा है जो एक साथ एक अजीब मूर्तिकला में चिपके हुए हैं। छड़ 1 से 99 सेंटीमीटर (सेमी) लंबी और 1 वर्ग सेमी क्रॉस-सेक्शन क्षेत्र में हैं। सभी छड़ें एक हेक्सागोनल चेहरे पर कम से कम एक अन्य रॉड से चिपकी हुई हैं। छड़ सभी उनके निचले किनारे पर संरेखित हैं।

कुछ भारी बारिश के बाद, मूर्तिकला पानी से भरा हुआ है। कितना पानी पकड़ता है?

इनपुट

आपके कार्यक्रम को इस प्रारूप में छड़ की लंबाई निर्दिष्ट करने वाले स्थानों और अंकों के जोड़े से युक्त कई लाइनों में (स्टडिन या एक फाइल के माध्यम से) पढ़ना चाहिए:

  aa  bb
cc  dd  ee
  ff  gg

प्रत्येक छड़ (जैसे यहां dd) को अधिकतम 6 आसपास की छड़ों से चिपकाया जाता है जैसा कि उदाहरणों में दिखाया गया है। गुम छड़ें छेद हैं और पानी इकट्ठा नहीं करती हैं। उदाहरण के लिए, इनपुट

  04  04
04  01  03
  04  04

निम्नलिखित मूर्तिकला का प्रतिनिधित्व करेगा:

यहां छवि विवरण दर्ज करें

केंद्र की छड़ ऊँचाई है 1(मुझे एक अच्छा कोण नहीं मिला जहाँ वह छड़ी भी दिखाई देती है)। अब उस छड़ के ऊपर का स्तंभ 2 सेमी पानी को पकड़ सकता है, इससे पहले कि वह 3दाहिनी ओर छड़ के ऊपर से बह जाए । चूंकि अन्य छड़ों में से कोई भी उनके ऊपर कोई पानी नहीं रख सकता है, इसलिए उत्तर होगा 2। यहां दो और जटिल उदाहरण दिए गए हैं:

Example 2:
55  34  45  66
  33  21  27
23  12  01  77
  36  31  74
answer = 35 (  2 on top of 21 
             +11 on top of 12
             +22 on top of 01, before everything overflows over 23)

Example 3:
        35  36  77  22                      23  32  54  24
      33  07  02  04  21                  54  07  07  07  76
    20  04  07  07  01  20              54  11  81  81  07  76
  20  67  67  22  07  01  78          54  07  81  07  81  09  76
20  67  07  67  22  22  07  44  55  54  07  81  07  07  61  07  20
  67  57  50  50  07  07  14  03  02  15  81  99  91  07  81  04
67  07  50      50  87  39  45  41  34  81  07  07  89  07  81  79
  67  07  50  50  07  07  07  27  07  27  81  07  07  79  81  78
20  67  67  07  07  07  07  99  33  46  02  81  07  07  81  01  20
  33  07  07  01  05  01  92          20  02  81  07  81  15  32
    22  07  20  20  07  20              63  02  80  81  15  32
      45  20  01  20  39                  20  15  07  15  32
        23  20  20  29  43  21  18  41  20  66  66  43  21
      90                  99  47  07  20
    50                      20  02  48
  70                          56  20
                                90

answer = 1432

उत्पादन

आपके कार्यक्रम को घन सेंटीमीटर में पानी की मात्रा देने वाले एक पूर्णांक का उत्पादन करना चाहिए।

स्कोर

आपका स्कोर आपके स्रोत कोड की बाइट गिनती है। सबसे कम जीत।

मानक कमियां हमेशा की तरह निषिद्ध हैं।

यह पहेली एक SPOJ प्रश्न से प्रेरित थी ।


4
मुझे इसे पढ़ते हुए पहले दो बार देखने में परेशानी हुई, इसलिए मैंने पहले उदाहरण के लिए आरेख और थोड़ा और स्पष्टीकरण जोड़ने की स्वतंत्रता ली। आशा है कि आप बुरा नहीं मानेंगे
मार्टिन एंडर

यह वास्तव में पानी से भरने वाली आकृतियों से जुड़ी अन्य चुनौतियों के समान है।
फ़ूजएक्सएक्सएल

2
@FUZxxl हम अन्य चुनौतियों की तरह है?
ऑप्टिमाइज़र

1
@FUZxxl मैं केवल इस चुनौती को याद करता हूं , जो बहुत अलग है।
मार्टिन एंडर

@ ऑप्टिमाइज़र यह एक समान है।
जर्गर्ब

जवाबों:


4

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

import sys
y=h=v=0;B={}
for l in sys.stdin:
 z=y;y+=2j
 while l:
    if"0"<l:B[z]=int(l[:2])
    l=l[2:];z+=1
while B:C=B;B={b:B[b]for b in B if(h<B[b])+sum(3>abs(c-b)for c in B)/7};a=C==B;h+=a;v+=a*sum(h>B[b]for b in B)
print v

STDIN के माध्यम से इनपुट पढ़ता है और STDOUT के लिए परिणाम लिखता है।

व्याख्या

हम शून्य पर शुरू करते हैं और निम्नानुसार जल स्तर बढ़ाते हैं: मान लीजिए कि जल स्तर h है , और हम 1 सेंटीमीटर पानी जोड़ना चाहते हैं। हम ऊंचाई एच या उससे कम के हेक्सागोन्स को बुलाएंगे , जो कि जाने वाले हैं (या पहले से ही) पानी के नीचे हैं, " जलमग्न ।" पानी किसी भी जलमग्न हेक्सागोन के माध्यम से फैल जाएगा जो छह पड़ोसियों से घिरा नहीं है। हम ऐसे सभी हेक्सागोन्स को खत्म करते हैं; बेशक, अब कुछ अन्य जलमग्न हेक्सागोन्स छह पड़ोसियों से कम हो सकते हैं, और उन्हें भी समाप्त करने की आवश्यकता है। हम इस फैशन को अभिसरण तक जारी रखते हैं, जब तक कि सभी शेष जलमग्न हेक्सागोन्स के पास छह पड़ोसी न हों। इस बिंदु पर हम कुल गिनती में जलमग्न हेक्सागोन (प्राप्त जल की मात्रा) को जोड़ते हैं, और जल स्तर में वृद्धि करते हैं।

आखिरकार, सभी हेक्सागोन समाप्त हो गए होंगे और हम रुक जाएंगे।


आपको -3<c-b<3 इसके बजाय का उपयोग करके किसी चरित्र को शेव करने में सक्षम होना चाहिए 3>abs(c-b)
DLosc

@ डलास आह, लेकिन वे जटिल संख्याएं हैं;)
एल

चित्त आकर्षण करनेवाला। वह नहीं पकड़ा।

2

रूबी 299

f=->i{s={}
l=i.lines
y=0
l.map{|r|x=0
r.scan(/../){s[[x,y]]=[v=$&.to_i,v<1?0:99];x+=1}
y+=1}
loop{break if s.map{|c,r|x,y=c
m = [[-1,-1],[1,-1],[-2,0],[2,0],[1,-1],[1,1]].map{|w,z|s[[x+w,y+z]]}.map{|n|n ?n[0]+n[1]:0}.min
r[1]=[0,m-r[0]].max if r[0]+r[1]>m&&r[1]>0}.none?}
s.map{|c,r|r[1]}.reduce :+}

एल्गोरिथ्म का संक्षिप्त विवरण:

  • इनपुट को पार्स करता है, और प्रत्येक रॉड के लिए फॉर्म के दो-तत्व सरणी को बचाता है [rod_height, water_height]
  • छड़ को एक हैश में रखा जाता है और उनके x, y निर्देशांक द्वारा अनुक्रमित किया जाता है
  • पानी का रिसाव वाला हिस्सा तत्काल पड़ोसियों की छड़ी / पानी की ऊंचाई को ध्यान में रखता है

थोड़ा अधिक पठनीय संस्करण यहां उपलब्ध है: http://ideone.com/cWkamV

परीक्षण के साथ ऑनलाइन गोल्फ संस्करण चलाएं: http://ideone.com/3SFjPN


scanब्लॉक तर्क लेता है। तुम सिर्फ कर सकते हैं scan(/../){...}। बजाय 'स्कैन (/../) का नक्शा {| v | ...} . (You don't need the | v | `क्योंकि अंदर scanब्लॉक आप कर सकते हैं $&, $1आदि)
जॉर्डन

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