Olá, seja bem vindo a mais uma etapa do Resolvendo problemas no Hacker-Rank,nessa sessão iremos dividir meias que estão categorizadas dentro de um array de números. Cada número representa uma cor. Vejamos como separar isso.
Sales by Match -
O problema é direto e nos diz:"Determine quantos pares de meias com cores correspondentes existem." Logo após ele nos dá a sequência:
- n = 7
- arr = [1,2,1,2,1,3,2]
Conseguimos formar um par de cor 1(arr[1,1]),e um par de cor 2(arr[2,2]), sobrando [1,2,3] um de cada cor.
O código para resolver isso foi feito usando Reduce, da seguinte maneira:
function sockMerchant(n, ar) {
// Write your code here
const count = ar.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
const numbersPairs = Object.values(count).reduce((acc, cur) => {
return acc + Math.floor(cur / 2);
}, 0);
return numberPairs;
}
A primeira linha da função cria uma variável count
e a inicializa como um objeto vazio. Isso é feito para armazenar a contagem de cada cor de meia presente no array ar. É usado o (acc[cur] ||0)+1
para verificar se a cor da meia já existe. Caso sim,adiciona 1 e caso não se cria um contador com início de valor 1.
Depois disso, a função Object.values
é usada para obter um array com os valores dos contadores presentes no objeto count
. Esses valores são passados como primeiro argumento para a função reduce seguinte que recebe os mesmos dois parâmetros que a função reduce anterior.
A função passada como primeiro argumento para reduce soma o número de pares de meias encontrados para cada cor de meia presente em count. Isso é feito dividindo o valor do contador por 2, arredondando para baixo com Math.floor, e somando o resultado ao acumulador acc. O resultado final é retornado no final da função reduce.
Por fim, o resultado final é retornado pela função sockMerchant.
Com isso concluímos mais um episódio, e nos vemos na próxima!!!
Top comments (0)