freeCodeCamp/guide/spanish/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../sum-all-numbers-in-a-range/index.md

132 lines
6.9 KiB
Markdown
Raw Normal View History

2018-10-12 19:37:13 +00:00
---
title: Sum All Numbers in a Range
localeTitle: Suma todos los números en un rango
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ": triangular_flag_on_post:") Recuerda usar **`Read-Search-Ask`** si te atascas. Tratar de emparejar el programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") y escribe tu propio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápiz:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ":bandera a cuadros:") Explicación del problema:
Necesita crear un programa que tome una matriz de dos números que no están necesariamente en orden, y luego agregue no solo esos números sino también cualquier número intermedio. Por ejemplo, \[3,1\] será igual que `1+2+3` y no solo `3+1`
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 1
Usa `Math.max()` para encontrar el valor máximo de dos números.
> _intenta resolver el problema ahora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 2
Usa `Math.min()` para encontrar el valor mínimo de dos números.
> _intenta resolver el problema ahora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 3
Recuerde que debe agregar todos los números intermedios para que esto requiera una forma de obtener esos números.
> _intenta resolver el problema ahora_
## ¡Alerta de spoiler!
![señal de advertencia](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**¡Solución por delante!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solución de código básico:
```
function sumAll(arr) {
var max = Math.max(arr[0], arr[1]);
var min = Math.min(arr[0], arr[1]);
var temp = 0;
for (var i=min; i <= max; i++){
temp += i;
}
return(temp);
}
sumAll([1, 4]);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":cohete:") [Ejecutar código](https://repl.it/CLm6/0)
### Explicación del código:
* Primero crea una variable para almacenar el número máximo entre dos.
* Lo mismo que antes para el número más pequeño.
* Creamos una variable temporal para sumar los números.
Como los números pueden no estar siempre en orden, usar `max()` y `min()` ayudará a organizar.
#### Enlaces relevantes
* [Math.max ()](http://forum.freecodecamp.com/t/javascript-math-max/14682)
* [Math.min ()](http://forum.freecodecamp.com/t/javascript-math-min/14684)
* [Para loops](http://forum.freecodecamp.com/t/javascript-for-loop/14666)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girasol:") Solución de código intermedio:
```
function sumAll(arr) {
// Buckle up everything to one!
// Using ES6 arrow function (one-liner)
var sortedArr = arr.sort((a,b) => ab);
var firstNum = arr[0];
var lastNum = arr[1];
// Using Arithmetic Progression summing formula
var sum = (lastNum - firstNum + 1) * (firstNum + lastNum) / 2;
return sum;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":cohete:") [Ejecutar código](https://repl.it/CLm7/0)
### Explicación del código:
* En primer lugar, creamos una variable llamada `sortedArr` que la ordena desde el valor más bajo al más alto.
* `firstNum` es igual al primer número y `lastNum` es igual al segundo número.
* A continuación, utilizando la fórmula de suma de Progresión Aritmética, dejamos que `sum` igual `(lastNum - firstNum + 1) * (firstNum + lastNum) / 2` .
* Finalmente, devolvemos la `sum` .
La línea `var sortedArr = arr.sort((a,b) => ab);` Es probablemente lo que te tendrá más confundido. Esto sería lo mismo que crear una función que devuelva `ab` para `sort()` que es la forma estándar de ordenar los números de menor a mayor. En lugar de utilizar la flecha o la función de flecha gorda, podemos hacer todo eso en una sola línea, lo que nos permite escribir menos.
#### Enlaces relevantes
* [Array.sort ()](http://forum.freecodecamp.com/t/javascript-array-prototype-sort/14306)
* [Fórmula sumadora de la progresión aritmética](https://en.wikipedia.org/wiki/Arithmetic_progression#Sum)
* [ES6 función de flecha](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotando luz:") Solución avanzada de código:
```
function sumAll(arr) {
var sum = 0;
for (var i = Math.min(...arr); i <= Math.max(...arr); i++){
sum += i;
}
return sum;
}
sumAll([1, 4]);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":cohete:") [Ejecutar código](https://repl.it/CLm8/0)
### Explicación del código:
* Creando una suma variable para almacenar la suma de los elementos.
* Iniciar la iteración del bucle desde el elemento mínimo de la matriz dada y detenerse cuando alcanza el elemento máximo.
* El uso de un operador de propagación (... arr) permite pasar la matriz real a la función en lugar de elementos uno por uno.
#### Enlaces relevantes
* [Operador de propagación](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
* [Usando el operador de propagación en Math.max ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":portapapeles:") NOTAS PARA LAS CONTRIBUCIONES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":advertencia:") **NO** agregue soluciones que sean similares a las soluciones existentes. Si cree que es **_similar pero mejor_** , intente fusionar (o reemplazar) la solución similar existente.
* Agregue una explicación de su solución.
* Categorice la solución en una de las siguientes categorías: **Básica** , **Intermedia** y **Avanzada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Agregue su nombre de usuario solo si ha agregado algún **contenido principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":advertencia:") **_NO_** _elimine ningún nombre de usuario existente_ )
> Ver ![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 ": point_right:") [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) para referencia.