fix(guide): simplify directory structure

This commit is contained in:
Mrugesh Mohapatra
2018-10-16 21:26:13 +05:30
parent f989c28c52
commit da0df12ab7
35752 changed files with 0 additions and 317652 deletions

View File

@@ -0,0 +1,70 @@
---
title: Boo Who
localeTitle: Boo Who
---
![](//discourse-user-assets.s3.amazonaws.com/original/2X/3/3c8584a085a0deaea66b3400e6321eeadab552a2.jpg)
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### Explicação do Problema:
Este programa é muito simples, o truque é entender o que é um primitivo booleano. Os programas requerem uma resposta verdadeira ou falsa.
#### Links Relevantes
* [boleano](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
* Você precisará verificar o tipo do parâmetro para ver se é um booleano.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
* Para verificar o tipo de um parâmetro, você pode usar `typeof` .
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
* Como você deve retornar true ou false, você pode usar instruções if ou apenas retornar o booleano usado para a instrução if.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```javascript
function booWho(bool) {
return typeof bool === 'boolean';
}
// test here
booWho(null);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLnK/0)
# Explicação do código:
Usa o operador `typeof` para verificar se a variável é booleana. Se for, ele retornará `true` . Caso contrário, se for qualquer outro tipo, retornará `false` .
#### Links Relevantes
* Usando o tipo de
* [tipo de](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,220 @@
---
title: Chunky Monkey
localeTitle: Macaco Robusto
---
![](//discourse-user-assets.s3.amazonaws.com/original/2X/a/aadd6bead83ab7d79a795c326f005a89e6ad81f5.png)
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Nosso objetivo para este Algoritmo é dividir o `arr` (primeiro argumento) em partes menores de matrizes com o tamanho fornecido pelo `size` (segundo argumento). Existem 4 verificações verdes (objetivos) que nosso código precisa passar para concluir este Algoritmo:
1. `(['a', 'b', 'c', 'd'], 2)` espera-se que seja `[['a', 'b'], ['c', 'd']]`
2. `([0, 1, 2, 3, 4, 5], 3)` deverá ser `[[0, 1, 2], [3, 4, 5]]`
3. `([0, 1, 2, 3, 4, 5], 2)` espera-se que seja `[[0, 1], [2, 3], [4, 5]]`
4. `([0, 1, 2, 3, 4, 5], 4)` deverá ser `[[0, 1, 2, 3], [4, 5]]`
#### Links Relevantes
* [Array.push ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
* [Array.slice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Os links acima sugerem o uso de `Array.push()` , então vamos começar primeiro criando um novo array para armazenar os arrays menores que logo teremos assim:
```javascript
var newArray = [];
```
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Em seguida, vamos precisar de um `for loop` para percorrer `arr` .
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Finalmente, precisamos de um método para fazer a divisão real e podemos usar `Array.slice()` para fazer isso. A chave para este Algoritmo é entender como um `for loop` , `size` , `Array.slice()` e `Array.push()` trabalham juntos.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```javascript
function chunkArrayInGroups(arr, size) {
var temp = [];
var result = [];
for (var a = 0; a < arr.length; a++) {
if (a % size !== size - 1)
temp.push(arr[a]);
else {
temp.push(arr[a]);
result.push(temp);
temp = [];
}
}
if (temp.length !== 0)
result.push(temp);
return result;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/24)
### Explicação do código:
* Em primeiro lugar, criamos dois arrays vazios chamados `temp` e `result` , que eventualmente retornaremos.
* Nosso **loop for** loops até que `a` seja igual ou maior que o comprimento do array em nosso teste.
* Dentro do nosso loop, pressionamos `temp` usando `temp.push(arr[a]);` se o restante de `a / size` não for igual a `size - 1` .
* Caso contrário, passamos para `temp` , pressionamos `temp` para a variável de `result` e redefinimos `temp` para um array vazio.
* Em seguida, se `temp` não for um array vazio, nós o empurraremos para o `result` .
* Finalmente, retornamos o valor do `result` .
#### Links Relevantes
* [Array.push ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
* [For Loops](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
```javascript
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr2 = [];
for (var i = 0; i < arr.length; i+=size) {
arr2.push(arr.slice(i , i+size));
}
return arr2;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/Cj9x/3)
### Explicação do código:
* Primeiro, criamos um array vazio `arr2` onde armazenaremos nossos 'pedaços'.
* O loop for inicia em zero, incrementa por `size` cada vez no loop e pára quando atinge `arr.length` .
* Observe que esse loop for não passa por `arr` . Em vez disso, estamos usando o loop para gerar números que podemos usar como índices para dividir a matriz nos locais corretos.
* Dentro do nosso loop, criamos cada `arr.slice(i, i+size)` usando `arr.slice(i, i+size)` e adicionamos esse valor a `arr2` com `arr2.push()` .
* Finalmente, retornamos o valor de `arr2` .
#### Links Relevantes
* [Array.push ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
* [Array.slice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)
* [For Loops](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
```javascript
function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr = [];
var i = 0;
while (i < arr.length) {
newArr.push(arr.slice(i, i+size));
i += size;
}
return newArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/26)
### Explicação do código:
* Em primeiro lugar, criamos duas variáveis. `newArr` é um array vazio ao qual iremos empurrar. Nós também temos a variável `i` definida como zero, para uso em nosso loop while.
* Nosso laço while faz um loop até que `i` seja igual ou maior que o comprimento do array em nosso teste.
* Dentro do nosso laço, que empurra para a `newArr` matriz usando `arr.slice(i, i+size)` . Pela primeira vez loops, será algo parecido com:
newArr.push (arr.slice (1, 1 + 2))
* Depois de empurrarmos para `newArr` , adicionamos a variável de `size` em `i` .
* Finalmente, retornamos o valor de `newArr` .
#### Links Relevantes
* [Array.push ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
* [Array.slice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)
* [While Loops](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/while)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código 2:
```javascript
function chunkArrayInGroups(arr, size) {
var newArr = [];
while (arr.length) {
newArr.push(arr.splice(0,size));
}
return newArr;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/579)
### Explicação do código:
* Em primeiro lugar, criamos uma variável. `newArr` é um array vazio ao qual iremos empurrar.
* Nosso laço `while` loop até que o comprimento do array em nosso teste não seja 0.
* Dentro do nosso laço, que empurra para a `newArr` matriz usando `arr.splice(0, size)` .
* Para cada iteração de `while` loop, ele suprime `size` número de elementos da frente de `arr` e empurrá-los como uma matriz para `newArr` .
* Finalmente, retornamos o valor de `newArr` .
#### Links Relevantes
* [Array.push ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)
* [Array.splice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
* [While Loops](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/while)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código 3:
```javascript
function chunkArrayInGroups(arr, size) {
if (arr.length <= size){
return [arr];
}
else {
return [arr.slice(0,size)].concat(chunkArrayInGroups(arr.slice(size),size));
}
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/579)
### Explicação do código:
* Matriz menor que o tamanho é retornada aninhada.
* Para qualquer array maior que o tamanho, ele é dividido em dois. O primeiro segmento é aninhado e concatenado com o segundo segundo segmento, que faz uma chamada recursiva.
#### Links Relevantes
* [Recursão](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Recursion)
* [Array.splice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,36 @@
---
title: Confirm the Ending
localeTitle: Confirme o final
---
## Confirme o final
# 🌻 Solução de Código Intermediário:
(Abordagem declarativa)
```javascript
function confirmEnding(str, target) {
// "Never give up and good luck will find you."
// -- Falcor
return str.slice(str.length - target.length) === target;
}
confirmEnding("He has to give me a new name", "name");
```
#### 🚀 [Run Code](https://repl.it/repls/SardonicRoundAfkgaming)
# Explicação do código:
* Primeiro usamos o método `slice` copiando a string.
* Para obter os últimos caracteres em `str` equivalentes ao tamanho do `target` , usamos o método `slice` .
* O primeiro parâmetro dentro do método `slice` é o índice inicial e o segundo parâmetro seria o índice final.
* Por exemplo, `str.slice(10, 17)` retornaria `give me` .
* Neste caso, incluímos apenas um parâmetro que copiará tudo do índice inicial.
* Nós subtraímos o comprimento de `str` e o comprimento do `target` , assim, obteremos os últimos caracteres restantes equivalentes ao tamanho do `target` .
* Finalmente, comparamos o resultado de retorno da fatia ao `target` e verificamos se eles possuem os mesmos caracteres.
### Links Relevantes
* [String.prototype.slice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)

View File

@@ -0,0 +1,67 @@
---
title: Convert Celsius to Fahrenheit
localeTitle: Converter Celsius para Fahrenheit
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
O algoritmo para converter de Celsius para Fahrenheit é a temperatura em Celsius vezes `9/5` , mais `32` .
Você recebe uma variável **celsius** representando uma temperatura em Celsius. Use a variável **fahrenheit** já definida e aplique o algoritmo para atribuir a temperatura correspondente em Fahrenheit.
#### Links Relevantes
* [A Ordem de Operações: PEMDAS](http://www.purplemath.com/modules/orderops.htm)
* [Ordem de Operação: Vídeo](https://www.khanacademy.org/math/pre-algebra/order-of-operations/order_of_operations/v/order-of-operations)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Dê uma olhada no código. Existe uma área que você não deveria editar. A partir daí, pergunte a si mesmo - o que é usado lá que eu não vi antes?
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Tenha em mente a **ordem de operação,** verifique o link na seção de _links_ para mais informações.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```javascript
function convertToF(celsius) {
// Only change code below this line
var fahrenheit = (celsius * (9/5)) + 32;
// Only change code above this line
if ( typeof fahrenheit !== 'undefined' ) {
return fahrenheit;
} else {
return 'fahrenheit not defined';
}
}
// Change the inputs below to test your code
convertToF(30);
```
### Explicação do código:
* Declarar a variável **fahrenheit** .
* Certifique-se de que a ordem correta das operações aritméticas seja seguida usando parênteses ( `()` ) quando necessário.
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,115 @@
---
title: Factorialize a Number
localeTitle: Factorialize um número
---
![Recursão](//discourse-user-assets.s3.amazonaws.com/original/2X/d/dcf927a2e8c3beb7a9c28770153821982398bd99.jpg)
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
## ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Retorna o fatorial do inteiro fornecido. Se o inteiro é representado com a letra n, um fatorial é o produto de todos os inteiros positivos menores ou iguais a n.
Os fatoriais são frequentemente representados com a notação abreviada n!
Por exemplo: `5! = 1 * 2 * 3 * 4 * 5 = 120`
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Este começa facilmente desde `0! = 1` , então você pode ir em frente e simplesmente `return 1` lá.
Podemos usar isso como um `if` para quebrar o loop que vamos criar usando uma **função recursiva** . Ele irá verificar se o número que você deu a função é 0 (que seria o fim da sua cadeia de fatorial). Funções "terminam" quando retornam qualquer coisa. Na verdade, **todas as** funções sem uma instrução de `return` explícita retornarão `undefined` .
É também por isso que, em **vez** de ter _"terminado"_ , sempre se diz que uma função _"retornou"_ . E agora isso ...
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
**Noções básicas sobre recursão**
Recursão refere-se a uma função que se repete (chamando). Neste caso, estamos a voltar basicamente o número determinado (ou seja, 5), multiplicado pela função em si, mas desta vez o valor transmitido ao parâmetro _num_ é `num-1` (que se traduz, inicialmente a 4). A própria função vai **correr dentro de si mesmo** interessante, hein?
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
**Entendendo o fluxo**
O primeiro valor **retornado** pode ser melhor visualizado se você pensar nas operações de parênteses que fez na escola secundária, onde faz as contas dentro de todos os parênteses, de dentro para fora, colchetes e colchetes, até obter um resultado final (um total). Desta vez é a mesma coisa, olhe para o fluxo do programa:
### Durante a primeira execução da função:
\[ **num** = 5\]
5 é _igual_ a 1 ou 0? **Não** ---> Oki doki, vamos continuar ...
**Retorna:**
( **5** _(_ segunda execução\_: **4** \_ ( _terceira execução_ : **3** _(_ quarta execução\_: **2** \_ _quinta execução_ : **1** ))))
O que ele retorna pode ser visto como `(5*(4*(3*(2*1))))` ou apenas `5 * 4 * 3 * 2 * 1` , e a função retornará o resultado dessa operação: `120` . Agora, vamos verificar o que o resto das execuções fazem:
### Durante o resto das execuções:
**Segunda Execução** : _num_ = 5-1 = **4** -> é _num_ 0 ou 1? Não
\-> retorna a multiplicação entre 4 e o próximo resultado quando _num_ for agora 4-1.
**Terceira Execução** : _num_ = 4 - 1 = **3** -> é _num_ 0 ou 1? Não
\-> retorna a multiplicação entre 3 e o próximo resultado quando _num_ é agora 3-1.
**Quarta Execução** : _num_ = 3-1 = **2** -> é _num_ 0 ou 1? Não
\-> retorna a multiplicação entre 2 e o próximo resultado quando _num_ é agora 2-1.
**Quinta execução** : _num_ = 2-1 = **1** -> é _num_ 0 ou 1? Sim
\-> retorno **1** . E é aí que a recursão pára porque não há mais execuções.
Consegui? ![:wink:](https://forum.freecodecamp.com/images/emoji/emoji_one/wink.png?v=3 ":piscadela:")
> _tente resolver o problema agora_
#### Links Relevantes
* [Funções JS](https://www.youtube.com/watch?v=R8SjM4DKK80)
* [Recursão em JS](https://www.youtube.com/watch?v=k7-N8R0-KY4)
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução de Código:
```
function factorialize(num) {
if (num === 0) { return 1; }
return num * factorialize(num-1);
}
factorialize(5);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/1)
## Explicação do código:
Observe na primeira linha que temos a condição terminal, isto é, uma condição para verificar o final da recursão. Se `num == 0` , então retornamos 1, ou seja, finalizando efetivamente a recursão e informando a pilha para propagar esse valor para os níveis superiores. Se não tivermos essa condição, a recursão continuará até que o espaço da pilha seja consumido, resultando em um [estouro de pilha](https://en.wikipedia.org/wiki/Stack_overflow) .
### Links Relevantes
* [Recursão](https://www.codecademy.com/en/courses/javascript-lesson-205/0/1)
* [Factorialization](https://en.wikipedia.org/wiki/Factorial)
* [Operadores aritméticos](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,73 @@
---
title: Falsy Bouncer
localeTitle: Bouncer Falsy
---
![](//discourse-user-assets.s3.amazonaws.com/original/2X/5/55dedad40d9f3f662c70d1eac4effc00c7d26bd9.jpg)
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Remova todos os valores [falsos](https://guide.freecodecamp.org/javascript/falsy-values/) de uma matriz.
#### Links Relevantes
* [Valores de Falsas](https://guide.freecodecamp.org/javascript/falsy-values/)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Falsy é algo que é avaliado como FALSE. Existem apenas seis valores falsos em JavaScript: undefined, null, NaN, 0, "" (string vazia) e false, é claro.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Precisamos ter certeza de que temos todos os valores falsos para comparar, podemos saber, talvez com uma função com todos os valores falsos ...
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Então precisamos adicionar um `filter()` com a função de valores falsy…
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
```
function bouncer(arr) {
return arr.filter(Boolean);
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/32)
### Explicação do código:
O `Array.prototype.filter` método espera uma função que retorna um `Boolean` valor que recebe um único argumento e retorna `true` para [truthy](http://forum.freecodecamp.com/t/javascript-truthy-value/15975) valor ou `false` para [Falsas](https://guide.freecodecamp.org/javascript/falsy-values/) valor. Por isso passamos a função `Boolean` incorporada.
#### Links Relevantes
* [boleano](http://forum.freecodecamp.com/t/javascript-boolean/14311)
* [Truthy](http://forum.freecodecamp.com/t/javascript-truthy-value/15975)
* [Array.prototype.filter ()](http://forum.freecodecamp.com/t/javascript-array-prototype-filter/14289)
## ![:trophy:](https://forum.freecodecamp.com/images/emoji/emoji_one/trophy.png?v=3 ":troféu:") Créditos:
Se você achou esta página útil, você pode agradecer copiando e colando isso no chat principal:
**`Thanks @renelis @abhisekp @Rafase282 for your help with Algorithm: Falsy Bouncer`**
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,143 @@
---
title: Find the Longest Word in a String
localeTitle: Encontre a palavra mais longa em uma string
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Você tem que passar por cada palavra e descobrir qual é a mais longa e retornar não a palavra, mas quantos caracteres ela possui.
#### Links Relevantes
* [Comprimento da Cadeia JS](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Você deve dividir a string em uma matriz de palavras.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Você precisará descobrir uma maneira de acompanhar globalmente o maior comprimento atual.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Lembre-se de como obter o comprimento dos elementos no array? `Array[index].length` .
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function findLongestWordLength(str) {
var words = str.split(' ');
var maxLength = 0;
for (var i = 0; i < words.length; i++) {
if (words[i].length > maxLength) {
maxLength = words[i].length;
}
}
return maxLength;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/5)
### Explicação do código:
Pegue a corda e converta-a em uma matriz de palavras. Declare uma variável para acompanhar o comprimento máximo e o loop de 0 até o comprimento da matriz de palavras.
Em seguida, verifique a palavra mais longa comparando a palavra atual com a anterior e armazenando a nova palavra mais longa. No final do loop, retorne o valor numérico da variável maxLength.
#### Links Relevantes
* [JS Array.length](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/length)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
**Usando `.reduce()`**
```
function findLongestWordLength(s) {
return s.split(' ')
.reduce(function(x, y) {
return Math.max(x, y.length)
}, 0);
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/6)
### Explicação do código:
Para mais informações sobre `reduce` [clique aqui.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)
Caso você esteja se perguntando sobre o `0` após a função de retorno de chamada, ele é usado para fornecer um valor inicial ao `x` , para que o `Math.max` saiba por onde começar.
#### Links Relevantes
* [JS Reduce](http://forum.freecodecamp.com/t/javascript-array-prototype-reduce/14299)
* [JS Reduzir Made Easy](http://forum.freecodecamp.com/t/using-array-prototype-reduce-to-reduce-conceptual-boilerplate-for-problems-on-arrays/14687)
* [JS Math Max](http://forum.freecodecamp.com/t/javascript-math-max/14682.md)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
**Usando recursividade**
```
function findLongestWordLength(str) {
//split the string into individual words
//(important!!, you'll see why later)
str = str.split(" ");
//str only has 1 element left that is the longest element,
//return the length of that element
if(str.length == 1){
return str[0].length;
}
//if the first element's length is greater than the second element's (or equal)
//remove the second element and recursively call the function)
if(str[0].length >= str[1].length){
str.splice(1,1);
return findLongestWordLength(str.join(" "));
}
//if the second element's length is greater thant the first element's start
//call the function past the first element
if(str[0].length <= str[1].length){
// from the first element to the last element inclusive.
return findLongestWordLength(str.slice(1,str.length).join(" "));
}
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/7)
### Explicação do código:
A primeira linha divide a string em palavras individuais. Então nós verificamos se `str` tem apenas 1 elemento à esquerda, então esse é o elemento mais longo e nós o retornamos. Se o comprimento do primeiro elemento for maior que o segundo (ou igual) do segundo elemento, nós removemos o segundo elemento e chamamos recursivamente a função `findLongestWord` . No entanto, se o comprimento do segundo elemento for maior que o início do primeiro elemento, então chamamos a função após o primeiro elemento.
#### Links Relevantes
* [Funções JS](https://www.youtube.com/watch?v=R8SjM4DKK80)
* [Noções básicas de recursão](https://www.youtube.com/watch?v=k7-N8R0-KY4)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,49 @@
---
title: Finders Keepers
localeTitle: Achado não é roubado
---
## Explicação do Problema
Precisamos devolver o elemento de uma matriz que passa uma função. Tanto a `function` quanto o `array` são passados para a função `findElement(arr, func)` .
## Sugestão: 1
Olhando através da matriz pode ser feito com um loop `for` .
> _tente resolver o problema agora_
## Dica: 2
`num` é passado para a função. Vamos precisar configurá-lo para os elementos que queremos verificar com a função.
> _tente resolver o problema agora_
## Dica: 3
Não se esqueça, se nenhum dos números da matriz passar no teste, ele deve retornar `undefined` .
> _tente resolver o problema agora_
## Solução Básica
```javascript
function findElement(arr, func) {
let num = 0;
for(var i = 0; i < arr.length; i++) {
num = arr[i];
if (func(num)) {
return num;
}
}
return undefined;
}
```
## Explicação do código
* Desafio nos pede para olhar através da matriz. Isso é feito usando um loop `for` .
* A variável `num` está sendo passada para a função, então a configuramos para cada índice em nossa matriz.
* A função pré-definida já verifica cada número para nós, portanto, se é "verdade", retornamos esse num.
* Se nenhum dos números no array passar no teste da função, retornamos indefinidos.

View File

@@ -0,0 +1,11 @@
---
title: Basic Algorithm Scripting
localeTitle: Algoritmo Básico de Scripts
---
## Algoritmo Básico de Scripts
Este é um esboço. [Ajude nossa comunidade a expandi-lo](https://github.com/freecodecamp/guides/tree/master/src/pages/mathematics/quadratic-equations/index.md) .
[Este guia de estilo rápido ajudará a garantir que sua solicitação de recebimento seja aceita](https://github.com/freecodecamp/guides/blob/master/README.md) .
#### Mais Informações:

View File

@@ -0,0 +1,102 @@
---
title: Mutations
localeTitle: Mutações
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
* Retorna true se a string no primeiro elemento da matriz contiver todas as letras da string no segundo elemento da matriz.
#### Links Relevantes
* [String.indexOf ()](http://forum.freecodecamp.com/t/javascript-string-prototype-indexof/15936)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
* Se tudo estiver em minúsculas, será mais fácil comparar.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
* Nossas strings podem ser mais fáceis de trabalhar se forem matrizes de caracteres.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
* Um loop pode ajudar. Use `indexOf()` para verificar se a letra da segunda palavra está no primeiro.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
**Procedural**
```
function mutation(arr) {
var test = arr[1].toLowerCase();
var target = arr[0].toLowerCase();
for (var i=0;i<test.length;i++) {
if (target.indexOf(test[i]) < 0)
return false;
}
return true;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/30)
### Explicação do código:
Primeiro fazemos as duas strings no array minúsculo. `test` irá realizar o que estamos procurando no `target` .
Em seguida, passamos por nossos caracteres de teste e, se algum deles não for encontrado, `return false` .
Se _todos_ eles forem encontrados, o loop terminará sem retornar nada e nós `return true` .
#### Links Relevantes
* [String.toLowerCase ()](http://forum.freecodecamp.com/t/javascript-string-prototype-tolowercase/15948)
* [Para loops](http://forum.freecodecamp.com/t/javascript-for-loop/14666s-Explained)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
**Declarativo**
```
function mutation(arr) {
return arr[1].toLowerCase()
.split('')
.every(function(letter) {
return arr[0].toLowerCase()
.indexOf(letter) != -1;
});
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/31)
### Explicação do código:
Pegue a segunda corda, em minúsculas e transforme-a em uma matriz; em seguida, certifique-se de que _cada_ uma de suas _letras faça_ parte da primeira seqüência de caracteres em minúscula.
`Every` um basicamente lhe dará letra por letra para comparar, o que fazemos usando `indexOf` na primeira string. `indexOf` lhe dará -1 se a `letter` atual estiver faltando. Verificamos que não é esse o caso, pois se isso acontecer uma vez, `every` será falso.
#### Links Relevantes
* [Array.split ()](http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944)
* [Array.every ()](http://forum.freecodecamp.com/t/javascript-array-prototype-every/14287)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,119 @@
---
title: Repeat a String Repeat a String
localeTitle: Repetir uma String Repetir uma String
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
O programa é muito simples, temos que pegar uma variável e retornar essa variável sendo repetida certa quantidade de vezes. Não há necessidade de adicionar espaço ou nada, apenas continue repetindo em uma única string.
#### Links Relevantes
* [Objeto String Global](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Você não pode editar strings, você precisará criar uma variável para armazenar a nova string.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Crie um loop para repetir o código quantas vezes forem necessárias.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Faça a variável criada armazenar o valor atual e anexe a palavra a ela.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function repeatStringNumTimes(str, num) {
var accumulatedStr = '';
while (num > 0) {
accumulatedStr += str;
num--;
}
return accumulatedStr;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/19)
### Explicação do código:
* Crie uma variável de string vazia para armazenar a palavra repetida.
* Use um loop while ou loop para repetir o código quantas vezes `num` necessárias de acordo com
* Então, basta adicionar a string à variável criada na etapa um e aumentar ou diminuir `num` dependendo de como você define o loop.
* No final do loop, retorne a variável para a palavra repetida.
#### Links Relevantes
* JS while Loop
* [JS For Loops Explained](https://forum.freecodecamp.com/t/javascript-for-loop/14666s-Explained)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
```
function repeatStringNumTimes(str, num) {
if(num < 0)
return "";
if(num === 1)
return str;
else
return str + repeatStringNumTimes(str, num - 1);
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/21)
### Explicação do código:
* Esta solução usa recursão.
* Verificamos se `num` é negativo e retornamos uma string vazia se for verdade.
* Em seguida, verificamos se é igual a 1 e, nesse caso, retornamos a string em si.
* Se não, adicionamos a string a uma chamada de nossa função com `num` sendo diminuída em 1, o que adicionará outra `str` e outra .. até que, eventualmente, `num` seja 1. E retorne todo esse processo.
#### Links Relevantes
* [Funções - Recursão](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Recursion)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
```
function repeatStringNumTimes(str, num) {
return num > 0 ? str.repeat(num) : '';
}
repeatStringNumTimes("abc", 3);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/85)
### Explicação do código:
* Essa solução usa uma abordagem declarativa.
* É semelhante à terceira solução, exceto que usa a forma do operador ternário da instrução `if` .
#### Links Relevantes
* [JS Ternary](https://forum.freecodecamp.com/t/javascript-ternary-operator/15973)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 ": point_right:") [**`Wiki Challenge Solution Template`**](https://forum.freecodecamp.com/t/algorithm-article-template/14272) para referência.

View File

@@ -0,0 +1,160 @@
---
title: Return Largest Numbers in Arrays
localeTitle: Retornar os maiores números em matrizes
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Você obterá uma matriz que contém sub-matrizes de números e precisará retornar uma matriz com o maior número de cada uma das sub-matrizes.
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Você precisará acompanhar o array com a resposta e o maior número de cada sub-array.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Você pode trabalhar com matrizes multidimensionais por `Array[Index][SubIndex]`
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Preste muita atenção ao tempo de armazenamento de variáveis ao trabalhar com loops
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Soluções à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
**(Abordagem processual)**
```
function largestOfFour(arr) {
var results = [];
for (var n = 0; n < arr.length; n++) {
var largestNumber = arr[n][0];
for (var sb = 1; sb < arr[n].length; sb++) {
if (arr[n][sb] > largestNumber) {
largestNumber = arr[n][sb];
}
}
results[n] = largestNumber;
}
return results;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/734)
### Explicação do código:
* Crie uma variável para armazenar os _resultados_ como uma matriz.
* Crie um loop externo para percorrer a matriz externa.
* Crie uma segunda variável para conter o maior número e inicialize-o com o primeiro número. Isso deve estar fora de um loop interno, para que não seja reatribuído até encontrarmos um número maior.
* Crie o loop interno para trabalhar com os sub-arrays.
* Verifique se o elemento da sub-matriz é maior que o maior número armazenado atualmente. Em caso afirmativo, atualize o número na variável.
* Após o loop interno, salve o maior número na posição correspondente dentro da matriz de `results` .
* E finalmente retorne a matriz.
#### Links Relevantes
* [Para loops](http://forum.freecodecamp.com/t/javascript-for-loop/14666s-Explained)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
**(Abordagem declarativa)**
```
function largestOfFour(arr) {
return arr.map(function(group){
return group.reduce(function(prev, current) {
return (current > prev) ? current : prev;
});
});
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/733)
### Explicação do código:
* `Array.prototype.map()` todos os itens dentro da matriz principal para uma nova matriz usando `Array.prototype.map()` e retornamos essa matriz como o resultado final
* dentro de cada matriz interna, reduzimos seu conteúdo a um único valor usando `Array.prototype.reduce()`
* a função de retorno de chamada passada para o método reduce obtém o valor anterior e o valor atual e compara os dois valores
* se o valor atual for maior que o valor anterior, nós o definimos como o novo valor anterior para comparação com o próximo item dentro da matriz ou o retorna para o retorno de chamada do método de mapa se for o último item
#### Links Relevantes
* [Array.prototype.map ()](http://forum.freecodecamp.com/t/javascript-array-prototype-map/14294)
* [Array.prototype.reduce ()](http://forum.freecodecamp.com/t/javascript-array-prototype-reduce/14299)
* [Operadores Ternários](http://forum.freecodecamp.com/t/javascript-ternary-operator/15973)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
**(Abordagem declarativa)**
```
function largestOfFour(arr) {
return arr.map(Function.apply.bind(Math.max, null));
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/17)
### Explicação do código:
TL; DR: Nós construímos uma função de retorno de chamada especial (usando o `Function.bind` método), que funciona como `Math.max` mas também tem `Function.prototype.apply` capacidade de tomar matrizes como seus argumentos ![:smiley:](https://forum.freecodecamp.com/images/emoji/emoji_one/smiley.png?v=3 ":risonho:")
* Começamos mapeando os elementos dentro da matriz principal. Significado cada um dos arrays internos.
* Agora, a necessidade de uma função de retorno de chamada para encontrar o máximo de cada matriz interna fornecida pelo mapa.
Então, queremos criar uma função que faça o trabalho de `Math.max` e aceite a entrada como uma matriz (que por padrão não é por padrão).
Em outras palavras, seria muito legal e simples se isso funcionasse por si só:
`Math.max([9, 43, 20, 6]); // Resulting in 43`
Infelizmente, isso não acontece.
* Para fazer o trabalho de aceitar argumentos na forma de uma matriz, existe esse método `Function.prototype.apply` , mas complica um pouco as coisas _invocando_ a função de _contexto_ .
ie `Math.max.apply(null, [9, 43, 20, 6]);` invocaria algo como um método `Max.max` . O que estamos procurando… quase.
Aqui estamos passando `null` como o _contexto_ do método `Function.prototype.apply` como `Math.max` não precisa de nenhum contexto.
* Como o `arr.map` espera uma função de retorno de chamada, não apenas uma expressão, criamos uma função a partir da expressão anterior usando o método `Function.bind` .
* Como `Function.prototype.apply` é um _método_ estático do mesmo _objeto_ `Function` , podemos chamar `Function.prototype.bind` em `Function.prototype.apply` ou seja, `Function.prototype.apply.bind` .
* Agora passamos o _contexto_ para a chamada `Function.prototype.apply.bind` (nesse caso, queremos `Math.max` para que possamos obter sua funcionalidade).
* Como o método incorporado `Function.prototype.apply` também exigirá um contexto como primeiro argumento, precisamos passar a ele um _contexto_ falso.
* Assim, passamos `null` como o segundo parâmetro para `Function.prototype.apply.bind` que fornece um _contexto_ para o método `Math.max` .
* Como o `Math.max` é independente de qualquer _contexto_ , ele ignora o _contexto_ falso dado pela chamada do método `Function.prototype.apply` .
* Assim, nosso `Function.prototype.apply.bind(Math.max, null)` faz uma nova função aceitando os valores de `arr.map` , isto é, os arrays internos.
#### Links Relevantes
* [Math.max](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max)
* [Function.prototype.apply no DevDocs](http://devdocs.io/#q=js+Function+apply)
* [Function.bind no DevDocs](http://devdocs.io/#q=js+Function+bind)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,68 @@
---
title: Reverse a String
localeTitle: Reverter uma string
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Precisamos pegar a corda e invertê-la, então se ela originalmente lê 'olá', ela agora vai ler 'olleh'. Precisamos dividir a string e, portanto, também trabalharemos com Arrays.
#### Links Relevantes
* [str.split ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)
* [arr.reverse ()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse)
* [arr.join ()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/join)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Comece dividindo a string por caracteres.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Procure a função interna para inverter uma string.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Não se esqueça de juntar os caracteres novamente depois de revertê-los.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function reverseString(str) {
return str.split('').reverse().join('');
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU)
### Explicação do código:
* Nosso objetivo é pegar a entrada, `str` e retorná-la ao contrário. Nosso primeiro passo é dividir a string por caracteres usando `split('')` . Observe que não deixamos nada entre as aspas simples, isso diz à função para dividir a string por cada caractere.
* Usar a função `split()` transformará nossa string em uma matriz de caracteres, tenha isso em mente enquanto avançamos.
* Em seguida, _encadeamos_ a função `reverse()` , que pega nossa matriz de caracteres e os inverte.
* Finalmente, nós _encadeamos_ `join('')` para juntar nossos caracteres em uma string. Observe mais uma vez que não deixamos espaços no argumento para join, isso garante que o array de caracteres seja unido novamente por cada caractere.
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,77 @@
---
title: Slice and Splice
localeTitle: Fatia e Splice
---
## Fatia e Splice
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Precisamos copiar cada elemento da primeira matriz para a segunda matriz, começando no índice n. Também precisamos garantir que as matrizes originais não sejam transformadas. Ou seja, não podemos fazer alterações nos arrays originais.
#### Links Relevantes
* [str.slice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice)
* [str.splice ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
Crie uma cópia da segunda matriz dentro da função. Isso garantirá que o array original não seja alterado. Isso pode ser feito usando a operação de fatia no segundo array e atribuí-lo a uma variável.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Faça um loop em todos os itens da primeira matriz. Para cada item na primeira matriz, junte-o na matriz copiada no índice fornecido como argumento.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Incremente o índice depois de executar a emenda.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](https://discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function frankenSplice(arr1, arr2, n) {
// It's alive. It's alive!
let localArray = arr2.slice();
for (let i = 0; i < arr1.length; i++) {
localArray.splice(n, 0, arr1[i]);
n++;
}
return localArray;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU)
### Explicação do código:
* Nosso objetivo é pegar todos os elementos de `arr1` e inseri-los em `arr2` começando com a posição de índice `n` . Ao mesmo tempo, devemos assegurar que nem `arr` ou `arr2` foram transformados.
* Usando a função `slice()` , podemos criar uma réplica exata de `arr2` e atribuir o resultado da operação a uma variável, `localArray` .
* Agora que temos uma matriz que podemos sofrer mutação, podemos percorrer todos os itens da primeira matriz. Para cada item na primeira matriz, podemos usar a função `splice()` para inserir o item no índice `n` de `localArray` .
* Nós incrementamos o índice `n` por um. Isso garantirá que todos os itens da `arr1` sejam inseridos no `localArray` na posição correta do índice.
* Finalmente, retornamos o `localArray` e terminamos a função.
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,144 @@
---
title: Title Case a Sentence
localeTitle: Title Case a Sentence
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Temos que devolver uma frase com o título do caso. Isso significa que a primeira letra estará sempre em maiúscula e o restante em minúsculas.
#### Links Relevantes
* [Objeto String Global](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)
* [Protótipo de Cadeia JS ToLowerCase](http://forum.freecodecamp.com/t/javascript-string-prototype-tolowercase/15948)
* [Protótipo de seqüência JS ToUpperCase](http://forum.freecodecamp.com/t/javascript-string-prototype-touppercase/15950)
* [Substituição de Protótipo de Cadeia JS](http://forum.freecodecamp.com/t/javascript-string-prototype-replace/15942)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
* Você deve começar dividindo a string em uma matriz de palavras.
* Divida a frase.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
* Você deve tornar a palavra minúscula antes de fazer a primeira letra maiúscula.
* Use o método replace em cada palavra para capitalizar a primeira letra de cada palavra.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
* Você precisará criar uma nova string com partes da anterior e, no final, mesclar tudo em uma única string novamente.
* No método replace, dê o primeiro argumento como a posição da primeira letra usando charAt. Para o segundo argumento, escreva uma função para retornar a letra maiúscula como substituta.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
String.prototype.replaceAt = function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
};
function titleCase(str) {
var newTitle = str.split(' ');
var updatedTitle = [];
for (var st in newTitle) {
updatedTitle[st] = newTitle[st].toLowerCase().replaceAt(0, newTitle[st].charAt(0).toUpperCase());
}
return updatedTitle.join(' ');
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/8)
### Explicação do código:
Estamos modificando a função `replaceAt` usando o protótipo para facilitar o uso do programa.
Divida a string por espaços em branco e crie uma variável para rastrear o título atualizado. Em seguida, usamos um loop para transformar o primeiro caractere da palavra em maiúsculas e o restante em minúsculas. criando uma string concatenada composta de toda a palavra em minúsculas com o primeiro caractere substituído por maiúsculas.
#### Links Relevantes
* [JS For Loops Explained](http://forum.freecodecamp.com/t/javascript-for-loop/14666s-Explained)
* [Divisão de Protótipo de Cadeia JS](http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944)
* [JS String Prototype Substr](http://forum.freecodecamp.com/t/javascript-string-prototype-substr/15945)
* [Junção de protótipo de matriz JS](http://forum.freecodecamp.com/t/javascript-array-prototype-join/14292)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
```
function titleCase(str) {
var convertToArray = str.toLowerCase().split(" ");
var result = convertToArray.map(function(val){
return val.replace(val.charAt(0), val.charAt(0).toUpperCase());
});
return result.join(" ");
}
titleCase("I'm a little tea pot");
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/9)
### Explicação do código:
Estamos fazendo a string inteira em minúscula e depois convertendo-a em array. Então estamos usando a função map para substituir o caractere minúsculo por maiúsculo. Finalmente, estamos retornando a string usando o método `join` .
#### Links Relevantes
* [Mapa de protótipo de matriz JS](http://forum.freecodecamp.com/t/javascript-array-prototype-map/14294)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
```
function titleCase(str) {
return str.toLowerCase().replace(/(^|\s)\S/g, (L) => L.toUpperCase());
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/14)
### Explicação do código:
A solução funciona primeiro diminuindo todos os caracteres da string e, em seguida, apenas o primeiro caractere de cada palavra.
* Minúscula a cadeia inteira usando `str.toLowerCase()` .
* Substitua o primeiro caractere de cada palavra para maiúscula usando `.replace` .
* Procure por caractere no início de cada palavra, ou seja, corresponde a qualquer caractere após um `space` ou corresponde ao primeiro caractere de toda a cadeia, usando o seguinte padrão.
* Explicação de Regex:
* Encontre todos os caracteres que não são espaços em branco `(\S` )
* No começo da string `(^)`
* Ou depois de qualquer caractere de espaço em branco `(\s)`
* O modificador `g` procura outro padrão de palavras em toda a cadeia e as substitui.
* Esta solução funciona com símbolos nacionais e letras acentuadas, conforme ilustrado pelos seguintes exemplos
`international characters:` 'бабушка курит трубку' // -> 'Бабушка Курит Трубку'
`accented characters:` 'località àtilacol' // -> 'Località Àtilacol'
#### Links Relevantes
* [Recursos JS Regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,101 @@
---
title: Truncate a String
localeTitle: Truncar uma string
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Precisamos reduzir o comprimento da string ou **truncá-** la se ela for maior que os comprimentos máximos especificados e adicionar `...` ao final. Se não for esse tempo, então o mantemos como está.
#### Links Relevantes
* [String.prototype.slice ()](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-String-Prototype-Slice)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
As strings são imutáveis em JavaScript, então precisaremos de uma nova variável para armazenar a string truncada.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Você precisará usar o método slice () e especificar onde iniciar e onde parar.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Não se esqueça que quando truncamos a palavra, também devemos contar o comprimento adicionado por `...`
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function truncateString(str, num) {
// Clear out that junk in your trunk
if (str.length > num && num > 3) {
return str.slice(0, (num - 3)) + '...';
} else if (str.length > num && num <= 3) {
return str.slice(0, num) + '...';
} else {
return str;
}
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/55)
### Explicação do código:
* Primeiro, começamos com uma simples declaração `if` para determinar um dos três resultados…
* Se o tamanho da nossa string for maior que o `num` que queremos truncar, e o nosso ponto truncado tiver pelo menos três caracteres ou mais na string, retornamos uma fatia da nossa string começando no caractere 0 e terminando na `num - 3` . Em seguida, acrescentamos nosso `'...'` ao final da string.
* No entanto, se o tamanho da nossa string for maior que o `num` mas `num` estiver entre os três primeiros caracteres, não precisamos contar nossos pontos como caracteres. Portanto, retornamos a mesma string acima, com uma diferença: o ponto final de nossa fatia agora é apenas `num` .
* Finalmente, se nenhuma das situações acima forem verdadeiras, isso significa que o tamanho da nossa string é menor que o `num` do nosso truncamento. Portanto, podemos apenas retornar a string.
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
```
function truncateString(str, num) {
if (str.length <= num) {
return str;
} else {
return str.slice(0, num > 3 ? num - 3 : num) + '...';
}
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/54)
### Explicação do código:
* Primeiro, precisamos de uma instrução if para testar se o comprimento da string completa passou como o primeiro argumento já se encaixa dentro do limite de tamanho passado como o segundo argumento. Se assim for, podemos apenas retornar a string que foi passada.
if (str.length <= num) return str;
* Se a nossa declaração `if` falhar, passamos para o `else` , onde vamos retornar uma "fatia" da string. O método slice extrai uma seção de uma string e retorna uma nova string. Aqui nós passamos 0 como o ponto de partida para a nossa fatia. Para determinar o ponto final, usamos um operador ternário: `num > 3 ? num - 3 : num` . Em nosso ternário, se `num` for maior que 3, devemos fatorar os três pontos em nosso comprimento total e, assim, terminar nossa fatia em `num-3` . Se num for menor ou igual a 3, nossa fatia obtém uma variável final de apenas `num` . Finalmente, o `'...'` é anexado ao final da nova string e é retornado.
} outro { return str.slice (0, num> 3? num - 3: num) + '…'; }
* **OBSERVAÇÃO** Para entender o código acima, você precisa entender como funciona um Operador Ternário. O Operador Ternário é freqüentemente usado como um atalho para a declaração `if` e segue este formato: `condition ? expr1 : expr2` . Se a `condition` avaliada como verdadeira, o operador retornará o valor de `expr1` . Caso contrário, retorna o valor de `expr2` .
#### Links Relevantes
* [Operador condicional (ternário)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)
* [String.prototype.slice ()](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-String-Prototype-Slice)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.

View File

@@ -0,0 +1,205 @@
---
title: Where Do I Belong
localeTitle: Onde eu pertenço
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
Isso pode ser um problema difícil de entender. Você precisa encontrar onde no array um número deve ser inserido por ordem e retornar o índice para onde ele deve ir.
#### Links Relevantes
* [Tipo de matriz JS](http://forum.freecodecamp.com/t/javascript-array-prototype-sort/14306)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
A primeira coisa a fazer é classificar o array de menor para maior, apenas para facilitar o código. É aqui que o sort vem, ele precisa de uma função de callback, então você precisa criá-lo.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
Depois que a matriz é classificada, basta verificar o primeiro número que é maior e retornar o índice.
> _tente resolver o problema agora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
Se não houver um índice para esse número, você também terá que lidar com esse caso.
> _tente resolver o problema agora_
## Alerta de Spoiler!
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**Solução à frente!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
for (var a = 0; a < arr.length; a++) {
if (arr[a] >= num)
return a;
}
return arr.length;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/36)
## Explicação do código:
* Primeiro, classifico a matriz usando `.sort(callbackFuntion)` para classificá-la da mais baixa para a mais alta, da esquerda para a direita.
* Então eu uso um loop for para comparar os itens na matriz, começando pelo menor. Quando um item na matriz é maior que o número que estamos comparando, então retornamos o índice como um inteiro.
#### Links Relevantes
* [parseInt ()](http://forum.freecodecamp.com/t/javascript-parseint/14686)
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
```
function getIndexToIns(arr, num) {
// Find my place in this sorted array.
var times = arr.length; // runs the for loop once for each thing in the array
var count = 0;
for (var i=0;i<times;i++){
if(num>arr[i]){count++;} } // counts how many array numbers are smaller than num
return count; // the above equals num's position in a sorted array
}
getIndexToIns([40, 60], 50);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/2547)
## Explicação do código:
* Eu não classifico a matriz de entrada arr
* Eu executo uma contagem de loop for sempre que a entrada num for maior que um número de entrada de arr.
* Esse número é equivalente a qual posição do num seria em uma matriz classificada.
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
por [@HarinaPana](/u/harinapana)
```
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
var i = 0;
while (num > arr[i]) {
i++;
}
return i;
}
getIndexToIns([40, 60], 50);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/4135)
## Explicação do código:
* Classifique o array existente.
* Iterar através da matriz, verificando se _num_ é maior.
* O loop irá parar quando _num_ não for maior que _i_ e retornar o último elemento selecionado.
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
por [@faustodc](/u/faustodc)
```
function getIndexToIns(arr, num) {
arr.push(num);
arr.sort(function(a, b){return ab});
return arr.indexOf(num);
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/EB10/1)
## Explicação do código:
* Primeiro, adicionamos o número `num` ao array usando `push()` que o adiciona como o último elemento do array.
* Em seguida, usamos `sort()` com a função de callback function `function(a, b){return ab}` para ordenar os números em ordem crescente.
* Por fim, retornamos a posição ou índice de `num` na matriz com a função `indexOf()` .
#### Links Relevantes
* [empurrar()](http://forum.freecodecamp.com/t/javascript-array-prototype-push/14298)
* [ordenar()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
* [índice de()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":girassol:") Solução de Código Intermediário:
**Usando `.findIndex()`**
```
function getIndexToIns(arr, num) {
// sort and find right index
var index = arr.sort((curr, next) => curr > next)
.findIndex((currNum)=> num <= currNum);
// Returns proper answer
return index === -1 ? arr.length : index;
}
getIndexToIns([40, 60], 500);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/CLjU/63)
## Explicação do código:
* Primeiro, classifique a matriz em ordem crescente, isso é feito atualmente usando funções de matriz para pegada mínima.
* Uma vez que a matriz é ordenada, nós aplicamos diretamente o `.findIndex()` onde vamos comparar todos os elementos na matriz até encontrarmos onde `num <= currNum` significando onde o número que queremos inserir é menor ou igual ao número atual número na iteração.
* Em seguida, usamos operações ternárias para verificar se recebemos um índice retornado ou `-1` . Nós só obtemos `-1` quando o índice não foi encontrado significando quando recebemos um falso para todos os elementos na matriz, e para tal caso, isso significaria que `num` deve ser inserido no final da lista, portanto, por que usamos `arr.length` .
#### Links Relevantes
* [Array.findIndex ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex)
* [Funções de seta](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
* [Operador Ternário](http://forum.freecodecamp.com/t/javascript-ternary-operator/15973)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 ": rotating_light:") Solução avançada de código:
por [@nivrith](/u/nivrith)
```
function getIndexToIns(arr, num) {
return arr.concat(num).sort((a,b) => ab).indexOf(num);
}
getIndexToIns([1,3,4],2);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":foguete:") [Executar código](https://repl.it/IUJE/0)
## Explicação do código:
* Usamos o método de encadeamento para invocar um método após o outro para resolver o problema em uma única linha. Primeiro nós mesclamos `arr` e `num` invocando o método arr.concat (num)
* Em seguida, usamos `sort()` com a **função de seta de** retorno de chamada `(a, b) => return ab` para classificar os números em ordem crescente
* Por fim, retornamos a posição ou índice de `num` na matriz com o método `indexOf()`
#### Links Relevantes
* [Método de encadeamento em JavaScript](https://schier.co/blog/2013/11/14/method-chaining-in-javascript.html)
* [concat ()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/concat?v=example)
* [Funções de seta](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":prancheta:") NOTAS PARA CONTRIBUIÇÕES:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **NÃO** adicione soluções semelhantes às soluções existentes. Se você acha que é **_semelhante, mas melhor_** , tente mesclar (ou substituir) a solução semelhante existente.
* Adicione uma explicação da sua solução.
* Categorize a solução em uma das seguintes categorias - **Básica** , **Intermediária** e **Avançada** . ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":semáforo:")
* Por favor, adicione seu nome de usuário somente se você adicionou qualquer **conteúdo principal relevante** . ( ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":Aviso:") **_NÃO_** _remova nenhum nome de usuário existente_ )
> Vejo ![: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 referência.