primera publicación, nuevo en la codificación en js. Estoy tratando de crear una función que tome una matriz de (2) cadenas como entrada, como ["coderbyte", "3"], siendo la primera cadena cualquier cadena aleatoria. La segunda cadena representa la cantidad de filas que la función debe crear en una matriz 2D. Luego, la función debe imprimir la primera cadena en un patrón en zigzag como el siguiente:
crear endeudado
Luego, la función debe devolver la palabra formada al combinar los caracteres a medida que itera a través de cada fila, por ejemplo, "creoebtdy". Declaré la matriz vacía y usando un ciclo while, logré colocar los primeros tres caracteres en los lugares correctos de la matriz usando el siguiente código:
//initialize array of arrays of empty spaces rows = Number(strArr[1]) columns = strArr[0].length //console.log(rows) //console.log(columns) a = Array(rows).fill('').map(x => Array(columns).fill('')) let i = 0 //a[0][0]= strArr[0][0] while (i <= rows-1) { a[i][i]= strArr[0][i] //console.log(a) i++ } //console.log(a) //let j = i - 2 //console.log(i) while (i >= rows && i < rows*2) { let j = i - 2 a[j][i] = strArr[0][i] i++ j-- } console.log(a) } stringChal3(["coderbyte", "3"])Recibo un error "TypeError: Cannot set property '5' of undefined" en la línea 23 (a[j][i]...) cuando intento colocar "e" y "r" en la matriz. No estoy seguro de cómo corregir el error. ¡Toda ayuda es muy apreciada!
Dado que " toda ayuda es muy apreciada ", aquí hay una forma completamente diferente de hacer un efecto de zig-zag.
Viene de notar que el patrón de zigzag usa cada 4to carácter en las filas superior e inferior, pero en diferentes compensaciones/fases (0 para la fila superior y 2 para la fila inferior), y la fila del medio usa cada 2do carácter (comenzando del desplazamiento 1).
const zigzag = str => { const zig = (period, phase) => [...str] .map((character, index) => (index % period == phase) ? character : ' ') .join(''); console.log(zig(4, 0)); console.log(zig(2, 1)); console.log(zig(4, 2)); } zigzag('coderbyte'); const zigzag = (str, rows) => { const zig = (period, phase) => [...str] .map((character, index) => [phase, period - phase].includes(index % period) ? character : ' ') .join(''); for (let row = 0; row < rows; ++row) { console.log(zig(rows + rows - 2 || 1, row)); } } zigzag('coderbyte', 3); console.log('another example:'); zigzag('abcdefghijklmnopqrstuvwxyz', 5);