Saudações. Hoje enfrentaremos mais um problema,veremos como dois irmãos dividem seu chocolate, mas com algumas regras específicas para serem seguidas. No exercício nos é passado algumas regras a serem seguidas para que sua conclusão seja correta, vejamos:
SubArrayDivision -
Antes de tudo, vamos passar os parâmetros exigidos pelos irmãos, para que Ron, o irmão receba de Lily a irmão os chocolates.
- s=number of choco,d= ron day,m= ron month
- encontrar o seguimento em que:
- quantidade de pedaços = m; soma dos pedaços = d
Sabendo assim todas as regras do exercício, temos que saber agora sobre um molde. Com o que se foi passado antes, o exercício nos pede o seguinte resultado:
5
1 2 1 3 2
3 2
Com todas as exigências postas,façamos o que se pede:
function birthday(s, d, m) {
const possibleSegments = s
.reduce((acc,_,i,arr) => {
acc.push(arr.slice(i,i+m));
return acc;
},[])
.filter(seg => seg.length === m)
const correctSegment = possibleSegments
.filter(seg => seg.reduce((acc,cur) => acc + cur) === d)
return correctSegment.length
}
A função birthday
recebe três parâmetros: s
(um array de inteiros), d
(um número inteiro) e m
(um número inteiro).
A primeira parte da função usa o método reduce para dividir o array s em segmentos consecutivos com comprimento m. Cada segmento é adicionado ao array acc, que é retornado ao final do reduce.
Em seguida, o método filter é usado para filtrar apenas os segmentos com comprimento igual a m.
Em seguida, passa a regra onde usará um reduce para filtrar a soma de pedaços do chocolate.
O resultado será:
5//pedaços
1 2 1 3 2 // a lista dada
3 2 // 3:dia de aniversário RON, 2:
mês RON
2// ele deseja os comprimentos 2 que somam 3,como existem apenas duas possibilidades: [1,2] e [2,1], só existem 2. Pois ele pediu o número de vezes, onde ao final do código retornamos .length
Com isso finalizamos mais um episódio do HackerRank. Até a próxima!!
Top comments (0)