Entonces... esto es un poco difícil de explicar, pero quiero imprimir con Javascript este resultado:
Logro generar una función aleatoria con diferentes caracteres pero se imprimen en todas las filas y siempre en el mismo lugar. ¿Qué debo hacer para asegurarme de que un carácter aleatorio se imprima solo una vez y en una fila aleatoria cada vez?
Mi código:
const characters = '&%$*'; function generateRandomCode() { let result = "" let charactersLength = characters.length; for (let i = 0; i < 1; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result } let string = ""; for (let i = 1; i <= 5; i++) { for (j = 1; j <= 5; j++) { string += "#"; } string += generateRandomCode(); generateRandomCode(); string += "<br>"; } document.write(string);Esto es lo que imprime mi código:
Prueba algo como a continuación. Creé 3 enteros aleatorios fuera del ciclo, uno para el carácter, uno para la fila y otro para la posición para insertar caracteres. Usa estos enteros dentro del ciclo
const characters = '&%$*'; let string = ""; let rand = generateRandomCode(); // generate an array of 3 random numbers. console.log(rand); for (let i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { string += rand[1] === i && rand[2] === j ? characters[rand[0]] : "#"; } string += "<br>"; } function randomIntFromInterval(min, max) { // min and max included return Math.floor(Math.random() * (max - min + 1) + min) } function generateRandomCode() { return [randomIntFromInterval(0, 3), randomIntFromInterval(0, 4), randomIntFromInterval(0, 4)] } document.write(string);La pregunta no dice específicamente que el código está restringido solo a un bucle, solo que desea crear esa salida en particular y que debe cambiarse en cada carga (al menos como lo leo)
Entonces, si no está usando un bucle, también puede probar esta opción :)
const characters = '&$*'; const size = 5; // create an array with all entries const set = new Array(size).fill().map( _ => new Array(size).fill('#') ); // choose the row based on the size of the array const row = Math.floor( Math.random() * set.length ); // choose a column based on the size of the row selected const col = Math.floor( Math.random() * set[row].length ); // choose a character based on the size of the string const char = Math.floor( Math.random() * characters.length ); // overwrite the pre-existing # with the random char set[row][col] = characters[char]; // map the rows to a string and join everything with <br /> document.querySelector('#container').innerHTML = set.map( row => row.join('') ).join('<br />'); #container { font-family: 'Courier New'; } <div id="container"></div>