एक राज्य को कितने वोट मिलते हैं?


9

प्रत्येक राज्य की आबादी की सूची को देखते हुए, आउटपुट, सबसे बड़ी से कम से कम, वोटों की संख्या जो राज्य को निर्वाचक मंडल में मिलती है।

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

इनपुट को एक फ़ंक्शन के तर्क के रूप में लिया जा सकता है, या किसी भी तरह से आप चाहते हैं।

उदाहरण (संभव) इनपुट: 538 [[CA 38000000], [NH 1300000] etc.]

आउटपुट: आउटपुट, कुछ प्रारूप में, प्रत्येक राज्य को वोटों की संख्या मिलती है। राज्यों को सबसे कम से कम ऑर्डर करें। यदि दो राज्यों में समान संख्या में वोट होते हैं, तो जो भी नाम से आदेश आएगा वह पहले एक शब्दकोश में आएगा (जो वर्णानुक्रम में पहले आता है)।

वोटों की संख्या का पता लगाने से पहले, पहले जांच लें कि इनपुट की सूची में DC नाम का कोई राज्य है या नहीं और अगर है, तो उसकी आबादी की परवाह किए बिना राज्य को 3 वोट दें। फिर, इसे सूची से हटा दें और बाकी वोटों को असाइन करें जैसे कि डीसी मौजूद नहीं था।

निर्वाचक मंडल में मतों की संख्या को सीनेटरों और प्रतिनिधियों की संख्या का योग माना जाता है। प्रत्येक राज्य को दो सीनेटर मिलते हैं, इसलिए प्रतिनिधियों की संख्या प्राप्त करने के लिए कुल (538 उदाहरण इनपुट में) राज्यों की संख्या से दो गुना घटाएं। शुरू करने के लिए हर राज्य को एक प्रतिनिधि सौंपें। फिर, निम्नलिखित प्रक्रिया करें:

  1. प्रत्येक राज्य को एक संख्या प्रदान करें, जहां Aपरिभाषित किया जाए कि जनसंख्या P/sqrt(2)कहां Pहै।

  2. राज्यों को उनके मूल्यों के अनुसार क्रमबद्ध करें A

  3. पहला राज्य (सबसे बड़ा वाला A) एक और प्रतिनिधि सौंपें ।

  4. की पुनः असाइन मूल्यों A, के रूप में A = P/(sqrt(n)*sqrt(n + 1))है, जहां nराज्य के लिए सौंपा प्रतिनिधि की वर्तमान संख्या है।

  5. चरण 2 पर वापस जाएँ। तब तक दोहराएं जब तक कि सभी प्रतिनिधि बाहर न निकल जाएं।

उदाहरण (संभव) आउटपुट {CA: 518, NH: 20}:। आउटपुट इस प्रारूप में नहीं है, लेकिन इसमें समान जानकारी होनी चाहिए।

ध्यान दें कि यदि कानूनी रूप से वोट डालना संभव नहीं है क्योंकि वोट से कम हैं 3*(# of states), तो आप जो चाहें प्रिंट करें। आप दुर्घटना कर सकते हैं, एक त्रुटि फेंक सकते हैं, आदि।

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

538 [['CA' 38000000], ['NH' 1300000]] --> CA: 518, NH: 20
538 [['NH' 1300000], ['CA' 38000000]] --> CA: 518, NH: 20 (must be in order from greatest to least!)
538 [['DC' 1000000], ['RH' 1]] --> RH: 535, DC: 3
100 [['A', 12], ['B', 8], ['C', 3]] --> A: 51, B: 35, C: 14
100 [['A', 12], ['B', 8], ['C', 3], ['D', 0]]: --> [49, 34, 14, 3] (yes, even states with no population get votes)
2 [['A', 1]] --> aasdfksjd;gjhkasldfj2fkdhgas (possible output)
12 [['A', 1], ['B', 2], ['C', 3], ['D', 4]] --> A: 3, B: 3, C: 3, D: 3
42 [['K', 123], ['L', 456], ['M', 789]] --> M: 23, L: 14, K: 5
420 [['K', 123], ['L', 456], ['M', 789]] --> M: 241, L: 140, K: 39
135 [['C', 236841], ['D', 55540], ['G', 70835], ['K', 68705], ['M', 278514], ['Ms', 475327], ['Nh', 141822], ['Nj', 179570], ['Ny', 331589], ['Nc', 353523], ['P', 432879], ['R', 68446], ['Sc', 206236], ['Ve', 85533], ['Vi', 630560]] --> Vi: 20, Ms: 16, P: 14, Nc: 12, Ny: 12, M: 10, C: 9, Sc: 8, Nj: 7, Nh: 6, Ve: 5, D: 4, G: 4, K: 4, R: 4

अपेक्षित आउटपुट की जांच करने और मेरे कोड की तुलना करने के बाद, वह चरण जो कहता है "के मानों को पुन: असाइन करें A, जैसे A = P/(sqrt(n)*sqrt(n + 1)), nराज्य को सौंपे गए सदस्यों की वर्तमान संख्या कहां है।" को "के मानों को पुन: निर्दिष्ट करने के लिए बदल दिया जाना चाहिए A, जैसा कि A = P/(sqrt(n)*sqrt(n + 1)), राज्य को सौंपे गए प्रतिनिधियोंn की वर्तमान संख्या कहां है ।"। कि मुझे फेंक दिया।
पैट्रिक रॉबर्ट्स

यदि राज्यों की संख्या आधे से अधिक मतों से हो तो क्या होना चाहिए?
msh210

जवाबों:


3

स्वच्छ , 263 244 222 बाइट्स

v n s=sortBy(\(a,b)(c,d).b>d)([(t,3.0)\\t<-s|fst t=="DC"]++w(n-3*(length s))[(t,1.0)\\t<-s|fst t<>"DC"])
w 0s=w 0 s=[(p,r+2.0)\\(p,r)<-s]
w n s#s=sortBy(\a b.A a>A b)s
#(p,r)=hd s
=w(n-1)[(p,r+1.0):tl s]
A((_,p),r)=p/sqrt(r*r+r)

जैसे बुलाओ

Start = v 538 [("DC", 1000000.0), ("RH", 1.0)]

Ungolfed संस्करण, पूर्ण कार्यक्रम ( census.icl):

module census

import StdEnv

Start = votes 538 [("DC", 1000000.0), ("RH", 1.0)]

votes n states
# dc = filter (((==)"DC")o fst) states
= sortBy (\(a,b)(c,d).b>d) ([(t,3.0) \\ t <- dc] ++ votes` (n-3*length states) [(t,1.0)\\t<-removeMembers states dc])
where
    votes` 0 states = map (\(p,r).(p,r+2.0)) states
    votes` n states
    # states = sortBy (\a b.A a > A b) states
    # (p,r) = hd states
    = votes` (n-1) [(p,r+1.0):tl states]

    A ((_,p),r) = p / sqrt(r*r+r)

2

जावास्क्रिप्ट ईएस 6, 249 बाइट्स 244 बाइट्स

(r,s)=>{r-=s.length*3;s=s.map(t=>({s:t[0],p:t[1],a:t[1]/(q=Math.sqrt)(2),r:1}));while(r--)(t=>t.a=t.p/q(++t.r)/q(t.r+1))(s.filter(t=>t.s!='DC').sort((a,b)=>b.a-a.a)[0]);return''+s.sort((a,b)=>(r=b.r-a.r)?r:a.s>b.s?1:-1).map(t=>t.s+':'+(t.r+2))}

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

d = (r, s) => {
  r -= s.length * 3;
  s = s.map(t => ({
    s: t[0],
    p: t[1],
    a: t[1] / (q = Math.sqrt)(2),
    r: 1
  }));
  while (r--)(t => t.a = t.p / q(++t.r) / q(t.r + 1))(s.filter(t => t.s != 'DC').sort((a, b) => b.a - a.a)[0]);
  return '' + s.sort((a, b) => (r = b.r - a.r) ? r : a.s > b.s ? 1 : -1).map(t => t.s + ':' + (t.r + 2))
};

document.write(
  '<pre>' +
  d(135, [
    ['C', 236841],
    ['D', 55540],
    ['G', 70835],
    ['K', 68705],
    ['M', 278514],
    ['Ms', 475327],
    ['Nh', 141822],
    ['Nj', 179570],
    ['Ny', 331589],
    ['Nc', 353523],
    ['P', 432879],
    ['R', 68446],
    ['Sc', 206236],
    ['Ve', 85533],
    ['Vi', 630560]
  ]) +
  '</pre>'
);

5 बाइट बचाने के लिए @Neil को श्रेय!


.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))अगर यह काम करता है तो आप एक बाइट बचा सकते हैं।
नील

@Neil वही काम नहीं करता है। मुद्दा यह है कि, 0 वां सूचकांक केवल एक ही है जिसका प्रतिनिधि गुण rहर बार बढ़ जाता है।
पैट्रिक रॉबर्ट्स

इसलिए मैंने इस्तेमाल किया .someऔर नहीं .map
नील

ओह, हाँ, 5 बाइट्स, क्योंकि आप iकिसी भी अधिक का उपयोग नहीं करते हैं । अच्छा!
नील

@ अभी मुझे एहसास हुआ कि यह ऐसे परिदृश्य के लिए काम नहीं करेगा जिसमें राज्य की आबादी 0. बराबर बाइट्स के साथ वैकल्पिक समाधान के लिए अद्यतन हो।
पैट्रिक रॉबर्ट्स

1

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

v,s=input()
n={k:1 for k in s}
v-=3*len(s)
l=lambda x:-x[1]
if'DC'in s:del s['DC']
while v:A,_=sorted([(a,s[a]/(n[a]**2+n[a])**.5)for a in s],key=l)[0];n[A]+=1;v-=1
for a in n:n[a]+=2
print sorted(list(n.items()),key=l)

के रूप में इनपुट लेता है

420,{'K':123,'L':456,'M':789}

प्रिंटों:

[('M', 241), ('L', 140), ('K', 39)]

मुझे हमेशा यह अजीब लगा कि पायथन में एक पूरा कार्यक्रम लिखना लगभग हमेशा बाइट को फ़ंक्शन लिखने की तुलना में लगभग कम होता है क्योंकि इंडेंटेशन सिंटैक्स का अनिवार्य हिस्सा होता है।
पैट्रिक रॉबर्ट्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.