Do uruchomienia kodu potrzebne są:
- git
- node w wersji przynajmniej 16.14.0 (do instalacji node polecam użycie asdf, nodenv lub nvm)
- w katalogu źródłowym po zainstalowaniu node pobrać paczki przy użyciu
npm install
- aby odpalić testy
npm run test
- aby przetestować działanie aplikacji
npm run calculate
Twój kolega z zespołu wrzucił do repozytorium kod z implementacji kalkulatora RPN (reverse polish notation).
Funkcjonalność którą próbował zaimplementować podana jest poniżej:
Napisz funkcję rpn(inputString)
, implementującą kalkulator operujący na wyrażeniach w odwrotnej notacji polskiej (RPN).
Obsłuż następujące przypadki:
"1 3 +" zwraca 4
"2 2 + 3 *" zwraca 12
"2 2 /" zwraca 1
"3 1 – 2 2 + *" zwraca 8
"4 3 4 + 5 1 + 2 * + +" zwraca 23
"" lub "abc" rzuca błąd "Invalid Expression"
"1 +" rzuca błąd "Not Enough Operands"
Obsłuż jedynie operatory: +
-
/
*
Opis prostego algorytmu kalkulatora RPN:
powtarzaj dla token := weź_następny_token
jeżeli token to liczba
odłóż token na stos
w przeciwnym wypadku jeżeli token to operator
argumenty := weź_2_liczby_ze_stosu
wynik := argument1 operator argument2
odłóż_wynik_na_stos()
zwróć_ostatnią_wartość_ze_stosu()
Np. dla wyrażenia "2 3 7 * -":
odczytaj 2:
odłóż 2 na stosie
odczytaj 3:
odłóż 3 na stosie
odczytaj 7:
odłóż 7 na stosie
odczytaj *:
pobierz dwie ostatnie liczby ze stosu
pobrano 3 oraz 7, wylicz 3 * 7 = 21
odłóż 21 na stosie
odczytaj -:
pobierz dwie ostatnie liczby ze stosu
pobrano 2 oraz 21, wylicz 2 - 21 = -19
odłóż -19 na stosie
zwróć -19
Deadline na ukończenie zadania to 23:59 w poniedziałek 28.02
Twoje zadanie składa się z 2 części:
- Zrób Code Review w języku angielskim kodu zastanego w folderze
/src/rpn
. (nie przejmuj się jakąkolwiek zawartością poza tym folderem). - Zaimplementuj zgłoszone przez siebie uwagi i jeżeli uznasz, że zadanie zostało przez Twojego kolegę nie dokończone dokończ je za niego.
- Sklonuj to repozytorium lokalnie:
git clone git@github.com:elpassion/elp-workshop-1.git
wymaga to ustawienia wcześniej klucza SSH na githubie. Nie twórz forka repozytorium. - Stwórz swoje własne prywatne repozytorium na Githubie.
- Zmień remote w sklonowanym repozytorium na adres swojego nowe repozytorium np.
git remote set-url origin git@github.com:michalwarda/test
. - zaproś
michalwarda
do kolaboracji w swoim repozytorium (wystarczy opcjaRead
) - Zostaw komentarze do plików zmienionych w ostatnim commitcie w swoim repozytorium. (pliki w folderze
/src/rpn
) - W swoim nowo stworzonym repozytorium stwórz PR z kodem który implementuje zgłoszone przez Ciebie wcześniej uwagi i dokończenie zadania.
- W momencie ukończenia zadania wyślij link do repozytorium poprzez formularz.
- How to do a code review - tutorial Google jak dawać Code Review. Polecam przeczytać od deski do deski :)
- Kalkulator RPN - opis działania i kilka ciekawostek na temat historii, działania i po co to.
- Dokumentacja frameworku do testów
- You don't know JS - prawdopodobnie najlepsza książka o podstawach JS
- TypeScript Handbook - najlepsze źródło informacji o TS.
- Nie śpiesz się. Przeczytaj dokładnie kod i najlepiej zapoznaj się z materiałami pomocniczymi, szczególnie 1, 2 i 3.
- Pamiętaj, że CR robisz swojemu koledze z zespołu, przekaż uwagi w taki sposób, żeby je zrozumiał i nie zraził się do Ciebie.
- Pamiętaj o testach.
- Nie ma jednego słusznego rozwiązania zadania. "Jakość kodu" i "wygląd" są bardzo subiektywne. Nie przejmuj się tym czy Twoje rozwiązanie jest idealne. Skup się na tym, żeby zrozumieć i przekazać czemu jest lepsze od poprzedniego.
- Spróbuj użyć narzędzia jak https://github.com/typescript-eslint/typescript-eslint do podpowiedzenia potencjalnych błędów.