दो सूचियों का अनसुचित प्रमुखीकरण


13

परिभाषा

एक वेक्टर एक युक्त n तत्वों के लिए कहा है majorize या हावी एक वेक्टर के साथ n तत्वों iff सभी मूल्यों के लिए k ऐसी है कि 1 ≤ कश्मीरn , के पहले तत्व की राशि एक के माध्यम से कश्मीर की वें तत्व एक अधिक है से या के माध्यम से पहली की राशि के बराबर कश्मीर वें के तत्वों , जहां v का प्रतिनिधित्व करता है वेक्टर v अवरोही क्रम में सॉर्ट।

अर्थात्,

                          a_1 >= b_1
                    a_1 + a_2 >= b_1 + b_2
              a_1 + a_2 + a_3 >= b_1 + b_2 + b_3
                              ...
      a_1 + a_2 + ... + a_n-1 >= b_1 + b_2 + ... + b_n-1
a_1 + a_2 + ... + a_n-1 + a_n >= b_1 + b_2 + ... + b_n-1 + b_n

जहां एक और घटते क्रम में क्रमबद्ध कर रहे हैं।

इस चुनौती के उद्देश्य के लिए, हम एक सामान्यीकरण के मामूली उपयोग का उपयोग करेंगे: हम कहेंगे कि एक सूची दूसरे की एक अनसुलझी प्रमुखीकरण है यदि उपरोक्त सभी असमानताएँ एक और बी को छांटे बिना सही हैं । (यह, ज़ाहिर है, गणितीय रूप से बेकार है, लेकिन चुनौती को और अधिक दिलचस्प बना देता है।)

चुनौती

दो अलग-अलग सूचियों में से एक इनपुट को देखते हुए एक और के माध्यम से 255 (सम्मिलित) रेंज 0 में पूर्णांक, लंबाई के दोनों सूचियों n ≥ 1, उत्पादन पहली सूची है कि क्या दूसरा (बिना क्रमबद्ध-majorizes एक > ), दूसरे unsorted- पहले ( b > a ) को बढ़ाता है , और न ही।

आपको वैकल्पिक रूप से इनपुट के रूप में प्रदान की जाने वाली दो सूचियों की लंबाई की आवश्यकता हो सकती है। आउटपुट हमेशा तीन अलग-अलग मूल्यों में से एक होना चाहिए, लेकिन मान खुद भी हो सकते हैं जो आप चाहते हैं (कृपया निर्दिष्ट करें कि कौन से मान एक > बी , बी > , और न ही आपके उत्तर में दर्शाते हैं )।

टेस्ट मामलों के लिए एक > बी :

[255] [254]
[3,2,1] [3,1,2]
[6,1,5,2,7] [2,5,4,3,7]

B > a : के लिए टेस्ट केस

[9,1] [10,0]
[6,5,4] [7,6,5]
[0,1,1,2,1,2] [0,1,2,1,2,1]

बिना किसी प्रमुखता के परीक्षण के मामले:

[200,100] [150,250]
[3,1,4] [2,3,3]
[9,9,9,9,9,0] [8,8,8,8,8,9]

क्या हम इनपुट के रूप में 2-कॉलम सरणी ले सकते हैं?
लुइस मेंडू

1
@LuisMendo हाँ, इनपुट किसी भी प्रारूप में हो सकता है जो अतिरिक्त जानकारी को एन्कोड नहीं करता है।
दरवाज़े

जोड़े की एक सरणी स्वीकार्य होगी?
डेनिस

जवाबों:


6

जेली , 10 8 6 बाइट्स

2 बाइट्स @orlp की बदौलत।

2 बाइट्स @ डेनिस का धन्यवाद।

_+\ṠQS

इसे ऑनलाइन आज़माएं!

1के लिए a>b, -1के लिए a<b, 0कोई majorization के लिए।

_+\ṠQS

_       Difference (vectorized)
 +\     Cumulative sum.
   Ṡ    Sign of every difference
    Q   Deduplicate
     S  Sum

यदि दोनों 1और -1वर्तमान थे (कुछ संचयी रकम बड़ी है, कुछ छोटी है), तो अंतिम चरण का उत्पादन होगा 0


3

ngn / apl, 11 बाइट्स

{+/∪×+\⍺-⍵}

@ लीक नन के उत्तर में विधि के आधार पर ।

दो सूचियों A और B को देखते हुए , प्रत्येक मान के बीच अंतर पाएं, या C = A - B को दें । फिर, C के संचयी योगों को खोजें और प्रत्येक का चिन्ह लें। अनूठे संकेत मानों का योग परिणाम होगा। यदि A > B , परिणाम 1 है, यदि A < B परिणाम -1 है, और यदि कोई बहुमत नहीं है तो परिणाम 0 है।

इसे ऑनलाइन आज़माएं।


3

जूलिया, 30 बाइट्स

a^b=sum(sign(cumsum(a-b))∪0)

@Dennis के लिए धन्यवाद 4 बाइट्स सहेजे गए!


जूलिया के किस संस्करण में आपने यह परीक्षण किया?
डेनिस

उफ़: पीआई को लगता है कि यह काम करना चाहिए।
मामा फन रोल

1
वास्तव में। a^b=sum(sign(cumsum(a-b))∪0)कुछ बाइट्स बचाता है।
डेनिस

2

पायथन 3.5, 85 बाइट्स:

lambda*e:[all(sum(g[:k])>=sum(h[:k])for k in range(1,-~len(h)))for g,h in[e,e[::-1]]]

एक अनाम मेमने का कार्य। रिटर्न [True,False]अगर a>b, [False,True]अगर b>a, या [False,False]उन में से कोई भी सही हैं। मुझे उम्मीद है कि यह ठीक है।

यह ऑनलाइन की कोशिश करो! (Ideone)


2

चेडर , 118 114 बाइट्स

n->[n.map(i->i[0]-i[1]).map((j,k,l)->l.slice(0,k+1).sum).map(i->i>0?1:i<0?-1:0)].map(j->j has 1?j has-1?0:1:-1)[0]

मूल रूप से मेरे जेली उत्तर का एक बंदरगाह ।

तथ्य यह है कि फ़ंक्शन के अंदर गुंजाइश टूट गई है, जिससे फ़ंक्शन के अंदर वेरिएबल को परिभाषित करने में असमर्थता का मतलब है कि मुझे [xxx].map(i->yyy)[0]इसके बजाय करने की आवश्यकता होगी var a=xxx;yyy

इनपुट के रूप में ट्रांसपोज़्ड सरणी लेता है।

n->[n
.map(i->i[0]-i[1])                     Difference (vectorized)
.map((j,k,l)->l.slice(0,k+1).sum)      Cumulative sum.
.map(i->i>0?1:i<0?-1:0)]               Sign of every difference
.map(j->j has 1?j has-1?0:1:-1)[0]     Deduplicate and Sum

1

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

a,=b,=r={0}
for x,y in zip(*input()):a+=x;b+=y;r|={cmp(a,b)}
print sum(r)

Ideone पर इसका परीक्षण करें ।



1

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

t=r=0
for x,y in zip(*input()):t+=x-y;r|=cmp(t,0)%3
print r

आउटपुट:

  • 1 के लिये a>b
  • 2 के लिये b>a
  • 3 न तो के लिए

सूची के माध्यम से Iterates, tअंतर की चल राशि पर नज़र रखने । संख्याओं sको दो-बिट संख्या के रूप में क्या देखा गया है, यह ट्रैक करता है r: दाएं बिट में सकारात्मक और बाएं बिट में नकारात्मक। यह होता है cmp(t,0)%3, जो देता है

  • t>0+1→ १
  • t==00 → 0
  • t<0-1→ २

ले रहा है orइस और के वर्तमान मूल्य के rअद्यतन के साथ 2 बिट्स or, शून्य मान कोई प्रभाव नहीं होने के साथ।


0

जावास्क्रिप्ट (बाहरी पुस्तकालय-उपयोग करने योग्य) (123 बाइट्स)

(a,b)=>(z=(c,d)=>_.Range(1,c.length).All(x=>_.From(c).Take(x).Sum()>=_.From(d).Take(x).Sum()))(a,b)==z(b,a)?0:(z(a,b)?1:-1)

लिंक करने के लिए लिंक: https://github.com/mvegh1/Enumerable

कोड स्पष्टीकरण: वेक्टर ए और बी में पास, वैश्विक फ़ंक्शन जेड बनाएं। z 1 से पूर्णांक की एक सरणी बनाकर शुरू होगा। । सभी यह सत्यापित करेंगे कि विधेयक संबंधित प्रत्येक सदस्य के लिए सही है। वह विधेय कहता है कि एक गणना करने योग्य के रूप में लोड करने के लिए, उस श्रेणी के वर्तमान पुनरावृत्ति मूल्य के बराबर उस गणना योग्य संख्या की गणना करें, और उस राशि को योग करें। जांचें कि क्या> = सरणी "बी" से एक ही तर्क। इसलिए, हम z को a (a, b) के क्रम में कहते हैं, और तुलना करते हैं कि (b, a) के क्रम में ... यदि हम 0 पर लौटते हैं, तो यह दर्शाता है कि कोई प्रमुख नहीं है। अन्यथा, हम 1 लौटाते हैं यदि (ए, बी) सच है, और -1

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

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