Gratulujemy pomyślnego przejścia pierwszego etapu rekrutacji! W drugim etapie chcielibyśmy sprawdzić Twoje umiejętności programowania w C++ oraz posługiwania się systemem kontroli wersji.
Twoim zadaniem będzie zaimplementowanie zadań opisanych poniżej. Ocenie będzie podlegać:
- Poprawność kodu (czy testy przechodzą czy nie)
- Jakość kodu (podział na metody, nazewnictwo zmiennych, porządek w kodzie)
- Złożoność obliczeniowa zastosowanych algorytmów
- Pokrycie testami jednostkowymi
- Historia commitów, ew. podział na branche
Skończone rozwiązanie prześlij nam za pomocą dodania jako kontrybutorów do Twojego forka poniższe konta:
Dodanie tych kont do Twojego forka będzie równoznaczne z oddaniem zadania.
Deadline do przesłania rozwiązań to 23.10.2023 godz. 21:37. Po tym terminie zadania nie będą przyjmowane.
- Linux albo WSL
- Wszystkie poniższe komendy są tworzone pod linuxa, gdyż nasz system działa jedynie na linuxie.
- Jeśli uda Ci się skonfigurować repo na Macu lub Windowsie to możesz również programować w takiej konfiguracji.
- GCC lub inny kompilator cpp
- Git
- Utwórz forka tego repozytorium w swoim profilu (how to fork a repo). Wszystkie zmiany powinny być komitowane na forka, a nie do orginalnego repo. Uwaga: zmień widoczność swojego repozytorium na prywatne! Znajdziesz tę opcję na dole ustawień repo!
- Sklonuj swoje repozytorium
git clone ${adres_repo}
- Stwórz folder
build
wewnątrz sklonowanego repomkdir build
- Zbuduj projekt
cd build && cmake .. && make
- Puść testy jednostkowe
ctest -V
- Po modyfikacji kodu źródłowego wystarczy, że w folderze build uruchomisz komendę:
make && ctest -V
żeby sprawdzić czy testy przechodzą.
Jeśli zmodyfikowałaś/eś dodatkowo CmakeLists.txt
konieczna jest komenda cmake
.
Dana jest klasa AGHRacingTeam, reprezentująca zespół AGH Racing. Posiada ona atrybut members
będący tablicą reprezentującą członków zespołu.
Zaimplementuj metodę addMember(std::string name, int height, int yearOfJoining)
, która doda nowego członka do tablicy members
TYLKO jeśli podane parametry są poprawne, tzn:
Założenia:
- Wzrost wyrażony jest jako dodatnia liczba całkowita 100 <= x <= 250.
- Imiona członków zespołu składają się z symboli alfanumerycznych, zaczynają się z wielkiej litery oraz
len(name) < 20
. - Rok dołączenia jest pomiędzy [2000, 2023] włącznie.
Uzupełnij funkcję getMembersSortedByHeightAsc
, która zwróci imiona członków zespołu posortowane w kolejności rosnącej według ich wzrostu.
Uzupełnij funkcję getNumberOfMembersWhoJoinedInLeapYear
, która zwróci liczbę członków zespołu, którzy dołączyli do niego w roku przestępnym.
Uzupełnij funkcję getMaxNumberOfJoinedInTheSameYear
, która zwróci maksymalną liczbę członków, którzy dołączyli do zespołu tego samego roku.
Aktualni członkowie zespołu to A, B, C. Dołączyli oni kolejno w 2020, 2021 i 2020. Funkcja powinna zwrócić liczbę 2, gdyż 2 członków dołączyło w 2020.
Aktualni członkowie zespołu to A, B, C, D. Dołączyli oni kolejno w 2020, 2021, 2021, 2021. Funkcja powinna zwrócić liczbę 3, gdyż 3 członków dołączyło w 2021.
Stwórz konstruktor jednoargumentowy dla klasy AGHRacingTeam
, który jako argumnet przyjmuje std::vector i doda do zmiennej members
tylko tych członków, którzy spełniają wymagania z zadania 1.
Stwórz konstruktor kopujący dla klasy AGHRacingTeam
. Zadbaj o to, żeby kopia pola members
była płytka, a nie głęboka.
- Nie modyfikuj testów jednostkowych, które zostały podane, ale możesz dopisać swoje własne odrębne testy jednostkowe.
- Nie modyfikuj struktury dostarczonych klas. Możesz jednak dodać swoje własne metody lub pola.
- Nie udostępniliśmy Ci wszystkich testów jednostkowych, którymi sprawdzać będziemy Twój kod. W związku z tym nawet jeśli wszystkie testy przechodzą, nie znaczy to, że kod jest poprawny.
Powodzenia!