Kolokwium
This commit is contained in:
commit
374127a327
31
Readme.md
Normal file
31
Readme.md
Normal file
@ -0,0 +1,31 @@
|
||||
## Kolokwium z programowania funkcyjnego 15.04.2024
|
||||
|
||||
Państwowa Komisja Wyborcza zwróciła się z prośbą o stworzenie w Haskellu funkcji `wybrany :: Eq a => [[a]] -> a`, która wskaże zwycięzcę wyborów na prezydenta Poznania.
|
||||
Wybory polegają na wskazaniu kandydatów w kolejności od kandydata pierwszego wyboru do kandydatów dalszych wyborów.
|
||||
Wyborcy wskazują na liście kolejno kandydatów, przy czym ich liczba może być dowolna, ale niezerowa.
|
||||
Argumentem funkcji `wybrany` jest lista złożona z wyborów każdego z wyborców, tj. lista list.
|
||||
|
||||
Procedura ustalania zwycięzcy jest następująca: Dla każdego głosu wyborcy sprawdzany jest kandydat pierwszego wyboru. Kandydat z
|
||||
najmniejszą liczbą wskazań na pierwszym miejscu jest wykluczany z głosów każdego z wyborców.
|
||||
Po tym wykluczeniu następuje kolejne sprawdzenie, który z kandydatów ma najmniejsze poprarcie jako pierwszy wybór i ten kandydat odpada.
|
||||
Procedura powtarza się dopóki nie zostanie wyłoniony jedyny kandydat, który zostaje zwycięzcą i jednocześnie wynikiem działania funkcji wybrany.
|
||||
W przypadku dwóch kandydatów o identycznym najniższym poparciu eliminowany może być dowolny z nich.
|
||||
|
||||
Zakładamy, że każdy głos jest oddany poprawnie, czyli wskazano co najmniej jednego kandydata i żaden się nie powtarza.
|
||||
Przykłady działania:
|
||||
- Dla głosów `[["Kowalski", "Nowak"],["Szymańska"],["Nowak", "Kowalski", "Szymańska"],["Szymańska", "Nowak", "Kowalski"],["Nowak"]]`
|
||||
Kowalski jest najmniej popularnym kandydatem pierwszego wyboru (1 głos)
|
||||
Po wykluczeniu Kowalskiego głosy wyglądają następująco `[["Nowak"],["Szymańska"],["Nowak", "Szymańska"],["Szymańska", "Nowak"],["Nowak"]]`
|
||||
Teraz najmniej popularnym kandydatem pierwszego wyboru jest Szymańska (2 głosy). Po jej wykluczeniu mamy
|
||||
`[["Nowak"],[],["Nowak"],["Nowak"],["Nowak"]]`
|
||||
Po odsianiu pustego głosu pozostaje jeden kandydat, który jest zwycięzcą, zatem
|
||||
`wybrany [["Kowalski", "Nowak"],["Szymańska"],["Nowak", "Kowalski", "Szymańska"],["Szymańska", "Nowak", "Kowalski"],["Nowak"]]` zwraca `Nowak`
|
||||
Inne przykłady
|
||||
- `wybrany [["Kowalski", "Nowak"],["Szymańska"],["Nowak", "Kowalski", "Szymańska"],["Szymańska", "Nowak", "Kowalski"],["Nowak"], ["Kowalski", "Szymańska"]]` może zwrócić dowolnego z nich, bo każdy ma po 2 głosy jako kandydat pierwszego wyboru
|
||||
- `wybrany [["Kowalski", "Nowak"],["Nowak", "Kowalski", "Szymańska"],["Szymańska", "Nowak", "Kowalski"],["Nowak"]]` zwraca `Nowak`
|
||||
- `wybrany [["Kowalski", "Nowak"],["Nowak", "Szymańska"],["Nowak", "Kowalski", "Szymańska"],["Szymańska", "Nowak", "Kowalski"],["Nowak"], ["Szymańska"]]` zwraca `Nowak`
|
||||
|
||||
Nie jest wymagane optymalne podejście do implementacji algorytmów.
|
||||
Należy użyć co najmniej dwukrotnie operatora `$` i dwukrotnie operatora `.`.
|
||||
Dobrym pomysłem jest przygotowanie sobie kilku funkcji pomocniczych (jedną z nich może być np. funkcja wskazująca na kandydata z najmniejszym poparciem).
|
||||
Plik ze skryptem należy wysłać mailem na [bf55466@st.amu.edu.pl](bf55466@st.amu.edu.pl) (można też załączyć link do repozytorium).
|
Loading…
Reference in New Issue
Block a user