Zadanie na laboratorium 11:

Jako ostatnie małe zadanie z laboratorium, napiszemy sobie prosty program do podliczania wyników wyborów prezydenckich.

W wyborach startują kandydaci, którzy mogą reprezentować partie polityczne, bądź też być niezależni. Partia polityczna cechuje się swoją nazwą oraz niczym specjalnie więcej (powiedzmy, na potrzeby tego zadania). Kolekcja kandydatów startujących w wyborach powinna być przekazana w konstruktorze wyborów.

Dany wyborca może zostać zapytany o swój głos. Wtedy przekazuje mu się kolekcję kandydatów, a on może bądź wybrać jednego z nich i zwrócić jako wynik, bądź odmówić udziału w głosowaniu/oddać nieważny głos, czyli zwrócić null. Należy zaimplementować co najmniej 3 strategie wyborców:
 - Partyjniak: ma swoją ulubioną partię, przegląda kandydatów i wybiera losowo wybranego spośród tych, którzy reprezentują jego partię. Jeśli takiego nie ma, oddaje nieważny głos.
 - Antysystemowiec: z prawdopodobieństwem 1/2 oddaje nieważny głos, z prawdopodobieństwem 1/2 głosuje na losowo wybranego kandydata niezależnego.
 - Znudzony: zawsze oddaje nieważny głos.
Wybory powinny mieć metodę, która dostawszy kolekcję wyborców przeprowadza wybory i zapisuje w sobie wyniki. Następnie metoda toString() powinna móc zwrócić wyniki wyborów w formie tekstowej. Najpierw powinna być frekwencja (stosunek liczby głosów ważnych do wszystkich), a potem kolejno kandydaci wraz z ich wynikami procentowymi, posortowani malejąco po wynikach. Każdy kandydat powinien mieć w nawiasie swoją partię, bądź informację, że jest niezależny). Wszystkie wyniki powinny być podane z dokładnością do 2 miejsc po przecinku. Przykładowy format z zupełnie przypadkowymi przykładami jest poniżej:

Turnout 48.96%
Duda (PiS) : 34.76%
Komorowski (PO) : 33.77%
Kukiz (Independent) : 20.80%
Korwin-Mikke (Korwin) : 3.24%
Ogorek (SLD) : 2.38%
Jarubas (PSL) : 1.60%
Palikot (TR) : 1.42%
Braun (Independent) : 0.83%
Kowalski (RN) : 0.52%
Wilk (Independent) : 0.44%
Tanajno (Independent) : 0.20%

Oczywiście, proszę też napisać metodę main, która sprawdzi na prostych
przykładach, że funkcjonalność działa poprawnie. 
Termin wysyłania zadania: 24 maja, 23:59

==================================

Rzeczy, które mogą się przydać:
  - Interfejsy Map<K,V> oraz Set<V>
  - Klasy HashMap<K,V> oraz HashSet<V>
  - Interfejs Map.Entry<K,V>
  - Interfejs Comparator<T>
  - Collections.sort(), w szczególności taki z dawanym własnym komparatorem
  - String.format("...",...)