.
Los bucles son una herramienta súper poderosa y súper útil cuando necesitas pasar de nivel con los lenguajes de programación, además, de estos dependen la complejidad algoritmica de tus soluciones a problemas más grandes, un concepto del cual deberás preocuparte en un futuro no muy lejano.
.
Este ejercicio en cuestión, es súper interesante pero tiene un detalle muy interesante el cuál puede que haga que tu solución no pase pero aquí te explico el porque y la solución planteada ¿Lograrás resolverlo?
.
Procedo a poner un gif de un loop
!loop
Explicación
Si resolviste el problema pero tu solución no pasa, puede ser por este sutil pero importante detalle que deje en la guía.
Recuerda que para hacer el salto de línea debes usar "\n", no olvides removerla de la última parte.
Primero te explicaré la solución la cuál incluye métodos avanzados que aprenderás a lo largo de este camino y posibles alternativas al código de solución
.
exportfunctionprintTriangle(size, character){// Inicializa mi array de elementosconst triangle =[];// Empieza a iterar desde 1 hasta que el iterador sea igual a sizefor(let i =1; i <= size; i++){// inicializa una variable llamada "characters" que contendrá una cadena de caracteres repetidos. // La cantidad de caracteres repetidos dependerá del valor de "i".let spaces =" ".repeat(size - i);// Después repetimos el carácter a pintar la cantidad de veces del iteradorlet characters = character.repeat(i);// Para después juntar el número de espacios y caracteres en un solo stringlet figure =`${spaces}${characters}`;// Y al final mandar esto al array inicial triangle.push(figure);}// La prueba nos pide un string, por lo que usaremos join() para convertir// El array en un string donde las comas sean reemplazadas por el salto de lineareturn triangle.join("\n");}
Es importante mencionar que el método .join() propio de los arrays reemplaza las comas por el carácter dado
Ejemplo:
Excluyendo el "Hola" al inicio y al final del string, si usas otra alternativa deberás pensar en omitir el salto de linea "\n" del inicio y final del string resultante
.
¿Cómo te fue con este reto?
Quedé como el meme de:
En clase "sumar manzanas y peras"
El examen: "Despeje la integral de Euler"
No se vale que utilices métodos para resolver este reto que aún no hemos visto. :(
Saludos, les recomiendo que intenten hacer los ejercicios utilizando solamente los conceptos que se han tratado hasta este punto, evitando utilizar métodos que no se hayan tocado como manipulación de strings.
Una de las intenciones de estas practicas es ejercitar el pensamiento lógico y algoritmos.
Aquí les dejo un ejemplo usando solamente lo que se ha tocado hasta este tema.
Buena solución teniendo en cuenta lo que va del curso!
Me gusta mucho tu solución, ¿podrías explicarme un poco cómo llegaste a ella? Me gustaría entenderla mejor ya que algunas cosas no me quedan 100% claras.
En esta tengo que admitir que no tenia ni la mas minima idea de como hacerlo.
Ya somos dos, realmente quiero entender, pero me enrollo en una persiana con este playground.
Yo les puedo intentar explicar con el código que yo utilice:
constdrawTriangle=(size, char)=>{// Aquí estoy creando un array para contener cada fila del triangulolet triangle =[]// Iniciamos el buclefor(let i=1; i<= size; i++){// Cada fila se hace con el método repeat al cual le pasamos un string y la cantidad de veces que lo queremos repetir: **caracteresARepetir.repeat(numeroDeRepeticiones)**// Entonces llenamos cada fila con el numero necesario de espacios en blanco y el numero de caracteres utilizando la altura final que debe tener el triangulo y la iteración actual (i)// Al utilizar comillas invertidas el código dentro de los corchetes ${} se va a ejecutar y va a formar parte del string automáticamentelet line =`${" ".repeat(size - i)}${char.repeat(i)}`// Despues solo agregamos la fila al array que creamos anteriormente con el método push triangle.push(line)}// Y al devolver el array lo transormamos a un string con el metodo join al cual le podemos pasar el salto de linea "\n" para que lo ponga al final de cada fila que contienereturn triangle.join("\n")}
No sé si me explique bien jajaja pero si te deje con mas dudas me dices 🥸
Solución
exportfunctionprintTriangle(size, character){let triangle ="";for(let i = size; i >0; i--){for(let j =1; j <= size; j++){ triangle += j < i ?' ': character;}if(i >1){ triangle +=`\n`;}}return triangle;}
me gustó como lo hiciste super corto, aunque para ser sincero hay líneas que no sabia, pero es muy ineterezante como hiciste. Gracias por el aporte.
¡Excelente manera de resolverlo!
Nadie hizo el ejercicio con los temas que hemos visto. Me siento timado un poco con la solución de LeoCodeo.
Me uno al equipo. No me gusta porque frustra.
Pensé que se debía resolver sin usar alguna otra función como repeat(), yo lo hice así:
La unica solucion sin usar funciones no vistas
Sabías que…
Un triángulo rectángulo es un tipo de triángulo que tiene un ángulo recto, es decir, un ángulo de 90 grados. Los otros dos ángulos son agudos, es decir, tienen menos de 90 grados.
La característica principal de un triángulo rectángulo es que uno de sus lados es más largo que los otros dos. Este lado se llama hipotenusa y siempre se encuentra opuesto al ángulo recto. Los otros dos lados se llaman catetos, y se clasifican en cateto opuesto (altura) y cateto adyacente (base).
Solución:
/**
* Generates a triangle of the specified size and character.
* @param{number}size - Size of the triangle.
* @param{string}character - Character to use for the triangle.
* @returns{string} Right triangle.
*/functionprintTriangle(size, character){let triangle ="";for(let i =1; i <= size; i++){const blanks =" ".repeat(size - i)const characters = character.repeat(i) triangle += blanks + characters
if(i < size) triangle +="\n"}return triangle
}
Solución 😉
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
🚧
exportfunctionprintTriangle(size, character){// Tu código aquí 👈let string =""for(let i =1; i <= size; i++){ string +=`${" ".repeat(size - i)}${character.repeat(i)}\n`} string = string.slice(0,-1)return string
}
Qué buena solución!
yo estaba tratando de hacer la solucion con el repeat tambien, no se me ocurria que tambien lo podia usar para generar los espacios. Muy bueno
Solución… 😄
Para el ejemplo de un tamaño 5. Si la suma de las coordenadas es mayor que el tamaño-1, imprimimos el carácter, sino sumamos un espacio.
.
Al recorrer toda una fila hacemos un salto de línea "\n".
.
Al final podemos quitar el salto de línea sobrante con el método substring(), tomando la cadena que va desde el inicio hasta el (tamaño de la cadena)-1.
.
Mo solución al reto, desde un inicio sabia que debia usar metodos de array, me dio resultado pero no di con que la fila principal quedara en la parte derecha, use el repeat() propuesto por Leo...
aun asi me voy feliz 💛
El codigo sirve para VSCode ✅ no para el playground 🔴
Me paso exactamente lo mismo.
functionprintTriangle(size, character){for(let i =1; i <= size; i++){let space =" "let num_space = size - i
space_piramide = space.repeat(num_space) charac_piramide = character.repeat(i)let piramide = space_piramide +""+ charac_piramide
console.log(piramide)}}
exportfunctionprintTriangle(size, character){let triangulo ='';for(let i =1; i <= size; i++){let line ='';const blanckcharacter = size - i;for(let n =1; n <= size; n++){ line += n <= blanckcharacter ?" ":`${character}`;}const addLineBrak = i < size ?'\n':''; triangulo +=`${line}${addLineBrak}`}return triangulo;}
Hola! No estoy entendiendo cómo llegar a que el triángulo se imprima del lado derecho de la consola. Entiendo el planteo, hice algo similar pero no sé como hacer que se imprima del lado derecho.
Una pista, agrega espacios. Si en la primer fila tienes un solo carácter agrega 6 espacios (pensando que se está pidiendo un triangulo de 6 filas) y vas quitando espacios en cada iteración.
😢🤦♀️🤢 estuvo muy hard.
export function printTriangle(size, character) {
let fila = '';
for (let i = 1; i <= size; i++) {
fila += ' '.repeat(size - i) + character.repeat(i) + '\n';
}
return fila.trimEnd();
}
console.log(printTriangle(5, "*"));
Esto fue lo que pude lograr apenas :(
Me gusto tu solución porque es con lo aprendido, solo que el resultado debe de ser de derecha a izquierda.
Mi solución:
let piramid = ""
let step = 1;
while (size >0) {
for (let j = size-1; j > 0 ; j--) {
piramid = piramid + " ";
}
for (let i = 0; i < step; i++) {
piramid = piramid + character;
}
if (size != 1) {
piramid = piramid + "\n";
}
console.log(piramid)
step++;
size--;
}
return piramid
Este es el playground más complicado hasta el momento, pero logré solucionarlo utilizando lo aprendido hasta este punto aunque existen soluciones más sencillas utilizando algunos métodos:
exportfunctionprintTriangle(size, character){// Tu código aquí 👈let triangle =""for(let i =1; i <= size; i++){for(let j =1; j <= size; j++){if(j <= size - i){ triangle +=" "}else{ triangle += character
}} triangle +=(i != size)?"\n":""}return triangle
}
**
*
*
*
*
*
*
functionprintTriangle(size, character){// Tu código aquí 👈let textoFinal ='';for(let i =1; i <= size; i++){let figure = character.repeat(i).padStart(size)+'\n'; textoFinal += figure;}return textoFinal.trimEnd();//trim.end elimina espacios en blanco al final de una cadena de caracteres.}