Dada uma lista das populações de cada estado, produz, do maior para o menor, o número de votos que esse estado obtém no colégio eleitoral.
Entrada: O primeiro número representa o número total de votos para distribuir; é seguido por uma lista e populações. Neste exemplo, abreviações para estados são usadas, mas qualquer nome que contenha letras maiúsculas e minúsculas pode ser usado. Você pode fazer isso no formato que quiser, desde que a única informação contida seja a abreviação do estado e sua população.
A entrada pode ser tomada como argumento para uma função ou da maneira que você desejar.
Exemplo (possível) de entrada: 538 [[CA 38000000], [NH 1300000] etc.]
Saída: Saída, em algum formato, o número de votos que cada estado recebe. Ordene os estados do maior para o menor. Se dois estados tiverem o mesmo número de votos, ordene pelo nome que vier primeiro em um dicionário (que vem primeiro em ordem alfabética).
Antes de encontrar o número de votos, verifique primeiro se há um estado chamado DC na lista de entradas e, se houver, dê ao estado 3 votos, independentemente de sua população. Em seguida, remova-o da lista e atribua o restante dos votos como se o DC não existisse.
O número de votos no colégio eleitoral é definido como a soma do número de senadores e representantes. Como todo estado recebe dois senadores, subtraia duas vezes o número de estados do total (538, na entrada de exemplo) para obter o número de representantes. Designe a cada estado um representante para iniciar. Em seguida, execute o seguinte processo:
Atribua a cada estado um número
A
,, definido para estarP/sqrt(2)
ondeP
está a população.Classifique os estados de acordo com seus valores de
A
.Atribua o primeiro estado (aquele com o maior
A
) mais um representante.Reatribua valores de
A
, comoA = P/(sqrt(n)*sqrt(n + 1))
, onden
é o número atual de representantes atribuídos ao estado.Volte para a etapa 2. Repita até que todos os representantes se esgotem.
Exemplo (possível) de saída: {CA: 518, NH: 20}
. A saída não precisa estar neste formato, mas deve conter as mesmas informações.
Observe que, se não for possível atribuir votos legalmente porque há menos 3*(# of states)
votos, imprima o que quiser. Você pode travar, lançar um erro etc.
Casos de teste:
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))
, onden
é o número atual de membros atribuídos ao estado". deve ser alterado para "Reatribuir valores deA
, comoA = P/(sqrt(n)*sqrt(n + 1))
, onden
é o número atual de representantes atribuídos ao estado". Isso me assustou.Respostas:
Limpo ,
263244222 bytesLigue como
Versão não destruída, programa completo (
census.icl
):fonte
JavaScript ES6,
249 bytes244 bytesCasos de teste
Crédito para @Neil por salvar 5 bytes!
fonte
.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))
economizaria um byte se funcionasse.r
é incrementado a cada vez..some
e não.map
.i
mais. Agradável!Python 2, 219 bytes
Aceita entrada como
Impressões:
fonte