Ta strona korzysta z ciasteczek cookies Rozumiem.

Zadanie z lodash – sumuj wszystkie liczby w zakresie

15 listopada 2017, Kasia Ziomek-Zdanowicz

JavaScript, nauczyć się programować


Uczę się biblioteki lodash, która pomaga w iterowaniu tablic, obiektów i łańcuchów. W tym celu korzystam z zadań freeCodeCamp. W następnych kilku wpisach znajdziesz treść tych zadań oraz rozwiązania przy wykorzystaniu lodash. Zacznijmy od zadania „sumuj wszystkie liczby w zakresie”.

Sumuj wszystkie liczby w zakresie

Zadanie

Otrzymasz tablicę dwóch liczb. Zwróć sumę tych dwóch liczb i wszystkich liczb między nimi.

Rozwiązania

Rozwiązanie bez wykorzystania lodash

function sumAll(arr) {

// tablica może być nieposortowana
// użyj składni spread, aby znaleźć minimum i maksimum w tablicy
// można również użyć metody Array.prototype.sort () z odpowiednią funkcją porównywania i uzyskać pierwszy i drugi element posortowanej tablicy

 let min = Math.min(...arr),
     max = Math.max(...arr), 
     result = min;
 
 for(let i = result + 1; i <= max; i++) {
  result +=i;
 }  
 
 return result;
}

Rozwiązanie z wykorzystaniem lodash

function sumAllLodash(arr) {

 // użyj metod lodash, aby znaleźć minimum i maksimum w tablicy
 // użyj metody _.reduce aby utworzyć tablicę liczb od minimum do maksimum (górny limit nie jest uwzględniany)
  
 let min = _.min(arr),
     max = _.max(arr), 
     all = _.range(min, max + 1, 1); 

 // zredukuj elementy tablicy do jednej liczby
 return all.reduce((a,b) => {return a + b}, 0);  
}

Lista użytych funkcji i metod

Dodatek

Poniżej znajdziesz wyniki zwracane przez funkcje.

Wyniki działania funkcji dla różnych scenariuszy

See the Pen Lodash task – sum all numbers in a range by Kasia (@ziomecka) on CodePen.

Jeśli chciałbyś zaprezentować swoje rozwiązanie, to jest to bardzo mile widziane. Rozwiązania freeCodeCamp są dostępne tutaj.

Proszę pamiętaj, że jestem początkującą programistką front-end i mimo, że dbam o poprawność tego bloga, błędy się zdarzają. Jeśli znajdziesz błąd lub znasz lepsze podejście, daj mi znać (najlepiej w komentarzu). W ten sposób możesz oszczędzić innym czytelnikom frustracji i pomóc mi poprawić jakość wpisów oraz mój sposób kodowania. Dziękuję.


Komentarze

Kasia Ziomek-Zdanowicz, 17 listopada 2017

Dziękuję za komentarz. Stronę polecam. Od jakiegoś czasu planuję wpis na jej temat :-)

Tomek Sochacki, 15 listopada 2017

Szczerze mówiąc to ja bym podszedł do tego problemu z innej strony. W zasadzie nie interesują nas tutaj kolejne liczby pomiędzy min i max, a jedynie ich suma. Pętla tworząca tablicę nie ma wg mnie więc większego sensu. Lepiej skorzystać z zależności matematycznych. Suma liczb od 0 do N to n*(n+1)/2, co po pewnych przekształceniach dla dwóch liczb można zapisać funkcją:function sumAll( [min,max] ) { [min,max] = ( min > max ) ? [max,min] : [min,max]; return ( ( min + max ) * ( max - min + 1) ) / 2; }Na początku sprawdzam, czy czasami liczb nie podano w odwrotnej kolejności, czyli najpierw max, a potem min to w takim wypadku odpowiednio podmieniam ich wartości. Następnie obliczam sumę wg Twojego kryterium, ale bez zbędnego tworzenia tablicy.Nie znam szczerze mówiąc tej stronki co podałaś, ale może w wolnej chwili tam wejdę bo lubię czasami pobawić się algorytmiką w programowaniu :)Pozdrawiam


Napisz komentarz

Twój adres email nie zostanie opublikowany.

Wszystkie pola są wymagane.