132 lines
6.9 KiB
Markdown
132 lines
6.9 KiB
Markdown
|
---
|
||
|
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.
|