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:
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:
Top comments (0)