Scenariusz
Mieszkasz w kraju, w którym odbywają się wybory prezydenckie. Każdy głosujący otrzymuje jeden głos, dlatego istnieje mocno zakorzeniony system dwupartyjny. (Istnieją strony trzecie, ale nie mają prawie żadnych głosów).
Najnowsze badanie opinii pokazuje wyścig w martwym upale:
- 49%: Alberto Arbusto
- 49%: Jorge Sangre
- 2%: różni drobni kandydaci
Wymagania programu
Zostałeś zatrudniony przez rząd do napisania części oprogramowania do liczenia głosów. Otrzymasz, na standardowym wejściu, nieuporządkowaną listę głosów jednego okręgu, po jednym w wierszu, w następujący sposób:
Alberto Arbusto
Jorge Sangre
Jorge Sangre
Alberto Arbusto
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
Jorge Sangre
Juan Perez
Jorge Sangre
Alberto Arbusto
Alberto Arbusto
…
i po przeczytaniu wszystkich głosów, wyświetla podsumowanie liczby głosów, jakie otrzymał każdy kandydat, posortowane w kolejności malejącej według liczby głosów, tak jak poniżej:
492 Jorge Sangre
484 Alberto Arbusto
18 Juan Perez
6 Mickey Mouse
Podstępna część
Jesteś partyzantem, który chce ukraść wybory dla jednego z dwóch głównych kandydatów (możesz wybrać, który z nich). Twój program musi więc celowo drukować nieprawidłowe liczby głosów, z systematycznym nastawieniem do twojego ulubionego kandydata.
Oczywiście musisz to zrobić w taki sposób, aby osoba oglądająca Twój kod lub jego dane wyjściowe prawdopodobnie nie rozpoznała nieprawidłowego zachowania.
...you can choose which one...
Czy mogę wybrać tego, którego imię jest pierwsze?sort|uniq -c
...Odpowiedzi:
Scala
Niech żyje Alberto Arbusto!
Alberto Arbusto prawie zawsze wyjdzie nieco przed Jorge Sangre, pod warunkiem oddania wystarczającej liczby głosów (~ 10.000). Nie ma potrzeby ingerowania w same głosy.
Uwaga dodatkowa: ten kod jest luźno oparty na „niestandardowej” puli połączeń napotkanej w projekcie. Zajęło nam tygodnie, aby dowiedzieć się, dlaczego aplikacja ciągle nie ma połączeń.
źródło
Rubin
Jorge Sangre uzyska znaczny wzrost liczby głosów (na przykład 492 głosy zostaną zgłoszone jako 754). Głosy Alberto zostaną dokładnie przedstawione.
źródło
Grzmotnąć
(Czy to odpowiada specyfikacji?)
Jak zawsze wymaga to dodatkowych środków ostrożności w celu zapewnienia prawidłowego wyniku.
uniq -c
poprzedza każdą linię liczbą wystąpień. To w zasadzie wykonuje całą pracę.Na wypadek, gdyby
uniq -c
coś poszło nie tak, sortujemy wyniki według nazw kandydatów w odwrotnej kolejności, a następnie uruchamiamy jeuniq -f1
(nie drukujemy duplikatów wierszy, ignorując pierwsze pole [liczba głosów]), aby usunąć duplikaty kandydatów. Na koniec używamysort -gr
do sortowania według „Ogólnej liczby” i „Odwrotnej” kolejności (malejącej według liczby głosów).źródło
DO#
Pierwszy kandydat w pliku tekstowym zawsze wygrywa!Dzięki temu Alberto Arbusto zwycięży!
źródło
SortedDictionary
będzie posortować kandydatów w porządku alfabetycznym.Dictionary<TK,TV>
klasy, jak zaimplementowana, przechowuje indeksy w tablicy rzeczywistych elementów. A,Dictionary<TK,TV>
z którego nigdy nie zostaną usunięte żadne elementy , wyliczy elementy w kolejności ich dodania; takie zachowanie nie jest określone, ale było wystarczająco długie, nie spodziewałbym się, że stwardnienie rozsiane kiedykolwiek to zmieni.do
Sprzyja Jorge Sangre.
W testach z losowo generowanymi plikami głosowania, nawet gdy Alberto Arbusto otrzymuje do 1,4% więcej rzeczywistych głosów (49,7% vs 48,3% dla Jorge Sangre), mój człowiek Jorge Sangre zazwyczaj wygrywa.
źródło
Pyton
Liczenie głosów faworyzuje kandydatów bliżej końca listy.
źródło
tr | sed | dc
To liczy mojego kumpla Alberto dwa razy za każdym razem.
„Och…
tr
? Cóż, jest to konieczne, ponieważ komputery nie są zbyt dobre w pisaniu wielkimi literami - lepiej, jeśli wszystkie są małe… Tak, wiem, komputery są szalone.”WYDAJNOŚĆ
Oto kolejna wersja, która daje głos Juana Pereza Jorge Sangre:
WYDAJNOŚĆ
źródło
JavaScript
Ostatnia osoba na liście kandydatów zawsze wygrywa.
źródło