Získať môžete max. 5 bodov za každú z úloh (spolu max. 10 bodov).
Odovzdávajte úlohy do Moodle vo forme zdrojového kódu v jazyku Haskell so stručnými komentármi.
Formula 1
Definujte funkciu f1Results pre výpočet výsledkov seriálu pretekov Formuly 1. Parametrom funkcie je zoznam, ktorého prvkami sú zoznamy zodpovedajúce výsledkom jednotlivých veľkých cien. Každý takýto zoznam obsahuje mená pretekárov zoradené podľa umiestnenia v danej veľkej ceny (víťaz je prvý). Výsledkom funkcie má byť zoznam mien pretekárov zoradený podľa počtu bodov v celkovom hodnotení.
f1Results :: [[String]] -> [String]
Body sa za každú veľkú cenu prideľujú podľa zoznamu pointsScoring (teda, za 1. miesto 25 bodov, za 2. miesto 18 bodov, atď.).
pointsScoring :: [Int]
pointsScoring = [25, 18, 15, 12, 10, 8, 6, 4, 2, 1]
Validácia IBAN
Definujte funkciu checkIBAN pre overenie čísiel slovenských bankových účtov v medzinárodnom formáte IBAN.
checkIBAN :: String -> Bool
Štruktúra čísel vo formáte IBAN používaných v Slovenskej republike je nasledovná:
Význam | Dĺžka |
---|---|
ISO Kód krajiny | 2 |
Kontrolné číslice | 2 |
Kód banky | 4 |
Prvá časť čísla účtu (prefix) | 6 |
Druhá základná časť čísla účtu | 10 |
Súčasťou čísla môžu byť aj medzery, ktoré pred overením je potrebné odstrániť.
Všeobecný postup pre overenie IBANu je nasledovný:
- Presuňte prvé štyri znaky na koniec reťazca.
- Nahraďte každé písmeno v reťazci dvomi číslicami, kde A=10, B=11, ..., Z=35 (reťazcu SK teda zodpovedá 2820).
- Interpretujte reťazec ako desiatkové číslo a vypočítajte zvyšok po delení tohto čísla číslom 97.
- Ak zvyšok je 1, IBAN je pravdepodobne správny.
Pre slovenské čísla účtov je potrebné samostatne overiť aj základné číslo účtu a predčíslie. Na kontrolu správnosti čísla účtu sa používa algoritmus modula 11. Váhy jednotlivých číslic sú nasledovné:
- Prvá časť čísla účtu (predčíslie): 10, 5, 8, 4, 2, 1
- Druhá základná časť čísla účtu: 6, 3, 7, 9, 10, 5, 8, 4, 2, 1.
Kontrola prvej a druhej časti čísla účtu sa vykoná tak, že jednotlivé číslice sa vynásobia príslušnou váhou, násobky sa sčítajú a vydelia číslom 11. Zvyšok musí byť nula.
Poznámka
Pre prevod znaku na číslo môžete použiť funkciu digitToInt z knižnice Data.Char
. Knižnícu musíte pripojiť pomocou deklarácie
import Data.Char
Poznámka
Pre konverziu medzi typmi Int a Integer môžete využiť funkciu toInteger.