diff --git a/Roadmap/18 - CONJUNTOS/javascript/pedamoci.js b/Roadmap/18 - CONJUNTOS/javascript/pedamoci.js new file mode 100644 index 0000000000..5c72418161 --- /dev/null +++ b/Roadmap/18 - CONJUNTOS/javascript/pedamoci.js @@ -0,0 +1,61 @@ +let conjunto = ['sada', 75654, 21, 3347, 'asd', 'adsd'] + +// añadiendo elemento al final del conjunto +conjunto.push('último elemento') +console.log(conjunto) + +// añadiendo elemento al principio del conjunto +conjunto.splice(0,0,'primer elemento') +console.log(conjunto) + +// añadiendo varios elementos en bloque al final +conjunto = conjunto.concat([['eB1', 'eB2', 'eB3']]) +console.log(conjunto) + +// añadiendo varios elementos en bloque en una posición concreta +conjunto.splice(3, 0, ['eB1', 'eB2', 'eB3']) +console.log(conjunto) + +// eliminando un elementos en una posición concreta +conjunto.splice(5, 1) +console.log(conjunto) + +// actualizando el valor de un elementos en una posición concreta +conjunto.splice(7, 1, 'ya no soy el último elemento') +console.log(conjunto) + +// comprobando si un elementos esta en el conjunto +console.log(conjunto.includes(21)) + +// eliminando todo el contenido conjunto +conjunto.splice(0, conjunto.length) +console.log(conjunto) + +// --------------------------------------- DIFICULTAD EXTRA --------------------------------------- +let arrConjunto1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +let arrConjunto2 = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + +// Unión +let union = arrConjunto1.concat(arrConjunto2) +console.log(`La unión de los dos conjuntos es ${union}`) + +// intersección +let interseccion = [] +arrConjunto1.forEach((e) => {if (arrConjunto2.includes(e)) interseccion.push(e)}) +console.log(interseccion) + +// Diferencia en arrConjunto1 +let difArrConjunto1 = [] +arrConjunto1.forEach((e) => {if (!arrConjunto2.includes(e)) difArrConjunto1.push(e)}) +console.log(difArrConjunto1) + +// Diferencia en arrConjunto2 +let difArrConjunto2 = [] +arrConjunto2.forEach((e) => {if (!arrConjunto1.includes(e)) difArrConjunto2.push(e)}) +console.log(difArrConjunto2) + +// Diferencia simétrica +let diferenciaSimetrica = [] +arrConjunto1.forEach((e) => {if (!arrConjunto2.includes(e)) diferenciaSimetrica.push(e)}) +arrConjunto2.forEach((e) => {if (!arrConjunto1.includes(e)) diferenciaSimetrica.push(e)}) +console.log(diferenciaSimetrica) \ No newline at end of file diff --git a/Roadmap/19 - ENUMERACIONES/javascript/pedamoci.js b/Roadmap/19 - ENUMERACIONES/javascript/pedamoci.js new file mode 100644 index 0000000000..ec0834aee9 --- /dev/null +++ b/Roadmap/19 - ENUMERACIONES/javascript/pedamoci.js @@ -0,0 +1,113 @@ +const Semana = Object.freeze({ + LUNES: 'LUNES', + MARTES: 'MARTES', + MIERCOLES: 'MIERCOLES', + JUEVES: 'JUEVES', + VIERNES: 'VIERNES', + SABADO: 'SABADO', + DOMINGO: 'DOMINGO' +}) + +function diaDeLaSemana(num) { + if (num > 7) num %= 7 + switch (num) { + case 1: return(Semana.LUNES); + case 2: return(Semana.MARTES); + case 3: return(Semana.MIERCOLES); + case 4: return(Semana.JUEVES); + case 5: return(Semana.VIERNES); + case 6: return(Semana.SABADO); + default: return(Semana.DOMINGO); + } +} + +console.log(diaDeLaSemana(15)) +console.log(diaDeLaSemana(2)) +console.log(diaDeLaSemana(24)) +console.log(diaDeLaSemana(53)) +console.log(diaDeLaSemana(6)) +console.log(diaDeLaSemana(49)) +// --------------------------------- DIFICULTAD EXTRA --------------------------------- +const Estado = Object.freeze({ + PENDIENTE: 'PENDIENTE', + ENVIADO: 'ENVIADO', + ENTREGADO: 'ENTREGADO', + CANCELADO: 'CANCELADO' +}) + +class Pedido { + constructor(id) { + this.id = id + this.estado = 'CREADO' + } + + cambiarEstado(estado) { + switch (estado) { + case Estado.PENDIENTE: + (this.estado === 'CREADO') ? console.log(`Se ha cambiado el estado de su pedido a: ${this.estado = Estado.PENDIENTE}`) + : console.log(`No se podido cambiar el estado a pendiente, el estado de su pedido es: ${this.estado}`) + break; + case Estado.ENVIADO: + (this.estado === Estado.PENDIENTE) ? console.log(`Se ha cambiado el estado de su pedido a: ${this.estado = Estado.ENVIADO}`) + : console.log(`No se podido cambiar el estado a enviado, el estado de su pedido es: ${this.estado}`) + break; + case Estado.ENTREGADO: + (this.estado === Estado.ENVIADO) ? console.log(`Se ha cambiado el estado de su pedido a: ${this.estado = Estado.ENTREGADO}`) + : console.log(`No se podido cambiar el estado a entregado, el estado de su pedido es: ${this.estado}`) + break; + case Estado.CANCELADO: + (this.estado === Estado.ENTREGADO || this.estado === Estado.CANCELADO) ? console.log('No se ha podido cancelar su pedido') + : (this.estado !== Estado.ENVIADO) ? console.log(`Su pedido se ha ${this.estado = Estado.CANCELADO}`) // se cancela si esta en estado pendiente o creado + : console.log(`Su pepido se ha ${this.estado = Estado.CANCELADO} el repartidor tuvo un accidente`) + break; + default: + console.log('El estado solicitado para el pedido no existe') + break; + } + } + + estadoActual() { + switch (this.estado) { + case Estado.PENDIENTE: + console.log('Su pedido esta pendiente seguramente dentro de unos minutos sera enviado') + break; + case Estado.ENVIADO: + console.log('Su pedido ya ha sido enviado, en unos minutos le llegara\n¡Esperamos que lo disfrute!') + break; + case Estado.ENTREGADO: + console.log('El pedido ha sido entregado\nDeje un comentario de como fue su experiencia') + break; + case Estado.CANCELADO: + console.log('Ups su pedido esta cancelado, esperemos que no pase la proxima ;)') + break; + default: + console.log('El pedido se ha creado con exito, dentro de unos minutos ya estara pendiente') + break; + } + } +} + +const pedidoEntregado = new Pedido(159753) +pedidoEntregado.cambiarEstado(Estado.PENDIENTE) +pedidoEntregado.cambiarEstado(Estado.ENVIADO) +pedidoEntregado.cambiarEstado(Estado.ENTREGADO) +console.log('\n') +const pedidoCancelado = new Pedido(159753) +pedidoCancelado.cambiarEstado(Estado.PENDIENTE) +pedidoCancelado.cambiarEstado(Estado.ENVIADO) +pedidoCancelado.cambiarEstado(Estado.CANCELADO) +pedidoCancelado.estadoActual() +console.log('\n') +const pedidoVerEstados = new Pedido(159753) +pedidoVerEstados.estadoActual() +pedidoVerEstados.cambiarEstado(Estado.PENDIENTE) +pedidoVerEstados.estadoActual() +pedidoVerEstados.cambiarEstado(Estado.ENVIADO) +pedidoVerEstados.estadoActual() +pedidoVerEstados.cambiarEstado(Estado.ENTREGADO) +pedidoVerEstados.estadoActual() +console.log('\n') +const pedidoCambiarMalEstados = new Pedido(159753) +pedidoCambiarMalEstados.cambiarEstado(Estado.PENDIENTE) +pedidoCambiarMalEstados.cambiarEstado(Estado.ENTREGADO) +pedidoCambiarMalEstados.cambiarEstado(Estado.ENVIADO) \ No newline at end of file diff --git a/Roadmap/20 - PETICIONES HTTP/javascript/pedamoci.js b/Roadmap/20 - PETICIONES HTTP/javascript/pedamoci.js new file mode 100644 index 0000000000..f30d411560 --- /dev/null +++ b/Roadmap/20 - PETICIONES HTTP/javascript/pedamoci.js @@ -0,0 +1,63 @@ +const respuesta = await fetch('https://retosdeprogramacion.com/roadmap') +if (respuesta.ok) { + const contenido = await respuesta.text() + console.log(contenido) +} + +// ------------------------------ DIFICULTAD EXTRA ------------------------------ +import readline from "readline" + +function preguntar(pregunta) { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }) + + return new Promise(resolve => { + rl.question(pregunta, (respuesta) => { + rl.close() + resolve(respuesta) + }) + }) +} + +async function Pokemon(pokemon) { + const urlApi = 'https://pokeapi.co/api/v2/pokemon/' + try { + const responsePokemon = await fetch(`${urlApi}${pokemon}`) + if (!responsePokemon.ok) throw new Error("No se pudo obtener información sobre ese pokemon") + const characteristic = await responsePokemon.json() + console.log('Caracteristicas del pokemon ingresado:\n' + + `Nombre: ${characteristic.name}\n` + + `ID: ${characteristic.id}\n` + + `Peso: ${characteristic.weight}\n` + + `Altura: ${characteristic.height}\n` + + `Tipos: ${characteristic.types[0].type.name}, ${characteristic.types[1].type.name}`) + + const responseSpecies = await fetch(`${characteristic.species.url}`) // + const infoSpecies = await responseSpecies.json() // INFORMACION NECESARIA PARA LLEGAR A LA CADENA EVOLUTIVA + const responceChainEvolutions = await fetch(`${infoSpecies.evolution_chain.url}`) // + const infoChainEvolutions = await responceChainEvolutions.json() + if (infoChainEvolutions.chain.evolves_to.length === 0) console.log('El pokemon no tiene cadena evolutiva') + else { + let evolutionChain = infoChainEvolutions.chain + let evolutions = [evolutionChain.species.name] + while (evolutionChain.evolves_to.length !== 0) { + evolutions.push(evolutionChain.evolves_to[0].species.name) + evolutionChain = evolutionChain.evolves_to[0] + } + console.log(`Cadena evolutiva: ${evolutions.join(', ')}`) + } + + if (characteristic.game_indices.length === 0) console.log('La información sobre en que juegos aparece este pokemon no esta disponible') + else { + const games = characteristic.game_indices.map((x) => x.version.name) + console.log(`Juegos en los que aparece: ${games.join(', ')}`) + } + + } catch (e) { + console.log(e) + } +} + +Pokemon(await preguntar('De que pokemon quieres obtener información?? (inserta el nobre o el número de la pokedex)\n')) \ No newline at end of file diff --git a/Roadmap/21 - CALLBACKS/javascript/pedamoci.js b/Roadmap/21 - CALLBACKS/javascript/pedamoci.js new file mode 100644 index 0000000000..5992a6c556 --- /dev/null +++ b/Roadmap/21 - CALLBACKS/javascript/pedamoci.js @@ -0,0 +1,36 @@ +function sumar(a, b) { + console.log( a + b) +} + +function pedirNumeros(callback) { + let a = 42 + let b = 56 + callback(a, b) +} + +pedirNumeros(sumar) + +// -------------------------------------- DIFICULTAD EXTRA -------------------------------------- +function confirmar(plato) { + console.log(`Se ha confirmado el pedido de: ${plato}`) +} + +function preparar(plato) { + console.log(`Tu ${plato} ya esta listo`) +} + +function entregar() { + console.log(`Ya se ha entregado tu pedido`) +} + +function seguimientoPedido(plato, comprobar, elaborar, repartir) { + const functions = [comprobar, elaborar, repartir] + console.log('Procesando...') + for (let i = 0; i < functions.length; i++) { + setTimeout(() => { + functions[i](plato) + }, 1000 + Math.floor(Math.random() * 10000)) + } +} + +seguimientoPedido('ramen', confirmar, preparar, entregar) \ No newline at end of file diff --git a/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/javascript/pedamoci.js b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/javascript/pedamoci.js new file mode 100644 index 0000000000..214080f301 --- /dev/null +++ b/Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/javascript/pedamoci.js @@ -0,0 +1,90 @@ +// FUNCIONES DE ORDEN SUPERIOR + // Reciben una función como parametro + function calcular(a, b, metodo) { + console.log(metodo(a, b)) + } + + const sumar = (num1, num2)=> { + return num1 + num2 + } + + calcular(5, 62, sumar) + + // Devuelven una función + function devolverMetodo(num) { + if (num > 10) { + return multiplicar = (num1, num2)=>{ + console.log(num1 * num2) + } + } else { + return sumar = (num1, num2)=> { + console.log(num1 + num2) + } + } + } + + let metodo = devolverMetodo(23) + + metodo(45, 32) +// ----------------------------------- DIFICULTAD EXTRA ----------------------------------- +const listaEstudiantes = [{ + nombre: "Juan", + fechaNacimiento: "12/05/04", + notas: [6.75, 1.22, 3.47, 3.01, 7.62] +}, { + nombre: "Agus", + fechaNacimiento: "23/02/05", + notas: [7.08, 9.02, 1.78, 4.79, 1.27] +}, { + nombre: "Victor", + fechaNacimiento: "26/12/04", + notas: [2.97, 5.54, 1.24, 2.79, 6.84] +}, { + nombre: "Caterina", + fechaNacimiento: "04/06/04", + notas: [10.0, 9.45, 9.06, 9.5, 9.76] +}, { + nombre: "Raul", + fechaNacimiento: "13/11/05", + notas: [1.06, 8.24, 7.28, 4.06, 2.4] +}, { + nombre: "David", + fechaNacimiento: "08/08/05", + notas: [9.61, 4.03, 1.83, 1.87, 8.62] +}, { + nombre: "Jesus", + fechaNacimiento: "18/07/04", + notas: [9.6, 9.8, 9.72, 9.53, 9.96] +}, { + nombre: "Eugenia", + fechaNacimiento: "01/04/05", + notas: [9.37, 9.55, 9.82, 9.61, 9.85] +}] + + +const listaPromedios = listaEstudiantes.map((estudiante) => { + let prom = estudiante.notas.reduce((p, nota) => (p += nota / estudiante.notas.length), 0) + return {nombre: estudiante.nombre, promedio: prom.toFixed(2)} +}) +console.log(listaPromedios) + +const mejoresPromedios = listaPromedios.filter((estudiante) => estudiante.promedio >= 9) +console.log(mejoresPromedios) + +const listaNacimiento = listaEstudiantes + .map((estudiante) => ({ + nombre: estudiante.nombre, + fecha: estudiante.fechaNacimiento.split('/') + })) + .sort((a, b) => + parseInt(a.fecha[2]) - parseInt(b.fecha[2]) || // los ordena en forma creciente por año, si es el mismo pasa a comparar el mes + parseInt(a.fecha[1]) - parseInt(b.fecha[1]) || // los ordena en forma creciente por mes, si es el mismo pasa a comparar el día + parseInt(a.fecha[0]) - parseInt(b.fecha[0]) // los ordena en forma creciente por día + ) +console.log(listaNacimiento) + +const mejorNota = listaEstudiantes.filter((estudiante) => sacoDiez(estudiante.notas)) +function sacoDiez(notas) { + return notas.includes(10) +} +console.log(mejorNota) \ No newline at end of file diff --git a/Roadmap/23 - SINGLETON/javascript/pedamoci.js b/Roadmap/23 - SINGLETON/javascript/pedamoci.js new file mode 100644 index 0000000000..35f64eb9e7 --- /dev/null +++ b/Roadmap/23 - SINGLETON/javascript/pedamoci.js @@ -0,0 +1,58 @@ +class Singleton { + constructor(name) { + if (!!Singleton.instance) { + return Singleton.instance + } + + Singleton.instance = this + this.name = name + + return this + } + + getName() { + return this.name + } +} + +const instanceOne = new Singleton('One') +const instanceTwo = new Singleton('Two') +const instanceThree = new Singleton('Three') + +console.log(`Nombre de la primera inicialización: ${instanceOne.getName()}`) +console.log(`Nombre de la segunda inicialización: ${instanceTwo.getName()}`) +console.log(`Nombre de la tercera inicialización: ${instanceThree.getName()}`) + +// ------------------------------------ DIFICULTAD EXTRA ------------------------------------ +class Sesion { + constructor(id, nombreUsuario, nombre, email) { + if (!!Sesion.instance) { + return Sesion.instance + } + + Sesion.instance = this + this.id = id + this.nombreUsuario = nombreUsuario + this.nombre = nombre + this.email = email + + return this + } + + recuperarDatos() { + return [this.id, this.nombreUsuario, this.nombre, this.email] + } + + finalizarSesion() { + Sesion.instance = false + this.id = null + this.nombreUsuario = null + this.nombre = null + this.email = null + } +} + +const usuario = new Sesion(453289, 'Singleton', 'Keny', 'emailpromedio@gmail.com') +console.log(`${usuario.recuperarDatos().join(', ')}`) +usuario.finalizarSesion() +console.log(`${usuario}`) \ No newline at end of file diff --git a/Roadmap/24 - DECORADORES/javascript/pedamoci.js b/Roadmap/24 - DECORADORES/javascript/pedamoci.js new file mode 100644 index 0000000000..44f31d5d8d --- /dev/null +++ b/Roadmap/24 - DECORADORES/javascript/pedamoci.js @@ -0,0 +1,61 @@ +class Notificacion { + notificacion() { + console.log('Notificación de la empresa a través de Facebook') + } +} + +class NotificacionDecorator { + constructor(base) { + this.base = base + } + + notificacion() { + this.base.notificacion() + } +} + +class NotificacionSMS extends NotificacionDecorator { + constructor(base) { + super(base) + } + notificacion() { + console.log('Notificación de la empresa a través de SMS') + super.notificacion() + } +} + +class NotificacionTelegram extends NotificacionDecorator { + constructor(base) { + super(base) + } + notificacion() { + console.log('Notificación de la empresa a través de Telegram') + super.notificacion() + } +} + +let base = new Notificacion() +base = new NotificacionSMS(base) +base = new NotificacionTelegram(base) +base.notificacion() + +// --------------------------------- DIFUCULTAD EXTRA --------------------------------- +function sumar(num1, num2) { + console.log(num1 + num2) +} + +function contador(fn) { + let count = 0 + return function(...args) { + count++ + console.log(`Llamada número ${count}`); + return fn(...args); + }; +} + +let result = contador(sumar) +result(2, 3) +result(2545, 321) +result(58, 21) +result(97, 68) +result(12, 345) \ No newline at end of file diff --git a/Roadmap/25 - LOGS/javascript/pedamoci.js b/Roadmap/25 - LOGS/javascript/pedamoci.js new file mode 100644 index 0000000000..6b27423afc --- /dev/null +++ b/Roadmap/25 - LOGS/javascript/pedamoci.js @@ -0,0 +1,78 @@ +const niveles = { + DEBUG: 'DEBUG', + INFO: 'INFO', + WARNING: 'WARNING', + ERROR: 'ERROR' +}; + +function log(nivel, mensaje) { + const fecha = new Date().toISOString() + const formato = `${fecha} - ${nivel} - ${mensaje}` + + switch (nivel) { + case niveles.DEBUG: + console.debug(formato) + break + case niveles.INFO: + console.info(formato) + break + case niveles.WARNING: + console.warn(formato) + break + case niveles.ERROR: + console.error(formato) + break + default: + console.log(formato) + } +} + +log(niveles.DEBUG, "Esto es un mensaje de DEBUG") +log(niveles.INFO, "Esto es un mensaje de INFO") +log(niveles.WARNING, "Esto es un mensaje de WARNING") +log(niveles.ERROR, "Esto es un mensaje de ERROR") + +// ---------------------------------------- DIFICULTAD EXTRA ---------------------------------------- +class TaskManager { + constructor() { + this.tasks = {} + } + + addTask(nameTask, description) { + const startTime = performance.now() + if (Object.hasOwn(this.tasks, nameTask)) console.warn('Ya existe una tarea con ese nombre') + else { + Object.assign(this.tasks, {[nameTask]: description}) + console.info('La tarea se ha agregado correctamente') + } + console.debug(`tenes ${Object.keys(this.tasks).length} tarea/s pendiente/s`) + const endTime = performance.now() + console.log(`Tiempo de ejecución: ${(endTime - startTime).toFixed(2)}s`) + } + + deleteTask(nameTask) { + const startTime = performance.now() + if (Object.hasOwn(this.tasks, nameTask)) { + delete this.tasks[nameTask] + console.info('La tarea se ha borrado correctamente') + } + else console.error('La tarea que desea eliminar no existe') + const endTime = performance.now() + console.log(`Tiempo de ejecución: ${(endTime - startTime).toFixed(2)}s`) + } + + viewTaks() { + const startTime = performance.now() + console.info(this.tasks) + const endTime = performance.now() + console.log(`Tiempo de ejecución: ${(endTime - startTime).toFixed(2)}s`) + } +} + +const taskManager = new TaskManager +taskManager.addTask('javascript', 'terminar el ejercicio 25 de javascript') +taskManager.addTask('papel', 'comprar todo el papel higienico por si se viene el apocalipsis') +taskManager.viewTaks() +taskManager.deleteTask('noExisto') +taskManager.deleteTask('papel') +taskManager.viewTaks() \ No newline at end of file