Пришло время ... подсчитать голоса!
Сегодня во всей моей стране проходят местные выборы. Здесь количество мест для каждой вечеринки определяется методом Д'Хондта . Ваша цель состоит в том, чтобы реализовать программу или функцию, которая будет определять, сколько мест получает каждая сторона, в кратчайшем количестве байтов.
Для этого метода есть фиксированное количество мест для распределения, и это делается так:
- Каждой партии присваивается переменный номер, который начинается с количества полученных голосов.
- Затем первое место отводится партии, которая имеет наибольшее значение в своей переменной, а затем это значение для этой партии становится их общим числом голосов, разделенным на
1+seats
округленное число, гдеseats
это количество мест уже есть (поэтому после получения во-первых, их голоса делятся на 2 и на 3 после получения второго места). - После этого голоса сторон снова сравниваются. Процесс продолжается до тех пор, пока не будут назначены все места.
Если наибольшее число является связующим звеном между двумя или более сторонами, оно разрешается случайным образом (оно должно быть случайным, оно не может быть просто первым из двух в списке).
вход
Вы получите номер N
, который будет указывать количество доступных мест, а также список голосов, полученных каждой партией, в любом формате, который вы предпочитаете. Пример:
25
12984,7716,13009,4045,1741,1013
Выход
Вы должны вывести список мест, которые получила каждая партия. В приведенном выше примере это было бы что-то вроде
8,5,9,2,1,0
Они должны быть в том же порядке, что и стороны на входе.
Примеры
5
3,6,1
outputs: 2,3,0
135
1116259,498124,524707,471681,359705,275007,126435
outputs: 45,20,21,19,14,11,5
бонус
Бонус -20%, если взять имя сторон в качестве входных данных и указать их в выходных данных, например:
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
Ответы:
CJam,
35,228,828,026,4Эта полная программа имеет длину 33 байта и соответствует условиям бонуса.
Попробуйте онлайн в интерпретаторе CJam .
Пример запуска
Как это устроено
источник
Pyth, 36 байт - 20% = 28,8
Это дает право на бонус.
Попробуйте онлайн: демонстрация или тестовая привязь
Объяснение:
источник
J
не нужно Вы можете избавиться от этого и сохранить 2 байта.z
иQ
, а затем сохранитьCvz
вK
, вы можете сохранить еще один байт..e
и это приводит к неправильному подсчету.UQ
.Javascript, 210 байт
Примечания:
/-~++
оператор :)Пример использования:
источник
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 байта
Формат ввода (стандартный):
Выходной формат (стандартный вывод):
Используемые переменные:
источник
vz
иQ
вместоG
иZ
. Таким образом, вы сохраните назначение с помощьюA
.Perl, 110
Входное пространство отделено количеством мест в последнюю очередь.
Попробуй меня .
источник