¡Es hora de contar los votos!
Hoy hay elecciones locales en todo mi país. Aquí, el número de asientos para cada parte se decide utilizando el método D'Hondt . Su objetivo es implementar un programa o función que decida cuántos asientos obtiene cada parte, en la menor cantidad de bytes.
Para este método, hay un número fijo de asientos para distribuir, y se hace así:
- A cada partido se le asigna un número variable, que comienza con el número de votos que obtuvo.
- Luego, el primer asiento se otorga al partido que tiene el mayor valor en su variable y luego ese valor para ese partido se convierte en el número total de votos dividido por
1+seats
, redondeado hacia abajo, dondeseats
está el número de asientos que ya tiene (así que después de obtener el primero, sus votos se dividen por 2 y por 3 después de obtener el segundo asiento). - Después de eso, los votos de los partidos se comparan nuevamente. El proceso continúa hasta que se hayan asignado todos los asientos.
Si el número más alto es un empate entre dos o más partes, se resuelve al azar (tiene que ser aleatorio, no puede ser el primero de los dos en la lista).
Entrada
Recibirá un número N
, que indicará el número de escaños disponibles, y una lista de los votos que recibió cada parte, en el formato que prefiera. Ejemplo:
25
12984,7716,13009,4045,1741,1013
Salida
Debería generar una lista de los asientos que obtuvo cada parte. En el ejemplo anterior sería algo así como
8,5,9,2,1,0
Deben estar en el mismo orden que las partes en la entrada.
Ejemplos
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
Prima
-20% de bonificación si toma el nombre de las partes como entrada y las da en la salida, como por ejemplo:
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
Respuestas:
CJam,
35.228.828.026.4Este programa completo tiene 33 bytes y califica para el bono.
Pruébelo en línea en el intérprete de CJam .
Ejecución de ejemplo
Cómo funciona
fuente
Pyth, 36 bytes - 20% = 28.8
Esto califica para el bono.
Pruébelo en línea: demostración o prueba de arnés
Explicación:
fuente
J
es innecesario Puede deshacerse de él y guardar 2 bytes.z
yQ
, y luego guardaCvz
enK
, puede guardar otro byte..e
y estropea el recuento.UQ
.Javascript, 210 bytes
Notas:
/-~++
operador muy importante :)Ejemplo de uso:
fuente
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}
Pyth - 54 bytes
Formato de entrada (stdin):
Formato de salida (stdout):
Variables utilizadas:
fuente
vz
y enQ
lugar deG
yZ
. De esta manera guardará la tarea conA
.Perl, 110
Espacio de entrada separado con el último recuento de asientos.
Trate de mí .
fuente