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

203
Visualizações
Rellene las diagonales de la matriz con los mismos valores en JS

Dada la matriz de n y values ( values.length = 2 * n - 1 ), quiero llenar una matriz de nxn elementos, de manera que sus diagonales tengan los mismos valores de la siguiente manera:

ex. n = 3, valores = [0, 1, 2, 3, 4]:

 0 1 2 3 0 1 4 3 0 arr = [0, 1, 2, 3, 0, 1, 4, 3, 0]

ex. n = 4, valores = [0, 1, 2, 3, 4, 5, 6];

 0 1 2 3 4 0 1 2 5 4 0 1 6 5 4 0 arr = [0, 1, 2, 3, 4, 0, 1, 2, 5, 4, 0, 1, 6, 5, 4, 0]

Pude llenar la mitad superior de la matriz usando el siguiente código, pero me quedé atascado con el resto:

 var n = 3; var values = [0, 1, 2, 3, 4] var a = []; for (var i = 0; i < n; i++) { for (var j = 0; j < n; j++) { a[j * n + i] = values[i - j]; } } /* Result 0 1 2 0 1 0 arr = [0, 1, 2, undefined, 0, 1, undefined, undefined, 0] Expected output: 0 1 2 3 0 1 4 3 0 arr = [0, 1, 2, 3, 0, 1, 4, 3, 0] */

La longitud de la matriz de values es 2 * n - 1 , que es el recuento de las diagonales de la matriz.

¿Alguna idea de cómo llenar toda la matriz?

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

0

Creado while loop y agregado contador. El contador cuenta los elementos que se supone que deben cortarse desde el final. El primer ciclo pasa por estos elementos y los agrega al principio, el segundo ciclo está limitado por este contador, por lo que no llega al final de la matriz y agrega los elementos que no se han cortado desde la matriz hasta el final. hasta que todos los elementos se eliminen de la matriz.

 var values = [0, 1, 2, 3, 4] var a = []; var ctr = 0 while(ctr < values.length){ for(let i = (values.length - ctr); i < values.length; i++){ a.push(values[i]); } for(let i = 0; i < (values.length - ctr); i++){ a.push(values[i]); } ctr++; }

Producción

 [0, 1, 2, 3, 4, 4, 0, 1, 2, 3, 3, 4, 0, 1, 2, 2, 3, 4, 0, 1, 1, 2, 3, 4, 0] 0 1 2 3 4 4 0 1 2 3 3 4 0 1 2 2 3 4 0 1 1 2 3 4 0
about 4 years ago · Juan Pablo Isaza Relatório

0

Ok, vi los resultados solicitados e hice este fragmento a continuación. Uso una matriz bidimensional para poder verificar si existe una diagonal existente usando la lógica xy y, si no la hay, había un contador que haría referencia al siguiente número de matriz ( c+1%arr.length )

EDICIÓN EXPLICADA : vi lo que estaba pasando y luego decidí intentar agregar solo cuando no había diagonal en ese "lugar"... funciona de maravilla 👌

 var arr=[0,1,2,3,4] function makeBox(arr,n){ var toReturn=[], c=0 for(let i=0;i<n*n;i++){ let y=(i-(i%n))/n, x=i%n let diagonal=toReturn[y-1]?toReturn[y-1][x-1]:undefined let isDiagonal=typeof diagonal==="number" //0 is a number toReturn[y]?toReturn[y].push(isDiagonal?diagonal:arr[c]): toReturn[y]=[isDiagonal?diagonal:arr[c]] if(!isDiagonal){c=(c+1)%arr.length} } return toReturn.map(a=>a.join(' ')).join('\n') } console.log(makeBox(arr,3)) console.log(makeBox(arr,4)) console.log(makeBox(arr,6)) console.log("before you say that it doesn't work.. you just need the correctly sized array\nLook Below") console.log(makeBox([0,1,2,3,4,5,6],4))

about 4 years ago · Juan Pablo Isaza Relatório

0

A continuación se presenta una posible implementación que logra el objetivo deseado:

 const values = [0, 1, 2, 3, 4]; const getCustomArray = (n = 3, val = values) => { const res = [...Array(n)].map(x => [...Array(n).fill(-1)]); for (let i = 0; i < n; i++) { res[i][i] = val[0]; for (let j = 1; i + j < n; j++) { res[i][i+j] = val[j]; res[i+j][i] = val[n + j - 1] } } return res.map(r => r.join(' ')).join('\n'); }; console.log('3 x 3 array:\n' + getCustomArray()); console.log('4 x 4 array:\n'+ getCustomArray(4, [...Array(2 * 4 -1).keys()])); console.log('5 x 5 array:\n'+ getCustomArray(5, [...Array(2 * 5 -1).keys()])); console.log('9 x 9 array:\n'+ getCustomArray(9, [...Array(2 * 9 -1).keys()]));

Acercarse

  • Primero, se crea una matriz de n filas y n columnas y se llena con algún valor (como -1 ).
  • A continuación, el ciclo for i itera sobre el conjunto de diagonales
  • Los elementos diagonales 0,0 , 1,1 , 2,2 se establecen en el primer elemento de la matriz de values (normalmente 0 ).
  • Ahora, itera un segundo j for-loop.
  • Actualiza las diagonales superior e inferior.
  • res[i][i+j] apunta a las diagonales superiores (como 0,1 , 1,2 , 2,3 , ...) y se completa con una matriz de values
  • res[i+j][j] apunta a las diagonales inferiores (como 1,0 , 2,1 , 3,2 , ...) y se completa mediante el uso de un offset de n - 1 para indexar la matriz de values

Agregue cualquier pregunta o comentario sobre los comentarios.

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