Skip to content
61 changes: 61 additions & 0 deletions Roadmap/18 - CONJUNTOS/javascript/pedamoci.js
Original file line number Diff line number Diff line change
@@ -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)
113 changes: 113 additions & 0 deletions Roadmap/19 - ENUMERACIONES/javascript/pedamoci.js
Original file line number Diff line number Diff line change
@@ -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)
63 changes: 63 additions & 0 deletions Roadmap/20 - PETICIONES HTTP/javascript/pedamoci.js
Original file line number Diff line number Diff line change
@@ -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'))
36 changes: 36 additions & 0 deletions Roadmap/21 - CALLBACKS/javascript/pedamoci.js
Original file line number Diff line number Diff line change
@@ -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)
90 changes: 90 additions & 0 deletions Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/javascript/pedamoci.js
Original file line number Diff line number Diff line change
@@ -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)
Loading