Diberikan daftar populasi masing-masing negara bagian, keluaran, dari yang terbesar hingga yang paling sedikit, jumlah suara yang diperoleh negara bagian di perguruan tinggi pemilihan.
Input: Angka pertama mewakili jumlah total suara yang akan didistribusikan; diikuti oleh daftar dan populasi. Dalam contoh ini, singkatan untuk negara digunakan, tetapi nama apa pun yang berisi huruf besar dan huruf kecil dapat digunakan. Anda dapat mengambil ini dalam format apa pun yang Anda suka, selama satu-satunya informasi yang terkandung adalah singkatan negara dan populasinya.
Masukan dapat diambil sebagai argumen untuk suatu fungsi, atau dengan cara apa pun yang Anda inginkan.
Input contoh (mungkin): 538 [[CA 38000000], [NH 1300000] etc.]
Keluaran: Keluaran, dalam beberapa format, jumlah suara yang diperoleh setiap negara bagian. Pesan negara bagian dari yang terbesar hingga yang paling kecil. Jika dua negara memiliki jumlah suara yang sama, pesanlah dengan nama apa pun yang akan didahulukan dalam kamus (yang muncul lebih dulu menurut abjad).
Sebelum menemukan jumlah suara, periksa terlebih dahulu apakah ada negara bernama DC dalam daftar input, dan jika ada, berikan negara 3 suara, terlepas dari populasinya. Kemudian, hapus dari daftar dan tetapkan sisa suara seolah-olah DC tidak ada.
Jumlah suara di perguruan tinggi pemilihan didefinisikan sebagai jumlah dari jumlah senator dan perwakilan. Setiap negara bagian mendapat dua senator, jadi kurangi dua kali jumlah negara dari total (538, dalam contoh input) untuk mendapatkan jumlah perwakilan. Tetapkan setiap negara bagian satu wakil untuk memulai. Kemudian, lakukan proses berikut:
Tetapkan setiap negara nomor
A
,, didefinisikan sebagai diP/sqrt(2)
manaP
populasi.Urutkan status menurut nilai mereka
A
.Tetapkan status pertama (satu dengan yang terbesar
A
) satu lagi perwakilan.Tetapkan kembali nilai
A
, sebagaiA = P/(sqrt(n)*sqrt(n + 1))
, di manan
jumlah perwakilan saat ini ditugaskan untuk negara.Kembali ke langkah 2. Ulangi sampai semua perwakilan kehabisan.
Contoh (mungkin) keluaran: {CA: 518, NH: 20}
. Outputnya tidak harus dalam format ini, tetapi harus mengandung informasi yang sama.
Perhatikan bahwa jika tidak mungkin untuk memberikan suara secara legal karena jumlah suara kurang dari itu 3*(# of states)
, cetak apa pun yang Anda inginkan. Anda bisa crash, melempar kesalahan, dll.
Kasus uji:
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
, sepertiA = P/(sqrt(n)*sqrt(n + 1))
, di manan
jumlah anggota saat ini ditugaskan ke negara." harus diubah menjadi "Tetapkan kembali nilaiA
, sepertiA = P/(sqrt(n)*sqrt(n + 1))
, di manan
jumlah perwakilan saat ini ditugaskan untuk negara.". Itu membuatku terlempar.Jawaban:
Bersih ,
263244222 byteSebut seperti
Versi tidak digabungkan, program lengkap (
census.icl
):sumber
JavaScript ES6,
249 byte,244 byteUji kasus
Kredit ke @Neil untuk menghemat 5 byte!
sumber
.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))
akan menghemat satu byte jika berfungsi.r
bertambah setiap kali..some
dan tidak.map
.i
lagi. Bagus!Python 2, 219 byte
Mengambil input sebagai
Cetakan:
sumber