DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Um novo desafio para Sherlock

Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, Watson deseja desafiar mais uma vez as capacidades de Sherlock, põe sobre ele um desafio. Vejamos agora uma explicação detalhada e sua resolução.

Sherlock and Squares -

Watson gosta de desafiar a habilidade matemática de Sherlock. Ele fornecerá um valor inicial e final que descreve um intervalo de números inteiros, incluindo os pontos finais. Sherlock deve determinar o número de inteiros quadrados dentro desse intervalo.

Um inteiro quadrado é um inteiro que é o quadrado de um inteiro, exemplo:

Image description

Teremos como parâmetros:

  • int a: o limite inferior do intervalo
  • int b: o limite superior do intervalo
  • return: O número de quadrados inteiros no intervalo entre os dois.

Vejamos o código:

function squares(a, b) {
    // Write your code here
    let squareRootA = parseInt(Math.sqrt(a));
    let squareRootB = parseInt(Math.sqrt(b));
    let count = 0;

    if((squareRootA * squareRootA) === a) count++;
    if ((squareRootB - squareRootA) >= 0) 
    return (squareRootB - squareRootA) + count;
    return 0+count
}
Enter fullscreen mode Exit fullscreen mode

A função retorna a quantidade de números inteiros entre a e b (incluindo a e b) que são quadrados perfeitos (ou seja, têm raiz quadrada exata).

Para isso, a função começa criando duas variáveis squareRootA e squareRootB, que representam a raiz quadrada inteira de a e b, respectivamente. A função então inicializa uma variável count em 0.

Em seguida, a função verifica se squareRootA é um quadrado perfeito, comparando squareRootA * squareRootA com a. Se squareRootA * squareRootA for igual a a, significa que a é um quadrado perfeito e, portanto, incrementa count em 1.

A função então verifica se a diferença entre squareRootB e squareRootA é maior ou igual a zero. Se for, significa que há pelo menos um número inteiro entre squareRootA e squareRootB que é um quadrado perfeito (além de a, se a for um quadrado perfeito). Nesse caso, a função retorna (squareRootB - squareRootA) + count, que é a quantidade de números inteiros entre a e b que são quadrados perfeitos. Se a diferença entre os dois for menor que 0, significa que não há nenhum número inteiro entre a e b que é um quadrado perfeito, então a função retorna 0 + count.

O resultado final encontrado por Sherlock será:

2
3 9
17 24

input:
2
0
Enter fullscreen mode Exit fullscreen mode

Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.

Top comments (0)