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

173
Visualizações
¿Hay alguna forma de acortar este largo código de instrucción if?

Tengo el siguiente código para devolver el número que hace que la suma de cada línea sea la misma.

 let getnums = () => { var numsarray = []; var arrays = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var len = arrays.length; while (len > 0) { var rans = Math.floor(Math.random() * len); numsarray.push(arrays[rans]); arrays.splice(rans, 1); len = len - 1; } return numsarray; }; let done = false function test(num){ while (!done) { let output = getnums(); if ( output[0] + output[1] + output[2] == 15 && output[1] + output[4] + output[7] == 15 && output[2] + output[5] + output[8] == 15 && output[0] + output[3] + output[6] == 15 && output[2] + output[4] + output[6] == 15 && output[3] + output[4] + output[5] == 15 && output[6] + output[7] + output[8] == 15 && output[0] + output[4] + output[8] == 15 ) { done = true console.log(output) } } } test()

El código funciona bien, pero estoy buscando formas de acortar la declaración if.

Mi código actual solo funcionará con el resultado 3*3 debido a la declaración if específica, estoy buscando una mejor y que funcione para todos los tamaños diferentes:

Por ejemplo: 4*4, una función produce:

 if( output[0] + output[1] + output[2] +output[3] output[4] + output[5] + output[6] +output[7] .... )

Ya he tenido una idea o he usado el bucle para hacer un número aleatorio, pero no sé cómo hacer una declaración if.

¿Es posible que pueda usar un bucle u otros métodos para crear la declaración if?

¿Alguna sugerencia o idea?

¡Gracias!

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

0

Como tiene matrices cuadradas perfectas, puede usar la siguiente lógica:

  • Cada fila debe tener la misma suma.
  • Cada columna debe tener la misma suma.
  • Ambas diagonales deben tener la misma suma.

Entonces, sumamos cada elemento de la matriz dos veces y sumamos los elementos diagonales una vez más. No hace falta decir que el valor en el centro de la matriz se sumará 4 veces. Obtenemos una suma total.

Necesitamos comparar esta suma con la nueva derivación de la suma deseada de la siguiente manera:

 desired_sum * (R + C + 2)

donde R es no. de filas, C es no. de columnas y 2 es para las 2 diagonales. Dado que R = C para su caso, será

 desired_sum * (N * 2 + 2)

donde N es el n. filas o columnas de la matriz.

Retazo:

 var mat = [ [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1] ]; function test(mat, N, desired_sum){ let sum = 0; let d1_col = 0,d2_col = N - 1; for(let i = 0; i < N; ++i, d1_col++, d2_col--){ for(let j = 0; j < N; ++j){ sum += 2 * mat[i][j]; if(d1_col == j) sum += mat[i][j]; if(d2_col == j) sum += mat[i][j]; } } return sum == desired_sum * (N * 2 + 2); } console.log(test(mat, mat.length, 4));

about 4 years ago · Juan Pablo Isaza Relatório

0

Para el problema de 3x3, puede tomar la siguiente matriz de índices y verificar la suma.

Para arreglos de 4x4, tome otro arreglo de índices.

 const getSum = indices => indices.reduce((sum, index) => sum + output[index], 0), indices3 = [[0, 1, 2], [1, 4, 7], [2, 5, 8], [0, 3, 6], [2, 4, 6], [3, 4, 5], [6, 7, 8], [0, 4, 8]]; if (indices3.every(indices => getSum(indices) === 15)) { // ... }
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