Está na hora de contar os votos!
Hoje existem eleições locais em todo o meu país. Aqui, o número de assentos para cada parte é decidido usando o método D'Hondt . Seu objetivo é implementar um programa ou função que decida quantos assentos cada parte recebe, na menor quantidade de bytes.
Para esse método, há um número fixo de assentos a serem distribuídos, e é feito da seguinte maneira:
- Cada partido recebe um número variável, que começa com o número de votos que obteve.
- Em seguida, o primeiro assento é dado ao partido que tem o maior valor em sua variável e, em seguida, esse valor para esse partido se torna seu número total de votos dividido por
1+seats
, arredondado para baixo, ondeseats
está o número de lugares que ele já tem (portanto, depois de obter o primeiro, seus votos são divididos por 2 e 3 após obter o segundo lugar). - Depois disso, os votos dos partidos são comparados novamente. O processo continua até que todos os assentos tenham sido atribuídos.
Se o número mais alto for um empate entre duas ou mais partes, ele será resolvido aleatoriamente (deve ser aleatório, não pode ser apenas o primeiro dos dois na lista).
Entrada
Você receberá um número N
, que indicará o número de assentos disponíveis, e uma lista dos votos que cada parte recebeu, no formato que preferir. Exemplo:
25
12984,7716,13009,4045,1741,1013
Resultado
Você deve exibir uma lista dos assentos que cada parte obteve. No exemplo acima, seria algo como
8,5,9,2,1,0
Eles devem estar na mesma ordem que as partes na entrada.
Exemplos
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
Bônus
-20% de bônus se pegar o nome das partes como entrada e fornecer a saída, como por exemplo:
25
cio:12984,pcc:7716,irc:13009,icb:4045,cub:1741,bb:1013
outputs
cio:8
pcc:5
irc:9
icb:2
cub:1
bb:0
Respostas:
CJam,
35,228,828,026,4Este programa completo tem 33 bytes de comprimento e se qualifica para o bônus.
Experimente on-line no intérprete CJam .
Exemplo de execução
Como funciona
fonte
Pitão, 36 bytes - 20% = 28,8
Isso se qualifica para o bônus.
Experimente on-line: demonstração ou equipamento de teste
Explicação:
fonte
J
é desnecessário. Você pode se livrar dele e salvar 2 bytes.z
eQ
, e depois salvarCvz
emK
, poderá salvar outro byte..e
e atrapalha a contagem.UQ
.Javascript, 210 bytes
Notas:
/-~++
operador muito importante :)Exemplo de uso:
fonte
F=(N,X)=>{for(t=[o={}],[t[o[j]=0,j]=X[j]for(j in X)];N--;t[z=y[new Date%y.length]]=X[z]/-~++o[z])m=0,y=[(m=m<t[j]?t[j]:m,j)for(j in X)],y=y.filter(j=>t[j]==m);return o}
Pitão - 54 bytes
Formato de entrada (stdin):
Formato de saída (stdout):
Variáveis utilizadas:
fonte
vz
e emQ
vez deG
eZ
. Dessa forma, você salvará a tarefa comA
.Perl, 110
Espaço de entrada separado com a última contagem de assentos.
Experimente- me .
fonte