DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Entre notas e velinhas.

Com foco em melhorar ainda mais o rendimento e aprendizado em uma linguagem, também exercendo a lógica da programação, nessa nova série de resoluções irei demonstrar como resolvi certos conflitos de lógica: alguns simples, outros que necessitam de mais esforço.

Compare the Triples

Nesse primeiro exercício, os personagens Ana e Bob criaram um array de números. Nosso objetivo é simple: fazer uma análise dos parâmetros que estão guardados na função comapareTriples(a,b), que representam os dois personagens nessa exata ordem e caso Ana tenha um ponto maior no array respectivo ao do Bob, ela recebe ponto. O raciocínio é feito também para o Bob, e caso os dois tenham resultados iguais, ninguém recebe. Veja mais a seguir ->

_"The task is to find their comparison points by comparing a[0] with b[0], a[1] with b[1], and a[2] with b[2].

If a[i] > b[i], then Alice is awarded 1 point.
If a[i] < b[i], then Bob is awarded 1 point.
If a[i] = b[i], then neither person receives a point."_

O desafio nos dá um exemplo de como deseja que sigamos o raciocínio:

[5 6 7] //sendo Alice
[3 6 10] // sendo Bob
/*Apenas para viés de informação dos que estão iniciando programação também: cada primeiro parâmetro de array, quando colocado em posições, representa o valor 0, não 1. 
Exe: [5 6 7], representaria 0[5], 1[6] e 2[7]*/
Enter fullscreen mode Exit fullscreen mode

É possível resolver esse desafio de muitas formas. A forma que fiz foi a seguinte:

function compareTriples(a,b){

return a.reduce((acum,cur,i) => {
    let alicePoints = cur
    let bobPoints = b[i]
      if(alicePoints > bobPoints) acum[0]++
      else if(bobPoints > alicePoints) acum[1]++
  return (acum)
  },[0,0])
}
Enter fullscreen mode Exit fullscreen mode

(Nesse caso acima feito por mim, baseado em uma resolução alternativa.)

A função compara cada elemento correspondente dos dois arrays e retorna um array com duas contagens. No primeiro caso é contado o número de vezes que a foi maior que b, assim como vice-versa.

A função "reduce" recebe como primeiro argumento uma função de callback, que é chamada para cada elemento do array, e um valor inicial, que é [0,0] no nosso caso. Dentro da função de callback, as variáveis "aliceNote" e "bobNote" armazenam os valores dos elementos correspondentes deles.

birthdayCakeCandles

Já nesse caso, existem 4 velas em um bolo de aniversário. Nosso objetivo é contar quais as velas mais altas.

Abaixo o exemplo que ele nos dá para segur:

4 // representa o número de velas que tem, nada mais.
3 2 1 3 //existem duas velas com tamanho 3, nosso objetivo é agarrar essas duas velas.


//ele espera o resultado 2, baseado no número de elementos mais altos
Enter fullscreen mode Exit fullscreen mode

É possível resolver esse desafio de muitas formas. A forma que fiz foi a seguinte:

function birthdayCakeCandles(candles) {
    let candleTall = Math.max(...candles);
    let result = candles.filter(vela => vela === candlTall).length

    return result
}
Enter fullscreen mode Exit fullscreen mode

No caso acima, declaramos uma variável candleTall que serve para retirar as velas mais altas. Essa variável recebe o objeto Math.max que irá pegar os maiores valores da variável, mas queremos que ele pegue os números da lista candles que estão dentro do bCC, portanto desestruturamos o que está dentro do candles.

Logo após isso criamos uma variável result que irá pegar todo o procedimento e retornar o desejado. Esta recebe a lista candles.filtes, que irá ser o um parâmetro vela, e irá receber candle IGUAL a variável candleTall,se livrando dos outros valores da função declarada e pegando só os mais altos. O .length se refere a transormar a lista que tem dois elementos [3,3] em 2.

Depois retornamos o result e vemos ele fazer o processo.

Obrigado por ler e até a próxima.

Top comments (0)