Dada una lista de las poblaciones de cada estado, el resultado, de mayor a menor, es el número de votos que ese estado obtiene en el colegio electoral.
Entrada: El primer número representa el número total de votos para distribuir; es seguido por una lista de y poblaciones. En este ejemplo, se usan abreviaturas para estados, pero se puede usar cualquier nombre que contenga letras mayúsculas y minúsculas. Puede tomar esto en cualquier formato que desee, siempre que la única información contenida sea la abreviatura del estado y su población.
La entrada puede tomarse como argumentos para una función, o de la manera que desee.
Ejemplo de entrada (posible): 538 [[CA 38000000], [NH 1300000] etc.]
Salida: Salida, en algún formato, el número de votos que obtiene cada estado. Ordena los estados de mayor a menor. Si dos estados tienen el mismo número de votos, ordene por el nombre que aparezca primero en un diccionario (que aparece primero alfabéticamente).
Antes de encontrar el número de votos, primero verifique si hay un estado llamado DC en la lista de entradas, y si lo hay, otorgue al estado 3 votos, independientemente de su población. Luego, elimínelo de la lista y asigne el resto de los votos como si DC no existiera.
El número de votos en el colegio electoral se define como la suma del número de senadores y representantes. Cada estado tiene dos senadores, así que reste dos veces el número de estados del total (538, en la entrada de ejemplo) para obtener el número de representantes. Asigne a cada estado un representante para comenzar. Luego, realice el siguiente proceso:
Asigne a cada estado un número,
A
definido para serP/sqrt(2)
dóndeP
está la población.Ordenar los estados según sus valores de
A
.Asigne el primer estado (el que tenga el más grande
A
) un representante más.Reasigne valores de
A
, comoA = P/(sqrt(n)*sqrt(n + 1))
, donden
es el número actual de representantes asignados al estado.Vuelva al paso 2. Repita hasta que todos los representantes se hayan agotado.
Ejemplo (posible) de salida: {CA: 518, NH: 20}
. La salida no tiene que estar en este formato, pero debe contener la misma información.
Tenga en cuenta que si no es posible asignar votos legalmente porque hay menos de 3*(# of states)
votos, imprima lo que quiera. Puede bloquearse, lanzar un error, etc.
Casos de prueba:
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
, comoA = P/(sqrt(n)*sqrt(n + 1))
, donden
es el número actual de miembros asignados al estado". debe cambiarse a "Reasignar valores deA
, comoA = P/(sqrt(n)*sqrt(n + 1))
, donden
es el número actual de representantes asignados al estado". Eso me echó.Respuestas:
Limpio ,
263244222 bytesLlamar como
Versión sin golf, programa completo (
census.icl
):fuente
JavaScript ES6,
249 bytes244 bytesCasos de prueba
¡Crédito a @Neil por ahorrar 5 bytes!
fuente
.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))
te ahorraría un byte si funciona.r
se incrementa cada vez..some
y no.map
.i
más. ¡Agradable!Python 2, 219 bytes
Toma entrada como
Huellas dactilares:
fuente