Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
Cómo dividir una matriz en tres matrices de manera que se dividan de la manera más justa posible JavaScript

Aquí está mi matriz:

 const sorted = [ { pwr: 10 }, { pwr: 9 }, { pwr: 9 }, { pwr: 8 }, { pwr: 6 }, { pwr: 6 }, { pwr: 2 }, { pwr: 2 }, { pwr: 1 }, ];

Lo que quiero hacer es dividirlo en tres matrices separadas de manera que el valor total de pwr en cada matriz sea el valor más cercano a las otras matrices.

Por ejemplo, esta no es una división justa en absoluto:

 arr1: [ { pwr: 10 }, { pwr: 9 }, { pwr: 9 }] arr2: [ { pwr: 8 }, { pwr: 6 }, { pwr: 6 }] arr3: [ { pwr: 2 }, { pwr: 2 }, { pwr: 1 }]

Dado que el valor total de arr1 es 10+9+9 = 28 , mientras que arr2 es 20 y arr3 es solo 5 .

La matriz dividida debería ser algo como esto:

 arr1: [ { pwr: 10 }, { pwr: 6 }, { pwr: 1 }] arr2: [ { pwr: 9 }, { pwr: 6 }, { pwr: 1 }] arr3: [ { pwr: 9 }, { pwr: 8 }, { pwr: 2 }] arr1 =17 arr2=16 arr3=19 which is somehow fair.

Mi sugerencia es elegir de la primera matriz (que está ordenada de forma predeterminada) de esta manera:

En la primera etapa, arr1 obtiene el primer elemento (índice0) y arr2 obtiene los segundos elementos (índice1), y arr3 obtiene 2 elementos (índice 2 e índice3):

 arr1[{pwr: 10}] arr2[{pwr: 9}] arr3[{pwr:8},{pwr:6}]

Luego, a partir de ahora, cada matriz obtiene solo un elemento hasta que finaliza el elemento ordenado. Quiero decir que volvemos a arr1 y le damos el siguiente elemento (índice4), luego arr2 obtiene (índice5) arr3 (índice6) nuevamente arr1 (índice7) y...

¿Tienen alguna idea para lograr arreglos más justos? ¿Podrían proporcionarme fragmentos?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

He echado un vistazo al problema y se me ocurrió la siguiente solución. Creo que se puede hacer mucho mejor, pero creo que funciona. El código de abajo fragmenta la matriz ordenada en fragmentos del tamaño 3 si es posible. Luego encuentra la matriz con la suma más baja y le agrega el objeto con el mayor valor de potencia. Eso va hasta que no haya entradas ordenadas a la izquierda. Las matrices finales están en el objeto de matrices y no son independientes.

 let sorted = [ { pwr: 10 }, { pwr: 9 }, { pwr: 9 }, { pwr: 8 }, { pwr: 6 }, { pwr: 6 }, { pwr: 2 }, { pwr: 2 }, { pwr: 1 }, { pwr: 1} // <- this was added to test if it works if no even chunks are possible ]; const getSum = (a) => { return a.reduce((acc, value) => { if (!value) return acc + 0; return acc + value.pwr; }, 0); } const chunk = (array, size = 1) => { let chunks = []; let chunk = []; for (let i = 0; i < array.length; i++) { chunk.push(array[i]); if ((i + 1) % size === 0) { chunks.push(chunk); chunk = []; }; }; if (chunk.length !== 0) { chunks.push(chunk); }; return chunks; }; let arrays = { arr1: [], arr2: [], arr3: [] } sorted = chunk(sorted, 3); sorted.forEach((chunk) => { let a = []; Object.keys(arrays).forEach((arr) => { a.push({ name: arr, value: getSum(arrays[arr]) }); }); a.sort((a, b) => { return a.value - b.value; }); for (let i = 0; i < a.length; i++) { if (chunk[i]) { arrays[a[i].name].push(chunk[i]); } }; }); // this just outputs the result console.log(arrays); Object.keys(arrays).forEach((key) => { console.log(getSum(arrays[key])); });
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda