Biorąc pod uwagę listę ludności każdego stanu, uzyskaj, od największej do najmniejszej, liczbę głosów, jaką państwo uzyskuje w kolegium wyborczym.
Dane wejściowe: pierwsza liczba reprezentuje całkowitą liczbę głosów do podziału; następuje lista i populacje. W tym przykładzie użyto skrótów dla stanów, ale można użyć dowolnej nazwy zawierającej wielkie i małe litery. Możesz wziąć to w dowolnym formacie, pod warunkiem, że jedyną zawartą w nim informacją jest skrót stanu i jego populacja.
Dane wejściowe można traktować jako argumenty funkcji lub w dowolny sposób.
Przykład (możliwe) dane wejściowe: 538 [[CA 38000000], [NH 1300000] etc.]
Dane wyjściowe: dane wyjściowe, w jakimś formacie, liczba głosów, jaką otrzymuje każdy stan. Uporządkuj stany od największego do najmniejszego. Jeśli dwa stany mają taką samą liczbę głosów, uporządkuj według dowolnej nazwy, która będzie pierwsza w słowniku (która jest pierwsza w kolejności alfabetycznej).
Przed znalezieniem liczby głosów najpierw sprawdź, czy na liście danych wejściowych znajduje się stan o nazwie DC, a jeśli tak, daj mu 3 głosy, niezależnie od jego populacji. Następnie usuń go z listy i przypisz resztę głosów, jakby DC nie istniał.
Liczba głosów w kolegium wyborczym jest definiowana jako suma liczby senatorów i przedstawicieli. Każdy stan otrzymuje dwóch senatorów, więc odejmij dwukrotnie liczbę stanów od sumy (538, w przykładowym danych wejściowych), aby uzyskać liczbę przedstawicieli. Przydziel każdemu stanowi jednego przedstawiciela, aby zaczął. Następnie wykonaj następujący proces:
Przypisz każdemu stanowi liczbę
A
zdefiniowaną jako miejsce, wP/sqrt(2)
którymP
znajduje się populacja.Sortuj stany według ich wartości
A
.Przypisz pierwszy stan (ten o największym
A
) jeszcze jeden reprezentatywny.Ponownie przypisz wartości
A
asA = P/(sqrt(n)*sqrt(n + 1))
, gdzie, gdzien
jest bieżąca liczba przedstawicieli przypisanych do stanu.Wróć do kroku 2. Powtarzaj, aż wszyscy przedstawiciele się skończą.
Przykład (ewentualne) Wydajność: {CA: 518, NH: 20}
. Dane wyjściowe nie muszą być w tym formacie, ale muszą zawierać te same informacje.
Pamiętaj, że jeśli nie można legalnie przypisać głosów, ponieważ głosów jest mniej niż 3*(# of states)
, wydrukuj co chcesz. Możesz upaść, wyrzucić błąd itp.
Przypadki testowe:
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
, asA = P/(sqrt(n)*sqrt(n + 1))
, gdzie, gdzien
jest bieżąca liczba członków przypisanych do stanu”. należy zmienić na „Przypisz ponownie wartościA
asA = P/(sqrt(n)*sqrt(n + 1))
, gdzie, gdzien
jest bieżąca liczba przedstawicieli przypisanych do stanu”. To mnie odrzuciło.Odpowiedzi:
Czysty ,
263244222 bajtówZadzwoń jak
Wersja bez golfa, pełny program (
census.icl
):źródło
JavaScript ES6,
249 bajtów244 bajtyPrzypadki testowe
Podziękowania dla @Neil za oszczędność 5 bajtów!
źródło
.some((t,i)=>t.a=t.p/q(++t.r)/q(t.r+1))
zaoszczędzi ci bajt, jeśli to zadziała.r
jest zwiększany za każdym razem..some
i nie.map
.i
. Miły!Python 2, 219 bajtów
Pobiera dane wejściowe jako
Wydruki:
źródło