Zadanie 1

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.