Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, vamos pegar alguns números que estão dentro de um parâmetro e após separá-los, os dividir pelo valor anterior e ver se as opções definem um resultado igual a 0, que significaria que eles são divisíveis pelo valor original. Confuso? Vejamos agora uma explicação detalhada e vejamos a resolução.
Find Digits -
Um inteiro d
é um divisor de um inteiro n
se o resto de(n /d = 0). Dado um número inteiro, para cada dígito que compõe o número inteiro, determinemos se ele é um divisor. Conte o número de divisores que ocorrem dentro do inteiro.
Vejamos alguns exemplos:
n = 124, vamos analisar se 1,2 e 4 são divisíveis por 124 cada um em sua vez individual. Todos eles realmente são divisíveis por 124, logo retornaremos 3 pois é o comprimento de valores que são divisíveis.
n = 111, todos são os 1s são divisíveis por 111, logo ele retornamos 3 também.
n = 10, vamos analisar se 1 e 0 são divisíveis por 10, infelizmente 0 não é divisível por 0 (10/0, não é possível dividir 0), mas 1 é. Logo retornaremos apenas 1, pois é que pode ser retornado.
Vejamos a resolução desse código nesse momento:
function findDigits(n) {
return[...n + '']
.map(n => + n)
.filter(d => n % d === 0).length;
}
No caso acima, a expressão n + ''
transforma o valor de n
em uma string, para que seja possível percorrer cada um dos seus dígitos com a função map()
. O operador (...) spread é utilizado para transformar essa string em um array, de modo que possamos usar a função map()
sobre cada caractere individualmente.
Suponhamos que o valor dentro dele fosse 10, no caso acima a expressão n + ''
seria como 10 + '', fazendo 10 se tornar uma string( "10"), o fazendo percorrer o `.map, porém como o spread vem antes disso, ele separa individualmente os valors para cada caractere indiviual. Sendoa assim, o 10, se tornaria "[1]" e "[0]".
A função .map
retorna cada parâmetro dentro de n
( que no exemplo rápido atrás seria "[1]" e "[0]" que foram desmembrados e separados em arrays próprios. O operador + é utilizado para transformar cada um desses dígitos de volta em um número. Sendo assim, agora seria [1] e [0].
Ao finalizar, fazemos um filter
visto que nós queremos pegar o valor deles ali dividido pelo seu valor original de n
e ver se ele é igual a 0. A função filter() é usada para filtrar apenas os números que são divisíveis por n sem deixar resto. Esses números são armazenados em um novo array. E depois pegamos o comprimento do valor final que é o que desejamos.
O resultado será:
1 e 2 são divisíveis por 12, logo retornamos 2. Já 1,0,1 e 2, somente 1,1 e 2 são divisíveis por 1012, retornamos 3.
Assim, concluímos mais um Resolvendo problemas no HackerRank: até a próxima.
Top comments (0)