Skip to content

Commit a858931

Browse files
committed
#18 - typescript
1 parent 8e5655d commit a858931

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
/**
2+
* TEORÍA: Conjuntos (Sets) en TypeScript
3+
*
4+
* TypeScript utiliza la misma implementación de Set que JavaScript, pero añade
5+
* tipado estático y algunas mejoras en la sintaxis. Los Sets en TypeScript:
6+
*
7+
* 1. Son colecciones de valores únicos
8+
* 2. Pueden contener cualquier tipo de valor
9+
* 3. Mantienen el orden de inserción
10+
* 4. Proporcionan operaciones eficientes para añadir, eliminar y verificar elementos
11+
*
12+
* TypeScript añade la capacidad de tipar los Sets, por ejemplo:
13+
* let stringSet: Set<string> = new Set<string>();
14+
*/
15+
16+
class SetOperations<T> {
17+
private conjunto: Set<T>;
18+
19+
constructor() {
20+
this.conjunto = new Set<T>();
21+
}
22+
23+
/**
24+
* Muestra el contenido actual del conjunto
25+
*/
26+
private mostrarConjunto(mensaje: string): void {
27+
console.log(`${mensaje}: [${Array.from(this.conjunto).join(", ")}]`);
28+
}
29+
30+
/**
31+
* 1. Añade un elemento al final
32+
*/
33+
agregarAlFinal(elemento: T): void {
34+
this.conjunto.add(elemento);
35+
this.mostrarConjunto(`Después de añadir '${String(elemento)}' al final`);
36+
}
37+
38+
/**
39+
* 2. Añade un elemento al "principio"
40+
* Nota: En realidad, en un Set no hay concepto de principio o final
41+
* Simulamos esto convirtiendo a array, modificando y volviendo a Set
42+
*/
43+
agregarAlPrincipio(elemento: T): void {
44+
const tempArray = Array.from(this.conjunto);
45+
this.conjunto = new Set([elemento, ...tempArray]);
46+
this.mostrarConjunto(`Después de añadir '${String(elemento)}' al principio`);
47+
}
48+
49+
/**
50+
* 3. Añade varios elementos en bloque al final
51+
*/
52+
agregarVariosAlFinal(elementos: T[]): void {
53+
elementos.forEach(elemento => this.conjunto.add(elemento));
54+
this.mostrarConjunto("Después de añadir varios elementos al final");
55+
}
56+
57+
/**
58+
* 4. Añade varios elementos en bloque en una posición concreta
59+
*/
60+
agregarVariosEnPosicion(elementos: T[], posicion: number): void {
61+
const tempArray = Array.from(this.conjunto);
62+
tempArray.splice(posicion, 0, ...elementos);
63+
this.conjunto = new Set(tempArray);
64+
this.mostrarConjunto(`Después de añadir elementos en posición ${posicion}`);
65+
}
66+
67+
/**
68+
* 5. Elimina un elemento en una posición concreta
69+
*/
70+
eliminarEnPosicion(posicion: number): void {
71+
const tempArray = Array.from(this.conjunto);
72+
if (posicion >= 0 && posicion < tempArray.length) {
73+
tempArray.splice(posicion, 1);
74+
this.conjunto = new Set(tempArray);
75+
this.mostrarConjunto(`Después de eliminar elemento en posición ${posicion}`);
76+
}
77+
}
78+
79+
/**
80+
* 6. Actualiza el valor de un elemento en una posición concreta
81+
*/
82+
actualizarEnPosicion(posicion: number, nuevoValor: T): void {
83+
const tempArray = Array.from(this.conjunto);
84+
if (posicion >= 0 && posicion < tempArray.length) {
85+
tempArray[posicion] = nuevoValor;
86+
this.conjunto = new Set(tempArray);
87+
this.mostrarConjunto(`Después de actualizar elemento en posición ${posicion}`);
88+
}
89+
}
90+
91+
/**
92+
* 7. Comprueba si un elemento está en el conjunto
93+
*/
94+
contiene(elemento: T): boolean {
95+
const resultado = this.conjunto.has(elemento);
96+
console.log(`¿El conjunto contiene '${String(elemento)}'? ${resultado ? "Sí" : "No"}`);
97+
return resultado;
98+
}
99+
100+
/**
101+
* 8. Elimina todo el contenido del conjunto
102+
*/
103+
limpiar(): void {
104+
this.conjunto.clear();
105+
this.mostrarConjunto("Después de limpiar el conjunto");
106+
}
107+
108+
/**
109+
* Obtiene el conjunto actual
110+
*/
111+
obtenerConjunto(): Set<T> {
112+
return this.conjunto;
113+
}
114+
}
115+
116+
/**
117+
* Clase estática para operaciones extra con conjuntos
118+
*/
119+
class OperacionesExtra {
120+
/**
121+
* Unión de dos conjuntos
122+
*/
123+
static union<T>(conjunto1: Set<T>, conjunto2: Set<T>): Set<T> {
124+
return new Set([...conjunto1, ...conjunto2]);
125+
}
126+
127+
/**
128+
* Intersección de dos conjuntos
129+
*/
130+
static interseccion<T>(conjunto1: Set<T>, conjunto2: Set<T>): Set<T> {
131+
return new Set([...conjunto1].filter(x => conjunto2.has(x)));
132+
}
133+
134+
/**
135+
* Diferencia de dos conjuntos
136+
*/
137+
static diferencia<T>(conjunto1: Set<T>, conjunto2: Set<T>): Set<T> {
138+
return new Set([...conjunto1].filter(x => !conjunto2.has(x)));
139+
}
140+
141+
/**
142+
* Diferencia simétrica de dos conjuntos
143+
*/
144+
static diferenciaSimetrica<T>(conjunto1: Set<T>, conjunto2: Set<T>): Set<T> {
145+
const diferencia1 = OperacionesExtra.diferencia(conjunto1, conjunto2);
146+
const diferencia2 = OperacionesExtra.diferencia(conjunto2, conjunto1);
147+
return OperacionesExtra.union(diferencia1, diferencia2);
148+
}
149+
}
150+
151+
// Función para mostrar un conjunto
152+
function mostrarConjunto<T>(nombre: string, conjunto: Set<T>): void {
153+
console.log(`${nombre}: [${Array.from(conjunto).join(", ")}]`);
154+
}
155+
156+
// Demostración de uso
157+
function demostrarOperaciones(): void {
158+
console.log("PARTE 1: OPERACIONES BÁSICAS");
159+
const demo = new SetOperations<string>();
160+
161+
demo.agregarAlFinal("Elemento1");
162+
demo.agregarAlPrincipio("Elemento2");
163+
demo.agregarVariosAlFinal(["Elemento3", "Elemento4", "Elemento5"]);
164+
demo.agregarVariosEnPosicion(["ElementoA", "ElementoB"], 2);
165+
demo.eliminarEnPosicion(3);
166+
demo.actualizarEnPosicion(1, "ElementoActualizado");
167+
demo.contiene("Elemento1");
168+
demo.limpiar();
169+
170+
console.log("\nPARTE 2: OPERACIONES EXTRA");
171+
const conjunto1 = new Set([1, 2, 3, 4, 5]);
172+
const conjunto2 = new Set([4, 5, 6, 7, 8]);
173+
174+
mostrarConjunto("Conjunto 1", conjunto1);
175+
mostrarConjunto("Conjunto 2", conjunto2);
176+
177+
const union = OperacionesExtra.union(conjunto1, conjunto2);
178+
mostrarConjunto("Unión", union);
179+
180+
const interseccion = OperacionesExtra.interseccion(conjunto1, conjunto2);
181+
mostrarConjunto("Intersección", interseccion);
182+
183+
const diferencia = OperacionesExtra.diferencia(conjunto1, conjunto2);
184+
mostrarConjunto("Diferencia (conjunto1 - conjunto2)", diferencia);
185+
186+
const diferenciaSimetrica = OperacionesExtra.diferenciaSimetrica(conjunto1, conjunto2);
187+
mostrarConjunto("Diferencia simétrica", diferenciaSimetrica);
188+
}
189+
190+
// Ejecutar la demostración
191+
demostrarOperaciones();

0 commit comments

Comments
 (0)