DEV Community

Gabriel J
Gabriel J

Posted on

2

Zerando HackerRank ( 15 )

E no décimo quinto desafio desta serie que queima os miolos, vamos abordar um problema que envolve ordenação.
Neste problema O protagonista se chama David, e ele tem vários contêineres como na imagem abaixo:

Image description

Cada contêiner tem um número específico de bolas.
O primeiro contêiner tem uma linha indicando o tipo do contêiner e na coluna o tipo de bola.

O Objetivo é que o contêiner 1 tenha as bolas somente de um tipo, enquanto no contêiner 2 da mesma forma tenha os contêineres de outro tipo.

Ciaremos a função organizingContainers ela recebe um array que representa o número de bolas de cada tipo em cada recipiente, e retorna uma string indicando se é possível organizar as bolas de forma que cada recipiente contenha apenas bolas de um único tipo ou se é impossível fazer isso.

Nossa função vai funcionar da seguinte forma:

1- const numContainers = container.length; - cria uma variável numContainers que armazena o número de containers (ou recipientes) no array container, que é igual ao comprimento do array container.

2- const numTypes = container[0].length; - cria uma variável numTypes que armazena o número de tipos de bolas no array container, que é igual ao comprimento do primeiro subarray em container.

3- const capacities = new Array(numContainers).fill(0); - cria um array capacities com numContainers elementos, preenchidos com zeros. Esse array será usado para armazenar a capacidade de cada recipiente (a soma do número de bolas de todos os tipos em cada recipiente).

4- const quantities = new Array(numTypes).fill(0); - cria um array quantities com numTypes elementos, preenchidos com zeros. Esse array será usado para armazenar a quantidade de bolas de cada tipo (a soma do número de bolas de cada tipo em todos os recipientes).

5- for (let i = 0; i < numContainers; i++) { - começa um loop for que percorre todos os recipientes em container.
for (let j = 0; j < numTypes; j++) { - começa um loop for aninhado que percorre todos os tipos de bolas em cada recipiente.

6- capacities[i] += container[i][j]; - adiciona a quantidade de bolas do tipo j no recipiente i ao total de bolas do recipiente i armazenado em capacities[i].

7- quantities[j] += container[i][j]; - adiciona a quantidade de bolas do tipo j no recipiente i à contagem de bolas do tipo j armazenada em quantities[j].

8- capacities.sort((a, b) => a - b); - classifica o array capacities em ordem crescente de capacidade de recipiente.
quantities.sort((a, b) => a - b); - classifica o array quantities em ordem crescente de contagem de bolas de cada tipo.

9- for (let i = 0; i < numTypes; i++) { - começa outro loop for que percorre todos os tipos de bolas em container.

10- if (capacities[i] !== quantities[i]) { return "impossible"; } - verifica se a capacidade do recipiente i em capacities é igual à contagem de bolas do tipo i em quantities. Se não for, significa que não é possível organizar as bolas em recipientes separados por tipo e a função retorna "impossible".

11- return "possible"; - se a função não retornou "impossible" no loop for anterior, significa que é possível organizar as bolas em recipientes separados por tipo e a função retorna "possible".

Essa função vai ficar dessa forma:

Image description

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay