अधिकतम रूप से पूर्णांक अंतराल का विस्तार करें


14

मान लीजिए कि आपको पूर्णांकों के गैर- अंतर - अंतराल अंतराल का एक सेट दिया गया है [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]। (जहाँ [a,b]पूर्णांकों का समुच्चय उससे अधिक या उसके बराबर या उससे aकम या उससे अधिक है b।)

सूचकांक में अंतराल मूल्यों Xको कवर bX - aX + 1करता है। हम इस नंबर पर कॉल करेंगे cX

यह देखते हुए कि प्रत्येक अंतराल या तो हो सकता है ...

  • अपरिवर्तित (जैसा रहता है [aX,bX]),
  • (बनने ) +द्वारा पंक्ति की संख्या की ओर दाईं ओर विस्तारित ,cX[aX,bX + cX]
  • या (बनने ) के -द्वारा पंक्ति की ओर बाईं ओर विस्तारित ,cX[aX - cX,bX]

मानों की अधिकतम संख्या क्या है जो सभी अपडेट किए गए अंतरालों के संघ द्वारा कवर किए जा सकते हैं, यह देखते हुए कि वे अभी भी सभी गैर-अन्तर्विभाजक हैं?

एक फ़ंक्शन या प्रोग्राम लिखें जो फॉर्म की एक स्ट्रिंग लेता है [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]और इस अधिकतम गणना करता है। यदि कोई फ़ंक्शन लिख रहा है, तो मान लौटाएं। यदि एक पूर्ण कार्यक्रम लिख रहा है, तो इनपुट के लिए स्टड का उपयोग करें और मान को प्रिंटआउट के लिए प्रिंट करें (या निकटतम विकल्पों का उपयोग करें)।

आप मान सकते हैं कि सभी मान सामान्य हस्ताक्षरित 32-बिट पूर्णांक सीमाओं के भीतर हैं और यह सभी सूचकांकों के लिए aXकम या बराबर है । अंतराल किसी भी क्रम में हो सकता है, वे जरूरी नहीं कि हमेशा बढ़ रहे हैं। उन्हें उपरोक्त प्रारूप में एक स्ट्रिंग के रूप में दिया जाना चाहिए। स्ट्रिंग खाली हो सकती है, जिस स्थिति में उत्तर 0 होगा।bXX

बाइट्स में सबसे कम सबमिशन जीतता है।

उदाहरण

अगर इनपुट [-3,0],[1,2],[4,9]22 थे , तो आउटपुट 22 होगा। बीच के अंतराल का विस्तार करने के लिए कोई जगह नहीं है, इसलिए इसे अपरिवर्तित रहना चाहिए। बाएं और दाएं अंतराल को क्रमशः [-7,0]और बढ़ाया जा सकता [4,15]है। के मिलन [-7,0]और [1,2]और [4,15]3. 22 मूल्यों है कि सिवाय से -7 से 15 सभी मूल्यों, शामिल हैं।


3
क्या हम इनपुट के लिए अपनी भाषा के सरणियों का मूल स्ट्रिंग प्रतिनिधित्व का उपयोग कर सकते हैं, या क्या यह बिल्कुल इस प्रारूप में होना चाहिए?
मार्टिन एंडर

@ MartinBüttner No. आपको इस सटीक प्रारूप का उपयोग करने की आवश्यकता है। (मुझे पता है कि एक दोधारी तलवार की तरह है, लेकिन यह जिस तरह से चला जाता है।)
केल्विन के शौक

क्या आप दोनों तरफ दिए गए अंतराल का विस्तार कर सकते हैं? उदाहरण के लिए, [5,6]बन सकता है [3,8](6 के उत्तर के लिए), या यह सिर्फ [5,8]या [3,6](4 के उत्तर के लिए) हो सकता है?
माउंटन व्यूमार्क २ 28'१५ को २:५१

@MtnViewMark नहीं। उन्हें केवल एक तरफ से बढ़ाया जा सकता है (या बिलकुल नहीं)
केल्विन के

जवाबों:


4

हास्केल, 145 बाइट्स

import Data.List
x=maximum.map length.filter(nub>>=(==)).map concat.sequence.map(\[a,b]->[[2*a-b-1..b],[a..b],[a..2*b-a+1]]).read.('[':).(++"]")

नमूना चलता है:

λ: x ""
0

λ: x "[5,6]"
4

λ: x "[-3,0],[1,2],[4,9]"
22

1

आर, 282 278 269 247

यह वास्तव में स्ट्रिंग इनपुट के साथ काम कर रहा है। मुझे संदेह है कि मैं इसे बेहतर तरीके से पूरा कर सकता हूं, लेकिन फिलहाल समय से बाहर चला गया।

f=function(s){i=matrix(strtoi(strsplit(gsub('[^0-9,-]','',s),',')[[1]]),nrow=2);l=0;if((a<-length(b<-order(i[1,])))>0){if(a>1)i=i[,b];l=diff(i[,1:a])+1;x=c(t(i));for(n in 1:a)if(n==1|n==a|x[n]-l[n]>x[n+a-1]|x[n+a]+l[n]<x[n+1])l[n]=l[n]*2;};sum(l)}

अनिवार्य रूप से विचार है

  • स्ट्रिंग में ले जाएं और इसे 2 पंक्ति मैट्रिक्स में बदल दें
  • सुनिश्चित करें कि यह सही क्रम में है
  • प्रत्येक स्तंभ के लिए अंतरों पर काम करें
  • पहले और आखिरी अंतर को दोगुना करें
  • मध्य अंतर को दोगुना करें यदि उनके पास पिछले या अगले के लिए एक अंतर है जो काफी बड़ा है
  • मतभेद का योग लौटाएं

संपादित करें: एहसास हुआ कि मैंने मूल रूप से वर्णों को गलत तरीके से समझा, फिर कुछ चीजों को शेव करने के लिए कुछ चीजों को फिर से व्यवस्थित किया।

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