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 1Dado 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:
Criar uma variável para armazenar a pontuação máxima;
Criar uma variável para armazenar a pontuação mínima;
Criar uma variável para contar quantas vezes o recorde máximo foi quebrado;
Criar uma variável para contar quantas vezes o recorde mínimo foi quebrado;
Armazenar o resultado do primeiro jogo como recorde máximo e mínimo da temporada;
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.
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.

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



