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

390
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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