# 10/30 - 30 dias de HackerRank

> ## [Breaking the Records](https://www.hackerrank.com/challenges/breaking-best-and-worst-records/problem)
> 
> Maria joga basquete na faculdade e gostaria de se profissionalizar. Toda temporada ela mantém um controle do pontos que ela fez. Ela tabula a quantidade de vezes que ela quebra o recorde da temporada para mais e menos pontos. Pontos marcados no primeiro jogo estabelecem o recorde para a temporada, e ela começa a contar a partir dele.
> 
> **Exemplo**:
> 
> \\(scores= [12, 24, 10, 24]\\)
> 
> Os pontos são organizados na mesma ordem em que os jogos são jogados. Ela tabulou seus resultados na tabela abaixo:
> 
> ```plaintext
>                                      Count
>     Game  Score  Minimum  Maximum   Min Max
>      0      12     12       12       0   0
>      1      24     12       24       0   1
>      2      10     10       24       1   1
>      3      24     10       24       1   1
> ```
> 
> Dado seu placar para uma temporada, determine a quantidade de vezes que Maria quebrou seu recorde para mais e menos pontos.

Para resolver esse problema, precisamos comparar se os resultados apresentados, que virão em uma *array* de pontuação, são maiores ou menores que as pontuações extremas que a Maria conseguiu nos jogos.

Podemos organizar nosso pensamento nesse algoritmo:

1.  Criar uma variável para armazenar a pontuação máxima;
    
2.  Criar uma variável para armazenar a pontuação mínima;
    
3.  Criar uma variável para contar quantas vezes o recorde máximo foi quebrado;
    
4.  Criar uma variável para contar quantas vezes o recorde mínimo foi quebrado;
    
5.  Armazenar o resultado do primeiro jogo como recorde máximo e mínimo da temporada;
    
6.  Iterar pelo *array* de resultados e verificar se o elemento é maior que a pontuação máxima. Se for, adicionar 1 ao contador de quebra de recorde máximo. Em seguida, verificar se o elemento é menor que a pontuação mínima. Se for, adicionar 1 ao contador de quebra de recorde mínimo.
    
7.  Retornar os contadores.
    

Vamos começar a construir a função que resolve esse problema declarando as nossas variáveis de controle, tanto as que armazenam as pontuações máximas e mínimas quanto as contadoras das quebras de recorde.

```javascript
function breakingRecords(scores) {
  let maxScore = scores[0];
  let minScore = scores[0];
  let timesMaximumScoreRecordBroken = 0;
  let timesMinimumScoreRecordBroken = 0;
}
```

Inicializamos as variáveis `maxScore` e `minScore` com o primeiro elemento da *array* de pontuação, e as duas variáveis contadoras com `0`.

Em seguida, iteramos por toda *array* usando o método [forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) e comparamos o elemento atual com as variáveis máximas e mínimas. Se ele for maior que o máximo, armazenamos seu valor na variável `maxScore` e incrementamos `1` à nossa variável contadora `timesMaximumScoreRecordBroken`. Fazemos a mesma comparação com a variável `minScore`.

Após as comparações, retornamos os valores de `timesMaximumScoreRecordBroken` e `timesMinimumScoreRecordBroken`.

```javascript
const scores = [3, 4, 21, 36, 10, 28, 35, 5, 24, 42];

function breakingRecords(scores) {
  let maxScore = scores[0]; //3
  let minScore = scores[0]; //3
  let timesMaximumScoreRecordBroken = 0;
  let timesMinimumScoreRecordBroken = 0;

  scores.forEach(cur => {
    if (cur > maxScore) {
      maxScore = cur;
      timesMaximumScoreRecordBroken += 1;
    }

    if (cur < minScore) {
      minScore = cur;
      timesMinimumScoreRecordBroken += 1;
    }
  });
  return [timesMaximumScoreRecordBroken, timesMinimumScoreRecordBroken]; //[4, 0]
}
```

Aparentemente está tudo certo! O que nos resta agora é verificar se a nossa lógica está correta.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1670099549026/aI3vgey6V.png align="middle")

Deu tudo certo! 🥳  
Até o próximo desafio!
