Es ist Zeit ... die Stimmen zu zählen!
Heute finden in meinem ganzen Land Kommunalwahlen statt. Hier wird die Anzahl der Sitze für jede Partei nach der D'Hondt-Methode festgelegt . Ihr Ziel ist es, ein Programm oder eine Funktion zu implementieren, die in kürzester Zeit entscheidet, wie viele Sitze jede Partei erhält.
Für diese Methode gibt es eine feste Anzahl von zu verteilenden Plätzen. Dies geschieht folgendermaßen:
- Jeder Partei wird eine variable Nummer zugewiesen, die mit der Anzahl der abgegebenen Stimmen beginnt.
- Dann wird der erste Sitz an die Partei vergeben, die den größten Wert in ihrer Variablen hat, und dieser Wert für diese Partei ergibt sich aus der Gesamtzahl der durch dividierten Stimmen
1+seats
, abgerundet nachseats
der Anzahl der Sitze, die sie bereits hat (also nach dem Erhalt der Zunächst werden ihre Stimmen durch 2 und nach Erreichen des zweiten Sitzes durch 3 geteilt. - Danach werden die Stimmen der Parteien erneut verglichen. Der Vorgang wird fortgesetzt, bis alle Sitze zugewiesen wurden.
Wenn die höchste Zahl ein Gleichstand zwischen zwei oder mehr Parteien ist, wird sie zufällig aufgelöst (Es muss zufällig sein, es kann nicht nur die erste der beiden in der Liste sein).
Eingang
Sie erhalten eine Nummer N
, die die Anzahl der verfügbaren Plätze angibt, und eine Liste der Stimmen, die jede Partei erhalten hat, in dem von Ihnen bevorzugten Format. Beispiel:
25
12984,7716,13009,4045,1741,1013
Ausgabe
Sie sollten eine Liste der Sitze jeder Partei ausgeben. Im obigen Beispiel wäre es so etwas wie
8,5,9,2,1,0
Sie sollten in der gleichen Reihenfolge wie die Parteien in der Eingabe sein.
Beispiele
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
Bonus
-20% Bonus, wenn der Name der Partei als Eingabe genommen und in der Ausgabe angegeben wird, wie zum Beispiel:
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
Antworten:
CJam,
35,228,828,026,4Dieses vollständige Programm ist 33 Byte lang und qualifiziert sich für den Bonus.
Probieren Sie es online im CJam-Interpreter aus .
Beispiellauf
Wie es funktioniert
quelle
Pyth, 36 Bytes - 20% = 28,8
Dies qualifiziert sich für den Bonus.
Probieren Sie es online aus: Vorführ- oder Testgeschirr
Erläuterung:
quelle
J
ist unnötig. Sie können es loswerden und 2 Bytes sparen.z
undQ
speichernCvz
,K
können Sie auch ein weiteres Byte speichern..e
und die Zählung durcheinander bringen.UQ
.Javascript, 210 Bytes
Anmerkungen:
/-~++
Operator :)Beispielverwendung:
quelle
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
Eingabeformat (stdin):
Ausgabeformat (stdout):
Verwendete Variablen:
quelle
vz
undQ
anstelle vonG
undZ
. Auf diese Weise speichern Sie die Zuordnung mitA
.Perl, 110
Der Eingabebereich wird durch die Anzahl der letzten Sitzplätze getrennt.
Versuch es mit mir .
quelle