Scala (cz. 2)

Transkrypt

Scala (cz. 2)
Języki i środowiska przetwarzania danych rozproszonych
(Scala, lab. 2)
1. HASŁO (1 pkt)
Pewna aplikacja używa logowania przy użyciu hasła. Wiadomo, że nie każdy string
powinien być dopuszczony jako hasło. Programiści tworzący tę aplikację nie są jednak
jeszcze zgodni, co do konkretnych kryteriów, jakie musi spełniać hasło.
Napisz obiekt (object Password) z funkcjonalnością walidowania hasła w taki sposób,
aby łatwo było dostosować przyjęte kryteria. Zakładamy, że ostateczna definicja
poprawnego hasła korzysta z podzbioru następujących wymogów:
 hasło ma minimalną długość min_len (dowolny parametr),
 hasło ma maksymalną długość max_len (dowolny parametr),
 zawiera co najmniej 1 wielką literę,
 zawiera co najmniej 1 małą literę,
 zawiera co najmniej 1 cyfrę,
 zawiera co najmniej 2 cyfry.
Wskazówki:
1. W Scali argumentami funkcji/metod mogą być inne funkcje – wykorzystaj ten
mechanizm.
2. Parametry min_len i max_len NIE powinny być polami obiektu. Jak inaczej je
przekazać, skoro pozostałe funkcje mają tylko 1 parametr (tj. string)? Wykorzystaj
mechanizm rozwijania funkcji (currying).
2. CSV (1 pkt)
Dany jest następujący 5-liniowy plik CSV:
;wydatki.csv
styczeń, 10000.00, 9300.20, 699.80
luty, 10800.50, 9500.00, 1300.50
marzec, 12000.00, 10500.00, 1500.00
kwiecień, 11000.00, 8800.00, 2200.00
Dane w kolejnych liniach to: miesiąc, wpływy, wydatki, zysk.
Wypisz te dane na konsoli w następującym układzie:
styczeń : 10000 - 9300 = 700
luty
: 10801 - 9500 = 1301
marzec : 12000 - 10500 = 1500
kwiecień: ...
A zatem:
 użyj zaokrągleń, gdzie 0.50 --> 1,
 wyrównaj poszczególne pola do prawej do wartości najszerszej,
 nie zakładaj z góry, że plik ma 5 linii i 4 pola,
 załóż jednak, że pierwsza linia w pliku to nagłówek, który ma być pominięty.
Staraj się użyć możliwie dużej liczby idiomów Scali. Pamiętaj o obsłudze wyjątków.
3. List (pkt. 0.5)
Lista w Scala jest abstrakcyjna a jej domyślna implementacja ma pewne wady, np.
liniowy dostęp do ostatniego elementu listy lub jej długości.
Przetestuj i pomierz czasy wybranych tych i dwóch innych operacji wykonywanych na
liście. Porównaj z czasami odpowiadających im operacjom na innej strukturze danych.
4. MyList (pkt. 0.75)
Napisz swoją listę, mająca pole size. Interfejs tej (przyjmijmy) MyList ma być
uproszczeniem standardowej List (wybrane metody), natomiast określenie rozmiaru
listy być szybkie (działać w czasie stałym).
Wskazówka:
- źródła Scali: https://github.com/scala/scala/tree/2.12.x/src/library/scala
5. List 2.0 (pkt. 0.75)
Dodaj do interfejsu listy operacje sprawdzające jej długość isLongerThanN(int),
isShorterThanN(int) oraz ich wersje <=, >=. Zmierz czasy działania małych i dużych
wartości N w kontekście listy o dużej liczbie elementów.
Wskazówka:
- wykorzystaj mechanizm implicit conversions