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