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

168
Visualizações
Is there way to shorten this long if statement code?

I have the code like below to return the number that makes the sum of each line the same.

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()

The code works fine, but I am looking for ways to shorten the if statement.

My current code only will work result 3*3 because of the specific if statement , I am looking for a better and that will work for all different sizes:

E.g: 4*4, a function produces:

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

I have already had idea or using loop to make randomnumber, but don't know how to make if statement.

Is it possible I could use loop or other methods to create the if statement?

Any suggestions or ideas?

Thank you!

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

0

Since you have perfect square matrices, you can use the below logic:

  • Every row needs to have same sum.
  • Every column needs to have same sum.
  • Both diagonals need to have same sum.

So, we add every element of the matrix twice and add diagonal elements one more time. Needlessly to say that the value at the center of the matrix will be added 4 times. We do get a total sum.

We need to compare this sum with the new desired sum derivation in the following way:

desired_sum * (R + C + 2)

where R is no. of rows, C is no. of columns and 2 is for the 2 diagonals. Since R = C for your case, it will be

 desired_sum * (N * 2 + 2)

where N is the no. of rows or columns of the matrix.

Snippet:

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

For the 3x3 problem, you could take the following array of indices and check the sum.

For 4x4 arrays, take another array of indices.

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