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

395
Vistas
Recorrido en zigzag de una matriz bidimensional

Necesito atravesar una matriz bidimensional en zigzag y elegir los elementos en el camino:

De:

 [['🍌','🍎','😃','🐉'], ['👺','🍺','🍩','🚴'], ['🚘','🦑','🚆','🏝'], ['🌆','🛹','🕺','🍕']]

A:

 ['🍌','👺','🍎','😃','🍺','🚘','🌆','🦑','🍩','🐉','🚴','🚆','🛹','🕺','🏝','🍕']

Mi enfoque fue usar un ciclo for, verificar cada índice de la primera matriz y compararlo con el índice de la siguiente matriz y luego, si ese número es más grande en uno, empujarlo a la nueva matriz unidimensional.

¿Cuál es el mejor enfoque para resolver esto? ¿Tiene algunos recursos para aprender más sobre este patrón?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Tengo entendido que desea transformar una matriz n × n como:

 [ ['😃', '🌯', '🍻', '🙃'] , ['😈', '🌽', '💥', '🔍'] , ['🏖', '🥑', '🍣', '🥦'] , ['🌮', '🧺', '😎', '🦑'] ]

dentro:

 ['😃','😈','🌯','🍻','🌽','🏖','🌮','🥑','💥','🙃','🔍','🍣','🧺','😎','🥦','🦑']

Transformemos la matriz original en una "matriz de posiciones" e intentemos imaginar el "zigzag":

 [ [[0,0], [0,1], [0,2], [0,3]] // ↙ ↗ ↙ ↗ , [[1,0], [1,1], [1,2], [1,3]] // ↗ ↙ ↗ ↙ , [[2,0], [2,1], [2,2], [2,3]] // ↙ ↗ ↙ ↗ , [[3,0], [3,1], [3,2], [3,3]] // ↗ ↙ ↗ ↙ ]

Si nos enfocamos en los bordes, podemos comenzar a trabajar en un patrón:

 [ [0,0] , [1,0], /* … */ [0,1] , [2,0], /* … */ [0,2] , [3,0], /* … */ [0,3] , [3,1], /* … */ [1,3] , [3,2], /* … */ [2,3] , [3,3] ]

Ahora necesitamos resolver todo el [x,y] entre cada borde y atravesar cada borde en dirección opuesta:

 const inp1 = zigzag([ ['😃', '🌯', '🍻', '🙃'] , ['😈', '🌽', '💥', '🔍'] , ['🏖', '☝️', '🍣', '🥦'] , ['🌮', '🧺', '😎', '🦑'] ]); const inp2 = zigzag([ ['😃', '🌯', '🍻'] , ['😈', '🌽', '💥'] , ['🏖', '☝️', '🍣'] ]); const inp3 = zigzag([ ['😃', '🌯'] , ['😈', '🌽'] ]); const inp4 = zigzag([ ['😃'] ]); console.log(` [${String(inp1)}] [${String(inp2)}] [${String(inp3)}] [${String(inp4)}] `);
 <script> const zigzag = inp => { const m = inp.length - 1; const edges = []; for (let x = 0; x <= m; x++) edges.push([x, 0]); for (let x = 1; x <= m; x++) edges.push([m, x]); return edges.flatMap(([x, y], i) => { const path = [[x, y]]; for (let a = x, b = y; a != y && b != x;) path.push([--a, ++b]); return (i % 2 ? path : path.reverse()).map(([x, y]) => inp[x][y]); }); } </script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

RESPUESTA ANTIGUA:

puede usar el método .flat() para la matriz de javascript . Array.flat()

 let array = [ [1, 3, 4, 10], [2, 5, 9, 11], [6, 8, 12, 15], [7, 13, 14, 16], ] const flatArray = array.flat() flatArray.sort((a,b)=>ab) console.log(flatArray)

RESPUESTA DE ACTUALIZACIÓN: después de la salida de actualización de la pregunta

 const items = [ [1, 3, 4, 10], [2, 5, 9, 11], [6, 8, 12, 15], [7, 13, 14, 16], ]; /*const items = [ [🍌 , 🍎 , 😃 , 🐉 ], [👺 , 🍺 , 🍩 , 🚴 ], [🚘 , 🪄 , 🚆 , 🏝 ], [🌆 , 🛹 , 🕺 , 🍕 ], ]*/ function zigZag(arr) { let array = [] const itemCounts = arr.reduce((pre, cur)=> pre+cur.length,0) for(let i=0; i<itemCounts; i+=1){ let round = [] for(let j=0; j<arr.length; j+=1){ if(arr[j].length){ round.push({ value: arr[j][0], row:j }) } } const minValue = Math.min(...round.map(item=>item.value)) const target = round.find(item=>item.value == minValue) array.push(arr[target.row].shift()) } return array; }; console.log(zigZag(items))

about 4 years ago · Juan Pablo Isaza Denunciar

0

RESPUESTA ACTUALIZADA

Esta función fusionará matrices en forma de zigzag.

Aquí he mostrado un ejemplo con 2 matrices con diferentes valores de tipo de datos.

 function zigZag(array) { let arrayLength = array.length; let arrayItemLength = array[0].length; let result = []; let flag = true; for(let i = 0; i < (arrayLength + (arrayLength / 2) + 1) ; i++) { if(i < arrayItemLength) { let length = (i + 1); let ii = i; for(let j = 0; j < length; j++) { if(flag == true) result.push(array[j][ii]); else result.push(array[ii][j]); ii-=1; } }else { let ii = (i + 1) - arrayItemLength; for(let j = arrayItemLength - 1; j > i - arrayItemLength; j--) { if(flag == true) result.push(array[ii][j]); else result.push(array[j][ii]); ii+=1; } } if(flag == true) flag = false; else flag = true; } return result; } let array = [ ["🍌" , "🍎" , "😃" , "🐉" ], ["👺" , "🍺" , "🍩" , "🚴" ], ["🚘" , "🪄" , "🚆" , "🏝" ], ["🌆" , "🛹" , "🕺" , "🍕" ], ]; let array_1 = [ [1, 3, 4, 10], [2, 5, 9, 11], [6, 8, 12, 15], [7, 13, 14, 16], ]; console.log(zigZag(array)); // icons console.log(zigZag(array_1)); // numbers

RESPUESTA ANTIGUA

Prueba esto, creo que esto es lo que quieres hacer.

 let array = [ [1, 3, 4, 10], [2, 5, 9, 11], [6, 8, 12, 15], [7, 13, 14, 16], ]; function mergeArray(array) { let merged = array.reduce((item, total) => [...total, ...item], []); return merged.sort((a, b) => a - b); } let result = mergeArray(array); console.log(result)

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