Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

195
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda