Estoy tratando de hacer un patrón de Javascript que acepte una entrada de usuario en forma de dígito y devuelva el siguiente resultado:
******1 ****1 2 1 ***1 2 2 1 **1 2 3 2 1 *1 2 3 3 2 1 1 2 3 4 3 2 1 *1 2 3 3 2 1 **1 2 3 2 1 ***1 2 2 1 ****1 2 1 *****1
Sin embargo, estoy atascado en un patrón que se ve así:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1
Este es el código que escribí hasta ahora.
function selectNo() { var selectedNo = document.getElementById("select-number").value; for (var i = 1; i <= selectedNo; i++) { for (var l = 0; l < (selectedNo - i); l++) document.write(" ") for (var j = 1; j <= i; j++) document.write(" " + j) for (var k = i - 1; k >= 1; k--) document.write(" " + k) document.write("<br>"); } for (var i = 1; i <= selectedNo; i++) { for (var l = 0; l < i; l++) document.write(" ") for (var j = 1; j <= (selectedNo - i); j++) document.write(" " + j) for (var k = selectedNo - i - 1; k >= 1; k--) document.write(" " + k) document.write("<br>"); } }
<input type="number" id="select-number" placeholder="Select your number"> <button onclick="selectNo()">Print the pattern</button>
¿Alguna sugerencia sobre cómo alcanzar el patrón objetivo? ¡Gracias!
Cree una función que devuelva la matriz de los siguientes números y luego puede pasar del 1 al número de entrada. Entonces solo necesitas unir las matrices.
function line(len) { const middle = (len - 1) / 2; const a = []; for(let i = 0; i < len; i++) { if(i < middle) { a.push(i + 1); } else { a.push(len - i); } } return a; } function diamond(len) { l = len * 2 - 1; const d = []; for(let i = 0; i < l; i++) { const a = line(i + 1).map(v => `${v} `); const b = new Array(l - a.length).fill(' ').concat(a).join(''); d.push(b); } for(let i = l - 2; i >= 0; i--) { const a = line(i + 1).map(v => `${v} `); const b = new Array(l - a.length).fill(' ').concat(a).join(''); d.push(b); } return d.join('<br/>'); } function main() { document.getElementById("result").innerHTML = diamond(document.getElementById("val").value); }
<input id="val" type="number" placeholder="Select your number"> <button onclick="main()">Print the Pattern</button> <div id="result" style="font-family: monospace;"></div>