Získať môžete max. 5 bodov za každú z úloh (spolu max. 10 bodov). Zadanie musí byť vypracované v Git repozitári, ktorý bol pre vás vytvorený (rovnaký ako pre zadanie 1).
Generovanie rodných čísel
Úloha 0.1
Vytvorte funkciu, ktorá bude generovať všetky platné rodné čísla pre zadaný dátum narodenia a pohlavie.
validBirthNumbers :: Date -> Sex -> [String]
Vygenerované rodné čísla preveďte na reťazce v tvare "xxxxxx/xxxx"
, pričom platí, že rodné číslo je platné vtedy, ak je deliteľné číslom 11.
Súbor so zadaním sa musí nazývať BirthNumbers.hs
a musí obsahovať nasledovnú hlavičku:
module BirthNumbers where
Definujte tiež tieto dátové typy pre reprezentáciu dátumu narodenia a pohlavia:
data Date = Date Int Int Int -- Year, Month, Day
deriving (Eq, Ord, Show)
data Sex = Male | Female
deriving (Eq, Show)
Poznámka
Dátumy pred rokom 1954 nie je nutnú ošetrovať.
Spracovanie výsledkov volieb
Úloha 0.2
Vytvorte funkciu pre spracovanie výsledkov volieb. Výsledky volieb nech sú zadané ako zoznam dvojíc (strany, počet hlasov). Program má vypočítať, ktoré strany prekonajú hranicu prechodu do parlamentu a koľko získajú poslaneckých mandátov.
Nech je definovaná funkcia, ktorá vypočíta výsledky volieb, teda počty poslaneckých mandátov získaných jednotlivými stranami.
electionResults :: [(Subjekt, Int)] -> [(Subjekt, Int)]
Súbor so zadaním sa musí nazývať Elections.hs
a musí obsahovať nasledovnú hlavičku:
module Elections where
Keďže okrem jednotlivých strán môžu kandidovať aj koalície, použijeme dátový typ:
data Subjekt = Strana String | Koalicia [String]
deriving (Show, Eq, Ord)
Postup výpočtu počtu poslancov je špecifikovaný vo volebnom zákone (§66, §68).
Na testovanie programu môžete použiť výsledky volieb z minulých rokov, napríklad:
elections2010 :: [(Subjekt, Int)]
elections2010 =
[ (Strana "Smer-SD", 880111),
(Strana "SDKU-DS", 390042),
(Strana "SaS", 307287),
(Strana "KDH", 215755),
(Strana "Most-Hid", 205538),
(Strana "SNS", 128490),
(Strana "SMK", 109638),
(Strana "LS-HZDS", 109480),
(Strana "SDL", 61137),
(Strana "LSNS", 33724),
(Strana "KSS", 21104),
(Strana "Unia", 17741),
(Strana "Paliho Kapurkova", 14576),
(Strana "EDS", 10332),
(Strana "ND", 7962),
(Strana "SRK", 6947),
(Strana "ZRS", 6196),
(Strana "AZEN", 3325)
]
results2010 :: [(Subjekt, Int)]
results2010 =
[ (Strana "Smer-SD", 62),
(Strana "SDKU-DS", 28),
(Strana "SaS", 22),
(Strana "KDH", 15),
(Strana "Most-Hid", 14),
(Strana "SNS", 9)
]
elections2012 :: [(Subjekt, Int)]
elections2012 =
[ (Strana "SMER-SD", 1134280),
(Strana "KDH", 225361),
(Strana "OLANO", 218537),
(Strana "Most-Hid", 176088),
(Strana "SDKU-DS", 155744),
(Strana "SaS", 150266),
(Strana "SNS", 116420),
(Strana "SMK", 109484),
(Strana "99%", 40488),
(Strana "LSNS", 40460),
(Strana "Zmena zdola", 33155),
(Strana "Strana slobodné slovo", 31159),
(Strana "LS-HZDS", 23722),
(Strana "KSS", 18583),
(Strana "Národ a spravodlivosť", 16234),
(Strana "Strana zelených", 10832),
(Strana "Právo a spravodlivosť", 10604),
(Strana "Robíme to pre deti", 8908),
(Strana "Zelení", 7860),
(Strana "Náš kraj", 4859),
(Strana "SDL", 4844),
(Strana "Obyčajní ľudia", 4320),
(Strana "Strana živnostníkov Slovenska", 3963),
(Strana "Strana občanov Slovenska", 3836),
(Strana "Strana rómskej únie na Slovensku", 2891),
(Strana "+1 Hlas", 779)
]
results2012 :: [(Subjekt, Int)]
results2012 =
[ (Strana "SMER-SD", 83),
(Strana "KDH", 16),
(Strana "OLANO", 16),
(Strana "Most-Hid", 13),
(Strana "SDKU-DS", 11),
(Strana "SaS", 11)
]
elections2016 :: [(Subjekt, Int)]
elections2016 =
[ (Strana "SMER-SD", 737481),
(Strana "SaS", 315558),
(Strana "OLANO-NOVA", 287611),
(Strana "SNS", 225386),
(Strana "LSNS", 209779),
(Strana "Sme rodina", 172860),
(Strana "Most-Hid", 169593),
(Strana "Siet", 146205),
(Strana "KDH", 128908),
(Strana "SMK-MKP", 105495),
(Strana "SOK", 21785),
(Strana "TIP", 18845),
(Strana "SZS", 17541),
(Strana "KSS", 16278),
(Strana "SDKU-DS", 6938),
(Strana "Sanca", 6522),
(Strana "SMS", 4559),
(Strana "Priama demokracia", 3595),
(Strana "Odvaha", 3428),
(Strana "Vzdor", 3182),
(Strana "MKDA", 2426),
(Strana "Demokrati Slovenska", 1998),
(Strana "Koalicia Spolocne za Slovensko", 1777)
]
results2016 :: [(Subjekt, Int)]
results2016 =
[ (Strana "SMER-SD", 49),
(Strana "SaS", 21),
(Strana "OLANO-NOVA", 19),
(Strana "SNS", 15),
(Strana "LSNS", 14),
(Strana "Sme rodina", 11),
(Strana "Most-Hid", 11),
(Strana "Siet", 10)
]
elections2020 :: [(Subjekt, Int)]
elections2020 =
[ (Strana "OLANO", 721166),
(Strana "SMER-SD", 527172),
(Strana "Sme rodina", 237531),
(Strana "LSNS", 229660),
(Koalicia ["PS", "Spolu"], 200780),
(Strana "SaS", 179246),
(Strana "Za ludi", 166325),
(Strana "KDH", 134099),
(Strana "MKS", 112662),
(Strana "SNS", 91171),
(Strana "Dobra volba", 88220),
(Strana "Vlast", 84507),
(Strana "Most-HID", 59174),
(Strana "Socialisti.sk", 15925),
(Strana "Mame toho dost!", 9260),
(Strana "SLS", 8191),
(Strana "DS", 4194),
(Strana "SOLIDARITA", 3296),
(Strana "SNK", 2018),
(Strana "SHO", 1966),
(Strana "Hlas ludu", 1887),
(Strana "PSN", 1261),
(Strana "99%", 991),
(Strana "Slovenska liga", 809)
]
results2020 :: [(Subjekt, Int)]
results2020 =
[ (Strana "OLANO", 53),
(Strana "SMER-SD", 38),
(Strana "Sme rodina", 17),
(Strana "LSNS", 17),
(Strana "SaS", 13),
(Strana "Za ludi", 12)
]
elections2023 :: [(Subjekt, Int)]
elections2023 =
[ (Strana "SMER-SD", 681017),
(Strana "PS", 533136),
(Strana "HLAS-SD", 436415),
(Koalicia ["OLANO", "KU", "Za ludi"], 264137),
(Strana "KDH", 202515),
(Strana "SaS", 187645),
(Strana "SNS", 166995),
(Strana "Republika", 141099),
(Strana "Aliancia", 130183),
(Strana "Demokrti", 87006),
(Strana "Sme rodina", 65673),
(Strana "LSNS", 25003),
(Strana "KSS", 9867),
(Strana "Pirati", 9358),
(Strana "MM", 7935),
(Strana "MF", 3468),
(Strana "MySlovensko", 2786),
(Strana "KARMA", 2407),
(Strana "SOS", 2401),
(Strana "SRDCE", 2315),
(Strana "Princip", 1817),
(Strana "Spravodlivost", 1335),
(Strana "SHO", 1332),
(Strana "VB", 1262),
(Strana "SDKS-DS", 771)
]
results2023 :: [(Subjekt, Int)]
results2023 =
[ (Strana "SMER-SD", 42),
(Strana "PS", 32),
(Strana "HLAS-SD", 27),
(Koalicia ["OLANO", "KU", "Za ludi"], 16),
(Strana "KDH", 12),
(Strana "SaS", 11),
(Strana "SNS", 10)
]