Opis zadania

W dzisiejszej części napiszesz program, który użyłem do rozstrzygnięcia konkursu, w którym Samouczek Programisty rozdawał książki. W konkursie należało wypełnić prostą ankietę, wśród uczestników zostały rozlosowane dwie książki. Każdy, kto uzupełnił ankietę dostawał jeden los. Dodatkowo, jeśli osoba wskazała kogoś innego jako polecającego, polecający dostawał dodatkowy los w loterii.

Ankieta została przeprowadzona przy pomocy narzędzia Google Forms, z którego następnie wyniki zostały wyeksportowane do pliku CSV (ang. comma separated values). Plik CSV to jeden z formatów plików tekstowych, w którym jedna linijka odpowiada jednemu rekordowi. Plik ten zawiera kilka kolumn, których zawartość oddzielona jest przecinkami. Plik zawiera też nagłówek, opisujący nazwy kolumn.

W przykładzie poniżej mamy dwa rekordy z takiego pliku. Irek dostaje dwa losy, Mateusz jeden. Dzieje się tak ponieważ Irek polecił Samouczka Mateuszowi.

"Timestamp","Jak masz na imię?","Jaki jest Twój adres e-mail?","Temat artykułu","Kto polecił Ci stronę www.samouczekprogramisty.pl (podaj adres e-mail)?"
"2016/08/15 7:16:38 PM GMT+2","Irek","xxx@gmail.com","Scrum lub Agile",""
"2016/08/15 7:33:13 PM GMT+2","Mateusz","yyy@gmail.com","Algorytmika","xxx@gmail.com"

Twoim zadaniem jest napisanie programu, który pobierze od użytkownika dwa argumenty:

  • ścieżkę do pliku wejściowego w formacie CSV na dysku opisanym powyżej (możesz ściągnąć przykładowy plik, który dla Ciebie przygotowałem),
  • liczbę N >= 1 przedstawiającą liczbę wygrywających.

Program powinien wczytać zawartość pliku, wyłuskać adresy e-mail, a następnie wśród tych adresów wylosować N wygranych. Dla uproszczenia zakładamy, że format pliku jest poprawny oraz, że uczestnicy konkursu nie oszukiwali (nie było podwójnych losów). Sytuacja w której jeden uczestnik wygrywa dwie książki jest dopuszczalna.

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Wskazówki

Dla uproszczenia pokażę Ci parę fragmentów kodu czy metod, które mogą Ci się przydać w rozwiązaniu tego zadania.

Aby podzielić rekord na poszczególne pola możesz użyć metody String.split jak w przykładzie poniżej

String[] fields = line.split(",");

Aby z pola otoczonego znakami "" uzyskać wyłącznie jego zawartość możesz użyć wyrażeń regularnych. Na tym etapie proszę użyj przykładowego kodu, o tym czym są wyrażenia regularne przeczytasz w innym artykule.

private final static Pattern FIELD_PATTERN = Pattern.compile("^\"(.+)\"$");private static String parseField(String field) { Matcher fieldMatcher = FIELD_PATTERN.matcher(field); if (fieldMatcher.matches()) { return fieldMatcher.group(1); } return null;}

Metoda ta jako argument przyjmuje wartość pola i zwraca to co znajduje się wewnątrz "" bądź null jeśli pole nie było uzupełnione.

Aby wybrać losowo X wartości musisz losowo rozłożyć adresy e-mail z pliku. Pomóc Ci w tym może metoda Collections.shuffle, która w losowy sposób miesza elementy listy.

Z tymi narzędziami jesteś przygotowany do napisania swojej pierwszej maszyny losującej :) Jeśli będziesz miał jakiekolwiek pytania możesz zasugerować się przykładowym rozwiązaniem, które dla Ciebie przygotowałem. Jak zwykle zachęcam jednak do samodzielnego rozwiązania zadania, w ten sposób nauczysz się najwięcej.

Podsumowanie

Jeśli tego typu sposób nauki Ci się spodobał proszę daj znać ;) Rozwiązując zadania tego typu w praktyczny sposób przećwiczysz wiedzę, którą zdobyłeś do tej pory. Z biegiem czasu będziesz w stanie rozwiązać zadania o coraz większym poziomie trudności. Wszystko przed Tobą ;)

Na koniec mam do Ciebie prośbę. Zależy mi na dotarciu do jak największego grona czytelników, proszę pomóż mi w tym :) Udostępnij link do bloga na FB swoim znajomym, możesz także zapisać się do newslettera jeśli nie chcesz pominąć kolejnych artykułów. Do następnego razu!

Pobierz opracowania zadań z rozmów kwalifikacyjnych

Przygotowałem rozwiązania kilku zadań algorytmicznych z rozmów kwalifikacyjnych. Rozkładam je na czynniki pierwsze i pokazuję różne sposoby ich rozwiązania. Dołącz do grupy ponad 6147 Samouków, którzy jako pierwsi dowiadują się o nowych treściach na blogu, a prześlę je na Twój e-mail.

Kategorie:

Ostatnia aktualizacja:

Autor: Marcin Pietraszek


Nie popełnia błędów tylko ten, kto nic nie robi ;). Bardzo możliwe, że znajdziesz błąd, literówkę, coś co wymaga poprawy. Jeśli chcesz możesz samodzielnie poprawić tę stronę. Jeśli nie chcesz poprawiać błędu, który udało Ci się znaleźć będę wdzięczny jeśli go zgłosisz. Z góry dziękuję!

Zostaw komentarz