একটি রাষ্ট্র কয়টি ভোট পায়?


9

প্রতিটি রাজ্যের জনসংখ্যার একটি তালিকা দেওয়া হয়েছে, আউটপুট, সবচেয়ে বড় থেকে সর্বনিম্ন পর্যন্ত, নির্বাচনী কলেজে যে রাজ্যটি ভোট পায় তার সংখ্যা।

ইনপুট: প্রথম সংখ্যাটি বিতরণের জন্য মোট ভোটের প্রতিনিধিত্ব করে; এটি একটি তালিকা এবং জনসংখ্যা অনুসরণ করে। এই উদাহরণে, রাজ্যগুলির জন্য সংক্ষিপ্তকরণ ব্যবহৃত হয় তবে বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর যুক্ত কোনও নাম ব্যবহার করা যেতে পারে। আপনি এটিকে আপনার পছন্দ মতো যে কোনও ফর্ম্যাটে নিতে পারেন, যতক্ষণ না কেবলমাত্র তথ্যটি রাষ্ট্রের সংক্ষেপণ এবং এর জনসংখ্যা থাকে।

ইনপুট কোনও ফাংশনের আর্গুমেন্ট হিসাবে নেওয়া যেতে পারে বা আপনি যে কোনও উপায়ে চান।

উদাহরণ (সম্ভব) ইনপুট: 538 [[CA 38000000], [NH 1300000] etc.]

আউটপুট: আউটপুট, কিছু ফর্ম্যাটে, প্রতিটি রাজ্য যে ভোট দেয় তার সংখ্যা। সবচেয়ে বড় থেকে রাষ্ট্রকে অর্ডার করুন। যদি দুটি রাজ্যের সমান সংখ্যক ভোট থাকে তবে কোনও অভিধানে যেকোনও নাম প্রথমে আসবে (যেটি বর্ণানুক্রমিকভাবে প্রথম আসে) order

ভোটের সংখ্যা সন্ধান করার আগে প্রথমে ইনপুটগুলির তালিকায় ডিসি নামে কোনও রাজ্য রয়েছে কিনা তা পরীক্ষা করে দেখুন এবং সেখানে থাকলে, জনসংখ্যার নির্বিশেষে রাজ্যকে 3 টি ভোট দিন। তারপরে, এটিকে তালিকা থেকে সরান এবং বাকী বাক্য নির্ধারণ করুন যেমন ডিসির অস্তিত্ব নেই।

নির্বাচনী কলেজের ভোটের সংখ্যা সিনেটর এবং প্রতিনিধিদের সংখ্যার যোগফল হিসাবে সংজ্ঞায়িত হয়। প্রতিটি রাজ্য দুটি সিনেটর পান, সুতরাং প্রতিনিধি সংখ্যা পেতে মোট (538 উদাহরণস্বরূপ ইনপুট) থেকে রাষ্ট্রের সংখ্যা দ্বিগুণ করুন। প্রতিটি রাজ্যকে একটি প্রতিনিধি নিয়োগ শুরু করুন। তারপরে, নিম্নলিখিত প্রক্রিয়াটি সম্পাদন করুন:

  1. প্রতিটি রাজ্যের একটি সংখ্যা Aনির্ধারণ করুন , P/sqrt(2)যেখানে Pজনসংখ্যা রয়েছে তা নির্ধারিত ।

  2. রাজ্যগুলির মান অনুসারে বাছাই করুন A

  3. প্রথম রাষ্ট্রকে (সবচেয়ে বড় সহ একটি A) আরও একটি প্রতিনিধি নিয়োগ করুন।

  4. রাষ্ট্রের জন্য নির্ধারিত প্রতিনিধিদের বর্তমান সংখ্যা কোথায় A, এর মানগুলি পুনরায় বরাদ্দ করুন।A = P/(sqrt(n)*sqrt(n + 1))n

  5. ২ য় ধাপে ফিরে যান সমস্ত প্রতিনিধি শেষ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।

উদাহরণ (সম্ভাব্য) আউটপুট: {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, এর মানগুলি পুনরায় নির্ধারণ করুন ।" " রাষ্ট্রের জন্য নির্ধারিত প্রতিনিধিদের বর্তমান সংখ্যা কোথায় , এর মানগুলি পুনরায় বরাদ্দ করা উচিত" should এটা আমাকে ফেলে দেয়। A = P/(sqrt(n)*sqrt(n + 1))nAA = P/(sqrt(n)*sqrt(n + 1))n
প্যাট্রিক রবার্টস

রাজ্যের সংখ্যা ভোটের সংখ্যার অর্ধেকের বেশি হলে কী হবে?
এমএস 210

উত্তর:


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)]

অবহেলিত সংস্করণ, সম্পূর্ণ প্রোগ্রাম ( 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

জাভাস্ক্রিপ্ট ES6, 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 নাইট সংরক্ষণের জন্য @ নীলকে ক্রেডিট!


.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))যদি এটি কাজ করে তবে আপনাকে একটি বাইট বাঁচাতে হবে।
নীল

@ নীল এটি একই কাজ করে না মুল বক্তব্যটি হল যে 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)]

আমি সবসময় মজার বিষয় পাই যে পাইথনে পুরো প্রোগ্রাম লিখতে প্রায়শই কম ফাংশন লেখার চেয়ে কম বাইট হয় কারণ ইনডেন্টেশন সিনট্যাক্সের বাধ্যতামূলক অংশ হয়ে থাকে।
প্যাট্রিক রবার্টস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.