Skip to content

Commit 02902d2

Browse files
Merge branch 'main' of github.com:mouredev/roadmap-retos-programacion into JesusAEE
2 parents b6e181b + 580f4a6 commit 02902d2

File tree

12 files changed

+2244
-923
lines changed

12 files changed

+2244
-923
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# #04 CADENAS DE CARACTERES
2+
'''
3+
Muestra ejemplos de todas las operacines que puedes realizar con cadenas de caracteres:
4+
Acceso a caracteres especificos, subcadenas, longitud, concatenacion, repeticion, recorrido,
5+
conversion a mayusculas y minusculas, reemplazo, division, union, interpolacion, verificacion.
6+
'''
7+
8+
cadena = "HolaMundo"
9+
print(f"String: {cadena}")
10+
11+
# Acceso a caracteres especificos
12+
print("Access to specyfic characters")
13+
print(f"First character: {cadena[0]}")
14+
print(f"Sixth character: {cadena[5]}")
15+
print(f"Last character: {cadena[-1]}")
16+
17+
# Subcadenas
18+
print()
19+
20+
# Longitud
21+
print("\nString Lenght")
22+
print(f"String lenght is: {len(cadena)}")
23+
24+
# Concatenacion
25+
print("\nString Concatenation")
26+
cadena2 = "HolaPython!"
27+
print(cadena + cadena2)
28+
29+
# Repeticion
30+
print("\nString Lenght")
31+
print(cadena * 3)
32+
33+
# Mayusculas
34+
print("\nConvert to uppercase")
35+
print(cadena.upper())
36+
37+
# Minusculas
38+
print("\nConvert to lowercase")
39+
print(cadena.lower())
40+
41+
# Union
42+
print("\nConvert to lowercase")
43+
list_cadena = ["Hola", "mundo", "python"]
44+
join_cadena = " - ".join(cadena)
45+
print(f"Joint String: {cadena}")
46+
47+
# Verificacion
48+
print(f"String is alphanumberic?: {cadena.isalpha()}")
49+
50+
# DIFICULTAD EXTRA
51+
print("\n----------------------------------------------------")
52+
print("EXTRA DIFFICULT")
53+
'''
54+
Crea un programa que analice dos palabras diferentes y realice comprobaciones
55+
para descubrir si son:
56+
- Palindromos
57+
- Anagramas
58+
- Isogramas
59+
'''
60+
def check(string1, string2):
61+
# Palindromo
62+
print(f"{string1} is a palyndrome" if string1 == string1[::-1] else f"{string1} is not a palyndrome")
63+
print(f"{string2} is a palyndrome" if string2 == string2[::-1] else f"{string2} is not a palyndrome")
64+
65+
# Anagram
66+
print(f"{string1} is anagram of {string2}" if sorted(string1) == sorted(string2) else f"{string1} is not anagram of {string2}")
67+
68+
# Isogram
69+
print(f"{string1} is an isogram" if len(string1) == len(set(string1)) else f"{string1} is not an isogram")
70+
print(f"{string2} is an isogram" if len(string2) == len(set(string2)) else f"{string2} is not an isogram")
71+
72+
print()
73+
74+
def main():
75+
check("radar", "ana")
76+
check("amor", "roma")
77+
check("roma", "python")
78+
79+
if __name__ == "__main__":
80+
main()
81+
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
'''
2+
/*
3+
* EJERCICIO:
4+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
5+
* simple (a tu elección) que muestre su funcionamiento.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
9+
* Estará formado por una función que procesa pedidos.
10+
* Debe aceptar el nombre del plato, una callback de confirmación, una
11+
* de listo y otra de entrega.
12+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
13+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
14+
* procesos.
15+
* - Debe invocar a cada callback siguiendo un orden de procesado.
16+
* - Debe notificar que el plato está listo o ha sido entregado.
17+
*/
18+
'''
19+
20+
## Programación Asíncrona principal saludo.
21+
22+
def greeting_process(name: str, callback):
23+
print('Ejecutando el proceso de saludo...')
24+
callback(name)
25+
26+
def greet_callback(names: str):
27+
print(f'Hola, {names}!')
28+
29+
greeting_process('Rigo', greet_callback)
30+
31+
'''
32+
Extra
33+
'''
34+
import random
35+
import time
36+
import threading
37+
38+
def order_process(dish_name: str, confirm_callbackm, ready_callback, delivered_callback):
39+
def process():
40+
confirm_callbackm(dish_name)
41+
time.sleep(random.randint(1, 10))
42+
ready_callback(dish_name)
43+
time.sleep(random.randint(1, 10))
44+
delivered_callback(dish_name)
45+
46+
threading.Thread(target=process).start()
47+
48+
49+
def confirm_order(dish_name: str):
50+
print(f"Tu pedido {dish_name} ha sido confirmado.")
51+
52+
def order_ready(dish_name: str):
53+
print(f"Tu pedido {dish_name} está listo.")
54+
55+
def order_delivered(dish_name: str):
56+
print(f"Tu pedido {dish_name} ha sido entregado.")
57+
58+
order_process("Pizza Barbacoa", confirm_order, order_ready, order_delivered)
59+
order_process("Pizza 4 Quesos", confirm_order, order_ready, order_delivered)
60+
order_process("Pizza Margarita", confirm_order, order_ready, order_delivered)
61+
order_process("Pizza con Piña", confirm_order, order_ready, order_delivered)
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
3+
4+
#include <iostream>
5+
#include <unordered_map>
6+
#include <memory>
7+
#include <cmath>
8+
9+
/*
10+
* EJERCICIO:
11+
* Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
12+
* y crea un ejemplo simple donde se muestre su funcionamiento
13+
* de forma correcta e incorrecta.
14+
*
15+
* DIFICULTAD EXTRA:
16+
* Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
17+
* Requisitos:
18+
* - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
19+
* Instrucciones:
20+
* 1. Implementa las operaciones de suma, resta, multiplicación y división.
21+
* 2. Comprueba que el sistema funciona.
22+
* 3. Agrega una quinta operación para calcular potencias.
23+
* 4. Comprueba que se cumple el OCP.
24+
*/
25+
26+
class Operacion {
27+
public:
28+
virtual double calcular(double a, double b) const = 0;
29+
virtual ~Operacion() = default;
30+
};
31+
32+
class Suma : public Operacion {
33+
public:
34+
double calcular(double a, double b) const override {
35+
return a + b;
36+
}
37+
};
38+
39+
class Resta : public Operacion {
40+
public:
41+
double calcular(double a, double b) const override {
42+
return a - b;
43+
}
44+
};
45+
46+
class Multiplicacion : public Operacion {
47+
public:
48+
double calcular(double a, double b) const override {
49+
return a * b;
50+
}
51+
};
52+
53+
class Division : public Operacion {
54+
public:
55+
double calcular(double a, double b) const override {
56+
if (b == 0) {
57+
throw std::invalid_argument("División por cero");
58+
}
59+
return a / b;
60+
}
61+
};
62+
63+
class Potencia : public Operacion {
64+
public:
65+
double calcular(double a, double b) const override {
66+
return std::pow(a, b);
67+
}
68+
};
69+
70+
class Calculadora {
71+
private:
72+
std::unordered_map<char, std::unique_ptr<Operacion>> operaciones;
73+
74+
public:
75+
void agregarOperacion(char simbolo, std::unique_ptr<Operacion> operacion) {
76+
operaciones[simbolo] = std::move(operacion);
77+
}
78+
79+
double calcular(char operacion, double a, double b) const {
80+
auto it = operaciones.find(operacion);
81+
if (it != operaciones.end()) {
82+
return it->second->calcular(a, b);
83+
} else {
84+
throw std::invalid_argument("Operación no soportada");
85+
}
86+
}
87+
};
88+
89+
int main() {
90+
Calculadora calc;
91+
calc.agregarOperacion('+', std::make_unique<Suma>());
92+
calc.agregarOperacion('-', std::make_unique<Resta>());
93+
calc.agregarOperacion('*', std::make_unique<Multiplicacion>());
94+
calc.agregarOperacion('/', std::make_unique<Division>());
95+
calc.agregarOperacion('^', std::make_unique<Potencia>());
96+
97+
std::cout << "[+] - Suma: " << calc.calcular('+', 5, 3) << std::endl;
98+
std::cout << "[+] - Resta: " << calc.calcular('-', 5, 3) << std::endl;
99+
std::cout << "[+] - Multiplicación: " << calc.calcular('*', 5, 3) << std::endl;
100+
std::cout << "[+] - División: " << calc.calcular('/', 5, 3) << std::endl;
101+
std::cout << "[+] - Potencia: " << calc.calcular('^', 5, 3) << std::endl;
102+
103+
return 0;
104+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
3+
4+
"use strict";
5+
6+
/*
7+
* EJERCICIO:
8+
* Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
9+
* y crea un ejemplo simple donde se muestre su funcionamiento
10+
* de forma correcta e incorrecta.
11+
*
12+
* DIFICULTAD EXTRA:
13+
* Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
14+
* Requisitos:
15+
* - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
16+
* Instrucciones:
17+
* 1. Implementa las operaciones de suma, resta, multiplicación y división.
18+
* 2. Comprueba que el sistema funciona.
19+
* 3. Agrega una quinta operación para calcular potencias.
20+
* 4. Comprueba que se cumple el OCP.
21+
*/
22+
23+
class Operacion {
24+
calcular(a, b) {
25+
throw new Error('Método calcular debe ser implementado');
26+
}
27+
}
28+
29+
class Suma extends Operacion {
30+
calcular(a, b) {
31+
return a + b;
32+
}
33+
}
34+
35+
class Resta extends Operacion {
36+
calcular(a, b) {
37+
return a - b;
38+
}
39+
}
40+
41+
class Multiplicacion extends Operacion {
42+
calcular(a, b) {
43+
return a * b;
44+
}
45+
}
46+
47+
class Division extends Operacion {
48+
calcular(a, b) {
49+
if (b === 0) {
50+
throw new Error('División por cero');
51+
}
52+
return a / b;
53+
}
54+
}
55+
56+
class Potencia extends Operacion {
57+
calcular(a, b) {
58+
return Math.pow(a, b);
59+
}
60+
}
61+
62+
class Calculadora {
63+
constructor() {
64+
this.operaciones = {};
65+
}
66+
67+
agregarOperacion(nombre, operacion) {
68+
this.operaciones[nombre] = operacion;
69+
}
70+
71+
calcular(nombre, a, b) {
72+
const operacion = this.operaciones[nombre];
73+
if (!operacion) {
74+
throw new Error('Operación no soportada');
75+
}
76+
return operacion.calcular(a, b);
77+
}
78+
}
79+
80+
const calc = new Calculadora();
81+
calc.agregarOperacion('+', new Suma());
82+
calc.agregarOperacion('-', new Resta());
83+
calc.agregarOperacion('*', new Multiplicacion());
84+
calc.agregarOperacion('/', new Division());
85+
calc.agregarOperacion('^', new Potencia());
86+
87+
console.log("[+] - Suma:", calc.calcular('+', 5, 3));
88+
console.log("[+] - Resta:", calc.calcular('-', 5, 3));
89+
console.log("[+] - Multiplicación:", calc.calcular('*', 5, 3));
90+
console.log("[+] - División:", calc.calcular('/', 5, 3));
91+
console.log("[+] - Potencia:", calc.calcular('^', 5, 3));
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
"""
2+
/*
3+
* EJERCICIO:
4+
* Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
5+
* y crea un ejemplo simple donde se muestre su funcionamiento
6+
* de forma correcta e incorrecta.
7+
*
8+
"""
9+
10+
11+
class Animal:
12+
def __init__(self, name):
13+
self.name = name
14+
15+
16+
class Sonido(Animal):
17+
def sonido(self):
18+
print(f"{self.name} hace ruidos!")
19+
20+
21+
class Comer(Animal):
22+
def comer(self):
23+
print(f"{self.name} come su comida...")
24+
25+
26+
class Saludar(Animal):
27+
def saludar(self):
28+
print(f"{self.name} saluda!!!")
29+
30+
31+
animal1 = Animal("Leon")
32+
print(animal1.name)
33+
sonido1 = Sonido("Leon")
34+
sonido1.sonido()
35+
comer1 = Comer("Elefante")
36+
comer1.comer()
37+
saludar1 = Saludar("Tigre")
38+
saludar1.saludar()
39+
40+
"""
41+
* DIFICULTAD EXTRA (opcional):
42+
* Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
43+
* Requisitos:
44+
* - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
45+
* Instrucciones:
46+
* 1. Implementa las operaciones de suma, resta, multiplicación y división.
47+
* 2. Comprueba que el sistema funciona.
48+
* 3. Agrega una quinta operación para calcular potencias.
49+
* 4. Comprueba que se cumple el OCP.
50+
*/
51+
"""

0 commit comments

Comments
 (0)