Zerando HackerRank ( 15 )
Published: 2023-03-16 03:11:48

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8rtlfx1vvbugyjmf92ta.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amjmli8ps0lhbmt3mlsr.png)