Сценарий
Вы живете в стране, где проводятся президентские выборы. Каждый избиратель получает один голос, и поэтому существует твердо укоренившаяся двухпартийная система. (Третьи стороны существуют, но почти не получают голосов).
Последний опрос общественного мнения показывает гонку в жару:
- 49%: Альберто Арбусто
- 49%: Хорхе Сангре
- 2%: различные несовершеннолетние кандидаты
Требования к программе
Правительство наняло вас для написания части программного обеспечения для подсчета голосов. При стандартном вводе вам будет дан неупорядоченный список голосов одного избирательного участка, по одному на строку, например:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
и после того, как он прочитал все голоса, выводит сводку о том, сколько голосов получил каждый кандидат, отсортированный в порядке убывания по количеству голосов, например:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
Закулисная часть
Вы партизанский хак, который хочет украсть выборы одного из двух основных кандидатов (вы можете выбрать, какой из них). Таким образом, ваша программа должна преднамеренно печатать неправильные подсчеты голосов с систематическим уклоном в сторону вашего любимого кандидата.
Конечно, вы должны сделать это таким образом, чтобы человек, просматривающий ваш код или его вывод, вероятно, не распознал неправильное поведение.
...you can choose which one...
Могу ли я выбрать тот, чье имя является первым?sort|uniq -c
...Ответы:
Scala
Да здравствует Альберто Арбусто!
Альберто Арбусто почти всегда выйдет немного впереди Хорхе Сангре при условии, что подано достаточно голосов (~ 10 000). Там нет необходимости вмешиваться в самих голосов.
Примечание: этот код основан на «пользовательском» пуле соединений, с которым я столкнулся в проекте. Нам потребовались недели, чтобы выяснить, почему у приложения не было постоянных соединений.
источник
Рубин
Хорхе Сангре значительно увеличит количество своих голосов (например, 492 голоса будут представлены как 754). Голоса Альберто будут сообщены точно.
источник
удар
(Соответствует ли это спецификации?)
Как всегда, это требует дополнительных мер предосторожности для обеспечения правильного вывода.
uniq -c
ставит перед каждой строкой префикс с количеством повторений. Это в основном делает всю работу.На всякий случай, если
uniq -c
что-то не так, мы теперь сортируем вывод по именам кандидатов в обратном порядке, а затем пропускаем егоuniq -f1
(не печатать дубликаты строк, игнорируя первое поле [количество голосов]), чтобы удалить дубликаты кандидатов. Наконец, мы используемsort -gr
сортировку в порядке «Общие числовые» и «Обратный» (в порядке убывания по количеству голосов).источник
C #
Первый кандидат в текстовом файле всегда победит!Это сделает Альберто Арбусто победителем!
источник
SortedDictionary
будет сортировать кандидатов в алфавитном порядке.Dictionary<TK,TV>
класса, в том виде, в котором она реализована, хранит индексы в резервном массиве реальных элементов. Объект,Dictionary<TK,TV>
из которого никогда не удаляются элементы, будет перечислять элементы в порядке их добавления; такое поведение не указано, но оно существовало достаточно долго, и я не ожидал, что MS когда-либо его изменит.С
Любит Хорхе Сангре.
При тестировании случайно сгенерированных файлов голосования, даже когда Альберто Арбусто получает на 1,4% больше фактических голосов (49,7% против 48,3% для Хорхе Сангре), мой мужчина Хорхе Сангре обычно выигрывает.
источник
питон
Подсчет голосов будет отдавать предпочтение кандидатам ближе к концу списка.
источник
tr | сед | Округ Колумбия
Это считает моего приятеля Альберто дважды каждый раз.
«О
tr
… ну, это просто необходимо, потому что компьютеры не очень хороши с заглавными буквами - лучше, если они все строчные… Да, я знаю, компьютеры сумасшедшие».ВЫХОД
Вот еще одна версия, которая дает голос Хуана Переса Хорхе Сангре:
ВЫХОД
источник
JavaScript
Последний человек в списке кандидатов всегда победит.
источник