Skip to content

Commit 40dfefc

Browse files
authored
Merge branch 'mouredev:main' into main
2 parents b1c6059 + 629c516 commit 40dfefc

File tree

11 files changed

+1888
-0
lines changed

11 files changed

+1888
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
2+
/*
3+
* EJERCICIO:
4+
* Muestra ejemplos de todas las operaciones que puedes realizar con cadenas de caracteres
5+
* en tu lenguaje. Algunas de esas operaciones podrían ser (busca todas las que puedas):
6+
* - Acceso a caracteres específicos, subcadenas, longitud, concatenación, repetición, recorrido,
7+
* conversión a mayúsculas y minúsculas, reemplazo, división, unión, interpolación, verificación...
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea un programa que analice dos palabras diferentes y realice comprobaciones
11+
* para descubrir si son:
12+
* - Palíndromos
13+
* - Anagramas
14+
* - Isogramas
15+
*/
16+
17+
/*
18+
19+
Los palíndromos son palabras o frases que al leerse de izquierda a derecha y viceversa dicen lo mismo
20+
21+
Un anagrama es una palabra que resulta de la transposición de todas las letras de otra palabra12. Puede aplicarse también a grupos de palabras o frases1. Existen dos tipos de anagramas:
22+
23+
Isogramas
24+
*/
25+
26+
const cadenaAmigo: string = "amigo";
27+
const cadenaUn = "Un";
28+
const cadenaEres = "eres";
29+
30+
//! concatenar strings
31+
const cadenaConcatenadaConSeparador: string = cadenaEres.concat("-",cadenaUn,"-").concat(cadenaAmigo);
32+
console.log(cadenaConcatenadaConSeparador);
33+
34+
//Otra forma
35+
const cadenaConcatenada2: string = `${cadenaEres}${cadenaUn}${cadenaAmigo}`;
36+
console.log(cadenaConcatenada2);
37+
38+
// otra forma
39+
const cadenaConcatenada3: string = cadenaEres + cadenaUn + cadenaAmigo;
40+
console.log(cadenaConcatenada3);
41+
42+
//! Cortar Strings - //!división
43+
//slice
44+
const cadenaCortada: string = cadenaAmigo.slice(0, 4);
45+
console.log(cadenaCortada);
46+
47+
//split
48+
const cadenaSplit: string[] = cadenaAmigo.split("");
49+
console.log("split(''): ", cadenaSplit);
50+
51+
const cadenaSplit2: string[] = cadenaConcatenadaConSeparador.split("-");
52+
console.log(cadenaSplit2);
53+
54+
//! recoger length of a string
55+
const lengthCadenaAmigo: number = cadenaAmigo.length;
56+
console.log("longitud cadenaAmigo: ",lengthCadenaAmigo);
57+
58+
//! recoger caracter de un string
59+
const caracterPosicion4: string = cadenaAmigo.charAt(3);
60+
console.log(caracterPosicion4);
61+
62+
//! Pillar una subcadena de carácteres dentro de la cadena
63+
const subcadena: string = cadenaConcatenada2.substring(4,2);
64+
console.log("subcadena un: ",subcadena);
65+
66+
//! Comparar cadenas
67+
const cadenaIgualValorQueAmigo: string = "amigo";
68+
69+
console.log(`comparacion: ${cadenaIgualValorQueAmigo} === ${cadenaAmigo}`);
70+
cadenaIgualValorQueAmigo.match(cadenaAmigo)
71+
? console.log("son iguales")
72+
: console.log("no son iguales");
73+
74+
console.log(`comparacion: ${cadenaIgualValorQueAmigo} === ${cadenaConcatenadaConSeparador}`);
75+
cadenaIgualValorQueAmigo === cadenaConcatenadaConSeparador
76+
? console.log("son iguales")
77+
: console.log("no son iguales");
78+
79+
//! comparar si existe una subcadena dentro de un string
80+
const substringExists: boolean = cadenaConcatenadaConSeparador.search(cadenaAmigo) !== -1;
81+
82+
//! Recorrer cadenas
83+
const CadenaMayusculas: string = cadenaAmigo.toLocaleLowerCase()
84+
console.log("cadenaAmigo en minusculas: ",CadenaMayusculas);
85+
cadenaAmigo.toLocaleUpperCase()
86+
console.log("cadenaAmigo en minusculas: ",cadenaAmigo.toUpperCase());
87+
88+
//! Repetir string
89+
console.log(cadenaAmigo.repeat(5)); //cadenaAmigo.repeat(5);ç
90+
91+
const monjaRepetida = "monja".repeat(5);
92+
console.log(monjaRepetida);
93+
94+
//!reemplazo
95+
const cadenaRemplazada: string = cadenaConcatenadaConSeparador.replace("-",'.');
96+
console.log(`cadena antes: ${cadenaConcatenadaConSeparador}, cadenaRemplazada: ${cadenaRemplazada}`);
97+
98+
99+
const palabraDividida: string = cadenaConcatenadaConSeparador.slice(0,4);
100+
console.log("Palabra dividida", palabraDividida);
101+
102+
//! interpolación
103+
const nombre: string = "Carlos";
104+
const apellido: string = "Augusto";
105+
const edad: number = 30;
106+
107+
const mensaje: string = `Mi nombre es ${nombre}, mi apellido es ${apellido} y tengo ${edad} años.`;
108+
console.log(mensaje);
109+
110+
//! verificación
111+
console.log("cadenaAmigo.startsWith('am') --> ",cadenaAmigo.startsWith("am"));
112+
console.log("cadenaAmigo.endsWith('rot') --> ",cadenaAmigo.endsWith("rot"));
113+
114+
//! Comprobar si pasa un regex
115+
console.log("cadenaAmigo.match(/amig/) --> ",cadenaAmigo.match(/amig/)!=null);
116+
//! Comprobar si pasa un regex
117+
console.log("cadenaAmigo.match(/amig/) Respuesta real --> ",cadenaAmigo.match(/amig/));
118+
//! comprobar si contiene un substring
119+
console.log("cadenaAmigo.includes('amig') --> ",cadenaAmigo.includes("amig"));
120+
121+
//! recorrido
122+
for(let i=0; i<cadenaAmigo.length; i++){
123+
console.log(`posicion: ${i+1} - caracter: ${cadenaAmigo[i]}`); // cadenaAmigo.charAt(i)
124+
}
125+
126+
127+
/**
128+
* ------------------ Reto Extra ------------------
129+
* Palindromos
130+
* Anagramas
131+
* Isogramas
132+
*/
133+
134+
//! Palindromos
135+
136+
const palindromo: string = "anilina";
137+
const noPalindromo: string = "amigo";
138+
139+
// Una forma de hacerlo
140+
141+
let palindromoInvertido: string = "";
142+
const ultimoIndex: number = palindromo.length -1;
143+
144+
for (let i = 0; i < palindromo.length; i++) {
145+
palindromoInvertido += palindromo[ultimoIndex - i];
146+
}
147+
console.log("palindromoInvertido", palindromoInvertido);
148+
palindromoInvertido == palindromo
149+
? console.log(`${palindromo} es una palabra palíndroma`)
150+
: console.log(`${palindromo} no es una palabra palíndroma`);
151+
152+
153+
// Otra forma más directa
154+
155+
palindromo.toLowerCase() === palindromo.toLowerCase().split("").reverse().join("")
156+
? console.log(`${palindromo} es una palabra palíndroma`)
157+
: console.log(`${palindromo} no es una palabra palíndroma`);
158+
159+
160+
//! Anagramas
161+
162+
const inglaterra: string = "inglaterra";
163+
const integrarla: string = "integrarla";
164+
let dobleIntegrarla = integrarla;
165+
166+
const inglaterraArray: Array<string> = inglaterra.split(""); //convierte el string en un array
167+
let contador: number = 0;
168+
if(inglaterra.length === integrarla.length){
169+
const length: number = inglaterraArray.length;
170+
for (let i = 0; i < length; i++) {
171+
const caracterAComparar = inglaterraArray[i];
172+
if(dobleIntegrarla.includes(caracterAComparar)){
173+
contador++;
174+
const index = dobleIntegrarla.indexOf(caracterAComparar);
175+
if(index !== -1){
176+
dobleIntegrarla = integrarla.slice(0, index) + integrarla.slice(index + 1);
177+
}
178+
}
179+
}
180+
}
181+
if(contador === inglaterra.length){
182+
console.log(`${integrarla} es un anagrama de ${inglaterra}`);
183+
}else{
184+
console.log(`${integrarla} no es un anagrama de ${inglaterra}`);
185+
}
186+
187+
188+
// Ejemplo refactorizado y optimizado:
189+
function areAnagrams(word1: string, word2: string): boolean {
190+
if (word1.length !== word2.length) return false;
191+
const sortedWord1 = word1.toLowerCase().split("").sort().join("");
192+
const sortedWord2 = word2.toLowerCase().split("").sort().join("");
193+
return sortedWord1 === sortedWord2;
194+
}
195+
196+
if (areAnagrams(inglaterra, integrarla)) {
197+
console.log(`${integrarla} es un anagrama de ${inglaterra}`);
198+
} else {
199+
console.log(`${integrarla} no es un anagrama de ${inglaterra}`);
200+
}
201+
202+
203+
//! Isogramas
+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# #21 CALLBACKS
2+
# Dificultad: Media | Publicación: 20/04/24 | Corrección: 27/05/24
3+
4+
## Ejercicio
5+
6+
7+
'''/*
8+
* EJERCICIO:
9+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
10+
* simple (a tu elección) que muestre su funcionamiento.
11+
*/
12+
'''
13+
# Ej. 1 Callback sincrono
14+
# Definicion de una funcion
15+
def saludo(callback): # Parametro callback
16+
print("Antes del callback")
17+
callback() # Llamado a funcion
18+
print("Después del callback")
19+
20+
# Definicion de una funcion
21+
def decir_hola():
22+
print("¡Hola!")
23+
24+
# Llamado a funcion
25+
saludo(decir_hola)
26+
''' Toma como arg. a la funcion decir_hola() que sustituye el parametro callback,
27+
ahora decir_hola() sera llamada dentro de la funcion saludo en lugar de la funcion callback()'''
28+
29+
'''/////////////////////////////////////////////////////////////////////////'''
30+
# Ej. 2 Callback asincrono
31+
import time
32+
import threading
33+
34+
# Definicion de una funcion
35+
def mi_callback(resultado):
36+
print(f"Resultado procesado: {resultado}")
37+
38+
# Definicion de una funcion
39+
def tarea_larga(callback):
40+
print("Iniciando tarea...")
41+
time.sleep(2) # Simulación de tarea larga
42+
resultado = "Tarea completada"
43+
callback(resultado)
44+
45+
# Llamada en un hilo separado
46+
threading.Thread(target=tarea_larga, args=(mi_callback,)).start() # (Objeto, arg.,) inicio
47+
48+
# Ej. 3
49+
def mi_callback(resultado):
50+
print(f"El resultado es: {resultado}")
51+
52+
def operacion_asincrona(callback):
53+
resultado = 42 # Simulación de un resultado
54+
callback(resultado) # Llama al callback con el resultado
55+
56+
# Usar el callback
57+
operacion_asincrona(mi_callback)
58+
print()
59+
60+
'''
61+
* DIFICULTAD EXTRA (opcional):
62+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
63+
* Estará formado por una función que procesa pedidos.
64+
* Debe aceptar el nombre del plato, una callback de confirmación, una
65+
* de listo y otra de entrega.
66+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
67+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
68+
* procesos.
69+
* - Debe invocar a cada callback siguiendo un orden de procesado.
70+
* - Debe notificar que el plato está listo o ha sido entregado.
71+
'''
72+
73+
# Simulador de pedidos de restaurante
74+
import asyncio
75+
import random
76+
77+
# Lapso aleatorio para cada etapa
78+
def generar_lapso():
79+
return random.uniform(1, 10)
80+
81+
# Función principal que inicia el proceso
82+
async def funcion_principal(orden):
83+
print(f"Pedido recibido: {orden}")
84+
# Iniciar la cadena de callbacks
85+
await pedido(orden, confirmacion_pedido)
86+
87+
# Pedido
88+
async def pedido(orden, callback):
89+
lapso = generar_lapso()
90+
print(f"Procesando pedido: {orden} (espera de {lapso:.2f} segundos)")
91+
await asyncio.sleep(lapso)
92+
print(f"Pedido {orden} realizado")
93+
# Llamar al siguiente callback
94+
await callback(orden, pedido_listo)
95+
96+
# Confirmación del pedido
97+
async def confirmacion_pedido(orden, callback):
98+
lapso = generar_lapso()
99+
print(f"Confirmando pedido: {orden} (espera de {lapso:.2f} segundos)")
100+
await asyncio.sleep(lapso)
101+
print(f"Pedido {orden} confirmado")
102+
# Llamar al siguiente callback
103+
await callback(orden, pedido_entregado)
104+
105+
# Pedido listo
106+
async def pedido_listo(orden, callback):
107+
lapso = generar_lapso()
108+
print(f"Preparando pedido: {orden} (espera de {lapso:.2f} segundos)")
109+
await asyncio.sleep(lapso)
110+
print(f"Pedido {orden} listo")
111+
# Llamar al siguiente callback
112+
await callback(orden, None)
113+
114+
# Pedido entregado
115+
async def pedido_entregado(orden, callback):
116+
lapso = generar_lapso()
117+
print(f"Entregando pedido: {orden} (espera de {lapso:.2f} segundos)")
118+
await asyncio.sleep(lapso)
119+
print(f"Pedido {orden} entregado. ¡Gracias por tu compra!")
120+
# Este es el último paso, no hay más callbacks
121+
122+
# Capturar la orden
123+
orden = input("Platillo a ordenar: ")
124+
125+
# Ejecutar el flujo
126+
asyncio.run(funcion_principal(orden))

0 commit comments

Comments
 (0)