12-tygodniowy plan II - tydzień piąty (32)
Obraz Gerd Altmann z Pixabay
To był tydzień. Już nie pamiętam, kiedy miałem cały tydzień do dyspozycji, bez większych „przeszkadzaczy". To, na jakim poziomie zrealizowałem kluczowe zadania, pokazuje, jaki mam potencjał, a mogło być jeszcze lepiej, gdyby nie dwa dni elektrykiem gadułą i prokrastynacja, z którą usilnie walczyłem, a mimo to się wkradała w moją codzienność.
Bardzo dużo pracowałem z kursem, muszę nadrobić zaległości, więc jemu obecnie poświęcam najwięcej uwagi. W poprzednim tygodniu spędziłem z kursem 9h, a więc 225% planu. Tutoriale na MDN czytałem łącznie przez 3h (150%). 2.5h pracowałem z projektami (83%) i godzinę z free Code Camp (100%) Rozwiązałem 4 zadania na Codewars (133%) i osiągnąłem tam wyższy poziom, a więc zadania będą coraz trudniejsze. Łącznie cele z zakresu programowania zrealizowałem na 140% i zdecydowanie, gdybym jeszcze bardziej się spiął, to mógłbym osiągnąć jeszcze lepszy wynik.
Niestety po 7 dniach tłustych przyszedł czas na 7 dni chudych. Jest już środa i do tej pory nic nie zrobiłem. Po pierwsze długi weekend majowy, który spędziłem z rodziną i w ogrodzie, a po drugie apogeum pylenia brzozy. Ostatnie kilka dni to był koszmar. Teraz stężenie pyłków brzozy będzie już spadać, ale zacząłem kaszleć, więc chyba alergia przeobraziła się w infekcję. W weekend przyjeżdża do mnie rodzina (spóźnione urodziny synka), więc tak naprawdę pozostały mi dwa dni, bo dzisiaj młody został w domu (też zaczął kaszleć) i nic nie zrobiłem 🤦. Zależy mi na tym, żeby w tym tygodniu skończyć kurs, więc na tym zadaniu się skoncentruję.
Bardzo mi się podoba praktyczne zastosowanie wiedzy w Codewars, a w szczególności to, że po rozwiązaniu zadania można zobaczyć, jak zadanie rozwiązali inni. Sposobów rozwiązania każdego zadania jest niezliczoną ilość i to jest piękne w programowaniu. Oczywiście jedno rozwiązanie jest bardziej optymalne od drugiego, jednak ostatecznie najważniejsze jest, żeby dany problem rozwiązać, a potem można pracować nad optymalizacją. Na Codewars użytkownicy głosują też na rozwiązanie, które w ich ocenie jest najbardziej optymalne i właściwe. Postanowiłem, że będę publikował jedno lub dwa rozwiązania moje vs to, które jest najbardziej optymalne według użytkowników.
Najpierw zadanie które dzielnie rozbiłem na możliwe warianty, po czym przystąpiłem do dzieła:
Treść zadania:
Timmy & Sarah think they are in love, but around where they live, they will only know once they pick a flower each. If one of the flowers has an even number of petals and the other has an odd number of petals it means they are in love.
Write a function that will take the number of petals of each flower and return true if they are in love and false if they aren't.
(Timmy i Sara myślą, że są zakochani, ale w okolicy, w której mieszkają, dowiedzą się o tym dopiero, gdy każdy z nich zerwie kwiatek. Jeśli jeden z kwiatów ma parzystą liczbę płatków, a drugi nieparzystą, to znaczy, że są zakochani.
Napisz funkcję, która pobierze liczbę płatków każdego z kwiatów i zwróci wartość true, jeśli są zakochani, i false, jeśli nie są.)
Moje rozwiązanie:
function lovefunc(flower1, flower2) {
if ((flower1 % 2 === 0 && flower2 % 2 !== 0) ||
(flower1 % 2 !== 0 && flower2 % 2 === 0)) {
return true;
} else {
return false;
}
}
Rozwiązanie najbardziej optymalne:
function lovefunc(flower1, flower2){
return flower1 % 2 !== flower2 % 2;
}
Ja rozwiązałem to nieco "dookoła", jeśli reszta z dzielenia przez 2 pierwszej liczby będzie równa zero a drugiej nie będzie równa zero lub jeśli pierwszej nie będzie równa zero a drugiej będzie, wtedy zwróć true, w przeciwnym wypadku zwróć false. Najlepsze rozwiązanie można by powiedzieć: geniusz tkwi w prostocie. Wystarczyło zwrócić, że reszta z dzielenia pierwszej liczby przez 2 nie jest równa reszcie z dzielenia drugiej liczby przez 2.
Pochwalę się jeszcze zadaniem, które rozwiązałem niemal perfekcyjnie:
Treść zadania:
Introduction
The first century spans from the year 1 up to and including the year 100, the second century - from the year 101 up to and including the year 200, etc.
Task
Given a year, return the century it is in.
Examples
1705 --> 18
1900 --> 19
1601 --> 17
2000 --> 20
Wprowadzenie
Pierwszy wiek obejmuje okres od roku 1 do roku 100 włącznie, drugi wiek - od roku 101 do roku 200 włącznie itd.
Zadanie
Podając rok, określ, w którym stuleciu się on znajduje.
Przykłady
1705 --> 18
1900 --> 19
1601 --> 17
2000 --> 20
Moje rozwiązanie:
function century(year) {
return Math.ceil(year / 100);
}
To rozwiązanie zajęło drugie miejsce, ponieważ bardziej pożądane obecnie jest stosowanie funkcji strzałkowej:
const century = year => Math.ceil(year/100)
Funkcja Math.ceil zaokrągla liczbę "do góry" do najbliższej liczby całkowitej. Na to rozwiązanie wpadłem, bo gdzieś mi się obiło o uszy, że jest funkcja zaokrąglająca liczby do całkowitych. Nie byłem jednak pewien czy jest taka metoda, która pozwala zaokrąglić zawsze do góry. Szybki przegląd metod funkcji Math na MDN rozwiał moje wątpliwości.
Tak więc Codewars to fajna zabawa, a porównywanie swojego rozwiązania do tych najbardziej optymalnych jest bardzo pouczające.
"Prostota jest szczytem wyrafinowania." ~ Leonardo da Vinci
"Najwyższą doskonałość osiąga człowiek, znajdując własne niedoskonałości”. ~ Św. Augustyn
Komentarze
Prześlij komentarz