Bei einer Liste der Bevölkerungsgruppen jedes Staates wird die Anzahl der Stimmen, die dieser Staat im Wahlkollegium erhält, vom größten bis zum kleinsten ausgegeben.
Eingabe: Die erste Zahl gibt die Gesamtzahl der zu verteilenden Stimmen an. Es folgt eine Liste und Populationen. In diesem Beispiel werden Abkürzungen für Status verwendet, es kann jedoch auch ein Name verwendet werden, der Groß- und Kleinbuchstaben enthält. Sie können dies in einem beliebigen Format verwenden, sofern nur die Abkürzung des Staates und seine Grundgesamtheit enthalten sind.
Die Eingabe kann als Argument für eine Funktion oder auf eine beliebige Weise verwendet werden.
Beispiel (mögliche) Eingabe: 538 [[CA 38000000], [NH 1300000] etc.]
Ausgabe: Gibt in einem bestimmten Format die Anzahl der Stimmen aus, die jeder Staat erhält. Ordnen Sie die Staaten vom größten zum kleinsten. Wenn zwei Staaten die gleiche Anzahl von Stimmen haben, ordnen Sie nach dem Namen, der in einem Wörterbuch an erster Stelle steht (der alphabetisch an erster Stelle steht).
Bevor Sie die Anzahl der Stimmen ermitteln, überprüfen Sie zunächst, ob in der Liste der Eingaben ein Bundesstaat mit dem Namen DC vorhanden ist, und geben Sie dem Bundesstaat, falls vorhanden, unabhängig von seiner Bevölkerungszahl 3 Stimmen. Entfernen Sie es dann aus der Liste und weisen Sie den Rest der Stimmen zu, als ob DC nicht vorhanden wäre.
Die Anzahl der Stimmen im Wahlkollegium ist definiert als die Summe der Anzahl der Senatoren und Vertreter. Jeder Staat erhält zwei Senatoren. Subtrahieren Sie also die doppelte Anzahl von Staaten von der Gesamtzahl (538 in der Beispieleingabe), um die Anzahl der Vertreter zu erhalten. Weisen Sie jedem Staat einen Vertreter zu, um zu beginnen. Führen Sie dann den folgenden Vorgang aus:
Weisen Sie jedem Bundesstaat eine Nummer zu,
A
definiert alsP/sqrt(2)
woP
sich die Bevölkerung befindet.Sortieren Sie die Zustände nach ihren Werten von
A
.Weisen Sie dem ersten Staat (dem mit dem größten
A
) einen weiteren Vertreter zu.Weisen Sie die Werte von
A
as neu zuA = P/(sqrt(n)*sqrt(n + 1))
, wobein
die aktuelle Anzahl der dem Staat zugewiesenen Vertreter ist.Fahren Sie mit Schritt 2 fort. Wiederholen Sie diesen Vorgang, bis alle Vertreter aufgebraucht sind.
Beispiel (mögliche) Ausgabe : {CA: 518, NH: 20}
. Die Ausgabe muss nicht in diesem Format vorliegen, sondern muss dieselben Informationen enthalten.
Beachten Sie, dass Sie 3*(# of states)
drucken können, was immer Sie möchten , wenn es nicht möglich ist, Stimmen legal zuzuweisen, da weniger als Stimmen vorhanden sind . Sie können abstürzen, einen Fehler auslösen usw.
Testfälle:
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
, wieA = P/(sqrt(n)*sqrt(n + 1))
, won
ist die aktuelle Anzahl der Mitglieder in den Zustand zugewiesen.“ sollte in "Werte neu zuweisen vonA
, asA = P/(sqrt(n)*sqrt(n + 1))
, won
ist die aktuelle Anzahl der dem Staat zugewiesenen Vertreter " geändert werden . Das hat mich umgehauen.Antworten:
Sauber ,
263244222 BytesRufen Sie an wie
Ungolfed Version, Vollprogramm (
census.icl
):quelle
JavaScript ES6,
249 Bytes244 BytesTestfälle
Dank an @Neil für das Speichern von 5 Bytes!
quelle
.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))
würde Ihnen ein Byte sparen, wenn es funktioniert.r
jedes Mal erhöht wird..some
und nicht.map
.i
keine mehr verwendest. Nett!Python 2, 219 Bytes
Nimmt Eingabe als
Drucke:
quelle