Il est temps ... de compter les votes!
Aujourd'hui, il y a des élections locales dans tout mon pays. Ici, le nombre de sièges pour chaque parti est décidé en utilisant la méthode D'Hondt . Votre objectif est de mettre en œuvre un programme ou une fonction qui décidera du nombre de sièges accordés à chaque parti, dans le plus court nombre d'octets.
Pour cette méthode, il y a un nombre fixe de sièges à distribuer, et cela se fait comme suit:
- Chaque parti se voit attribuer un numéro variable, qui commence au nombre de votes qu'il a obtenu.
- Ensuite, le premier siège est attribué au parti qui a la plus grande valeur dans sa variable, puis cette valeur pour ce parti devient le nombre total de votes divisé par
1+seats
, arrondi vers le bas, oùseats
est le nombre de sièges qu'il détient déjà (donc après avoir obtenu le tout d'abord, leurs votes sont divisés par 2 et par 3 après avoir obtenu le deuxième siège). - Après cela, les votes des partis sont à nouveau comparés. Le processus se poursuit jusqu'à ce que tous les sièges aient été attribués.
Si le nombre le plus élevé est une égalité entre deux ou plusieurs parties, il est résolu au hasard (il doit être aléatoire, il ne peut pas être le premier des deux dans la liste).
Contribution
Vous recevrez un numéro N
, qui indiquera le nombre de sièges disponibles, ainsi qu'une liste des votes reçus par chaque parti, dans le format que vous préférez. Exemple:
25
12984,7716,13009,4045,1741,1013
Production
Vous devriez produire une liste des sièges obtenus par chaque parti. Dans l'exemple ci-dessus, ce serait quelque chose comme
8,5,9,2,1,0
Ils doivent être dans le même ordre que les parties en entrée.
Exemples
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
Prime
-20% de bonus si vous prenez le nom des parties en entrée et les donnez dans la sortie, comme par exemple:
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
Réponses:
CJam,
35,228,828,026,4Ce programme complet fait 33 octets de long et donne droit au bonus.
Essayez-le en ligne dans l' interpréteur CJam .
Exemple d'exécution
Comment ça fonctionne
la source
Pyth, 36 octets - 20% = 28,8
Cela donne droit au bonus.
Essayez-le en ligne: démonstration ou test harnais
Explication:
la source
J
est inutile. Vous pouvez vous en débarrasser et économiser 2 octets.z
etQ
, puis enregistrezCvz
àK
, vous pouvez enregistrer un autre octet..e
et perturber le comptage.UQ
.Javascript, 210 octets
Remarques:
/-~++
opérateur très important :)Exemple d'utilisation:
la source
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 octets
Format d'entrée (stdin):
Format de sortie (stdout):
Variables utilisées:
la source
vz
etQ
au lieu deG
etZ
. De cette façon, vous enregistrerez le devoir avecA
.Perl, 110
Espace d'entrée séparé avec le dernier nombre de sièges.
Essayez- moi .
la source