Это выборы! Область, в которой мы находимся, реализует систему голосования, называемую мгновенным голосованием (иногда называемое альтернативным голосованием или льготным голосованием ). Каждый избиратель упорядочивает каждого кандидата от наиболее предпочтительного до наименее предпочтительного, отмечая «1» для своего наиболее предпочтительного кандидата, «2» для своего второго кандидата и так далее, пока каждый кандидат не будет пронумерован. Я позволю этой дружелюбной коале объяснить все остальное:
(Изображение редактировался оригинал от Патрика Александра , используется под CC BY-NC-SA 3.0 лицензии AU ).
Если вы предпочитаете свое мгновенное объяснение в текстовом виде, есть также статья в Википедии .
(Примечание: также возможно, хотя и маловероятно, чтобы было два или более кандидата с наименьшим количеством голосов. В этих ситуациях выберите одного из них случайным образом с равными вероятностями и исключите их.)
В этой задаче первая строка ввода представляет собой список строк, которые являются именами кандидатов на выборах. В этих примерах я использовал значения с разделителями в виде трубы, хотя не стесняйтесь настраивать формат ввода в соответствии с вашим языком.
The Omitted Anti-neutrino|Placazoa|Alexander the Awesome|Tau Not Two|Semolina Sorcerer
Далее следуют n
строки ввода, которые также являются списками строк, каждая из которых представляет один голос. Первая запись показывает, что голосует за предпочтение № 1, затем за предпочтение № 2 и т. Д. Например:
Alexander the Awesome|Semolina Sorcerer|Tau Not Two|Placazoa|The Omitted Anti-neutrino
Это будет означать, что именно этот голос будет отдан Александру в качестве первого предпочтения, Колдунья Семолины - второму, Тау, а не Два - третьему и т. д. Можно предположить, что каждый голос будет содержать каждого кандидата и что не будет ни пустых, ни неполных голосов.
Учитывая голоса в качестве входных данных, ваша программа или функция должны затем вывести победителя выборов. Вы можете найти справочную реализацию в Python 3 здесь .
Пример входов и выходов
вход
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Alexander the Awesome|Dionysius|Red Trainmen
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Portal Butter|Red Trainmen|Alexander the Awesome|Dionysius
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Portal Butter|Dionysius
Red Trainmen|Alexander the Awesome|Dionysius|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Red Trainmen|Dionysius|Portal Butter|Alexander the Awesome
Alexander the Awesome|Dionysius|Red Trainmen|Portal Butter
Dionysius|Portal Butter|Alexander the Awesome|Red Trainmen
Alexander the Awesome|Red Trainmen|Dionysius|Portal Butter
Выход
Alexander the Awesome
вход
Depressed Billy|Sighted Citrus|Frosty Fox|Electronic Accident
Frosty Fox|Sighted Citrus|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Depressed Billy|Sighted Citrus|Electronic Accident|Frosty Fox
Depressed Billy|Electronic Accident|Sighted Citrus|Frosty Fox
Electronic Accident|Frosty Fox|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Electronic Accident|Depressed Billy
Frosty Fox|Depressed Billy|Sighted Citrus|Electronic Accident
Sighted Citrus|Electronic Accident|Frosty Fox|Depressed Billy
Frosty Fox|Electronic Accident|Depressed Billy|Sighted Citrus
Sighted Citrus|Frosty Fox|Depressed Billy|Electronic Accident
Выход
Sighted Citrus
или Frosty Fox
(случайно)
вход
Вы можете получить последний набор входных данных здесь . Это одна из областей для голосования на недавних австралийских выборах, и состоит из 63 428 голосов.
Выход
Ross HART
Ответы:
Pyth - 30 байт
Будет рефакторинг это. Выводит первую строку из оставшейся части ввода.
Тестовый пакет .
источник
R ,
10199 байтПопробуйте онлайн!
Вводит в виде матрицы, где каждый столбец представляет выбор одного избирателя. Работает по рекурсии: найдите кандидата с минимальным количеством голосов, удалите все соответствующие записи в матрице, переформатируйте матрицу и повторяйте процедуру до тех пор, пока в матрице не будет только 1 строки.
Голоса на каждой итерации вычисляются путем подсчета
table
значений в верхней строке, которые являются текущими вариантами выбора каждого избирателя. Это перемешивается,sample
чтобы разорвать связи наугад.n<-dim(m)-1
дает вектор длины 2, но используется только первое значение (поэтому оно эквивалентно, но на 1 байт меньше, чемn<-nrow(m)-1
). Это значение используется дважды: сначала оно сравнивается с 0, чтобы проверить, была ли достигнута последняя итерация; во-вторых, если мы повторим, это число строк новой матрицы.источник
Python 2 , 209 байт
Попробуйте онлайн!
Вводит в виде списка списков предпочтений избирателей (строка заголовка не включена). Рандомизация в случае ничьей неприятна!
источник
Perl 5
-plF\|
, 155 байтПопробуйте онлайн!
источник
Python 2 , 200 байт
Попробуйте онлайн!
Использует идентификатор объекта массива в качестве источника «случайности».
Основано на ответе Chas Brown - у меня недостаточно репутации, чтобы комментировать!
источник