Skip to main content

Command Palette

Search for a command to run...

10/30 - 30 dias de HackerRank

Published
•3 min read•View as Markdown
10/30 - 30 dias de HackerRank

Breaking the Records

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:

                                     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.

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 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.

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!

More from this blog

Lucas Nabesima

22 posts