DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: Cortando palitos

Olá, seja bem vindo a mais um Resolvendo problemas no HackerRank: No caso de hoje, iremos cortar palitos para que eles estejam do mesmo tamanho e depois descartá-los. Vejamos mais informações com a explicação detalhada e sua resolução.

Cut the sticks -

Você recebe vários bastões de comprimentos variados. Você cortará iterativamente os palitos em palitos menores, descartando os pedaços mais curtos até não sobrar nenhum. Em cada iteração, você determinará o comprimento do bastão mais curto restante, cortará esse comprimento de cada um dos bastões mais longos e descartará todos os pedaços desse menor comprimento. Quando todos os bastões restantes tiverem o mesmo comprimento, eles não podem ser encurtados, então descarte-os.

Dados os comprimentos de N bastões, imprima o número de bastões restantes antes de cada iteração até que não reste nenhum.

Vejamos um exemplo:

  • arr = [1,2,3]

O palito de menor comprimento é 1, logo cortamos esse comprimento dos dois mais longos e descarte os pedaços de comprimento de 1. Temos agora arr = [1,2]. Novamente, o palito mais curto tem comprimento 1, então cortamos essa quantidade do palito mais longo e descarte esses pedaços. Resta apenas, arr = [1], então o descartamos. O número de bastões em cada iteração será: [3,2,1].

  • return: int[]: o número de sticks após cada iteração.

Vejamos o código em ação:

function cutTheSticks(arr) {
    // Write your code here
  let min = 0;
  let count = 0;
  let result = []

  for(let wow = 0; wow < arr.length; wow += 1) {
    let filtered = arr.filter((value) => value > 0);
    count = 0;

  min = filtered.sort((a, b) => a - b)[0];

  for(let index = 0; index < arr.length; index += 1) {
    if(arr[index] > 0) {
    arr[index] = arr[index] - min;
    count ++;
    }
  }

  count > 0 && result.push(count);
  }

  return result;

}
Enter fullscreen mode Exit fullscreen mode

O código utiliza dois loops for para iterar sobre o array "arr". Dentro do primeiro loop, é feita a filtragem dos valores maiores que zero do array "arr" e é armazenado em "filtered". Depois é definido o valor mínimo de "filtered" em "min". Em seguida, dentro do segundo loop, é verificado se o valor atual do array é maior que zero. Se sim, o valor é subtraído do valor mínimo encontrado em "filtered" e a variável "count" é incrementada. Esse segundo loop realiza a operação de corte dos bastões.

Fora dos loops, é verificado se "count" é maior que zero e se for, adiciona ao array "result". Ao final dos loops, "result" é retornado. O código utiliza o método "filter()" para filtrar os valores maiores que zero e o método "sort()" para ordenar o array em ordem crescente. A função também utiliza variáveis como "min", "count" e "result" para armazenar valores e realizar contagens.

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

Top comments (0)