Skip to content

Commit a5cbb01

Browse files
authored
Merge pull request mouredev#7501 from Kenysdev/16_20.js
#16 - javascript -> #20
2 parents 315e639 + c907f0d commit a5cbb01

File tree

5 files changed

+535
-0
lines changed

5 files changed

+535
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
_____________________________________
3+
https://github.com/kenysdev
4+
2024 - JavaScript
5+
_______________________________________
6+
#16 EXPRESIONES REGULARES
7+
---------------------------------------
8+
 * EJERCICIO:
9+
 * Utilizando tu lenguaje, explora el concepto de expresiones regulares,
10+
 * creando una que sea capaz de encontrar y extraer todos los números
11+
 * de un texto.
12+
 *
13+
 * DIFICULTAD EXTRA (opcional):
14+
 * Crea 3 expresiones regulares (a tu criterio) capaces de:
15+
 * - Validar un email.
16+
 * - Validar un número de teléfono.
17+
 * - Validar una url.
18+
*/
19+
// ________________________________________________________
20+
21+
function toNumbers(text) {
22+
const numberPattern = /\d+/g;
23+
return text.match(numberPattern) || [];
24+
}
25+
26+
const string = "abcdsfs1s(*&#}2. a3// 45sdf67";
27+
const listNumbers = toNumbers(string);
28+
console.log(listNumbers); // ['1', '2', '3', '45', '67']
29+
30+
// ________________________________________________________
31+
// DIFICULTAD EXTRA
32+
33+
function isEmail(text) {
34+
const pattern = /^[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}$/;
35+
return pattern.test(text);
36+
}
37+
38+
function isPhoneNumber(text) {
39+
const pattern = /^(\d{3}-\d{3}-\d{4}|\d{10})$/;
40+
return pattern.test(text);
41+
}
42+
43+
function isUrl(text) {
44+
const pattern = /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/\S*)?$/;
45+
return pattern.test(text);
46+
}
47+
48+
// Pruebas
49+
console.log("\nisEmail");
50+
console.log(isEmail("[email protected]")); // true
51+
console.log(isEmail("[email protected]")); // true
52+
console.log(isEmail("[email protected]_")); // false
53+
console.log(isEmail("ejm@dmn")); // false
54+
55+
console.log("\nisPhoneNumber");
56+
console.log(isPhoneNumber("123-456-7890")); // true
57+
console.log(isPhoneNumber("1234567890")); // true
58+
console.log(isPhoneNumber("123456-7890")); // false
59+
console.log(isPhoneNumber("uno234567890")); // false
60+
61+
console.log("\nisUrl");
62+
console.log(isUrl("http://www.ejm.com")); // true
63+
console.log(isUrl("google.com")); // true
64+
console.log(isUrl("ejm.com/a/b/c")); // true
65+
console.log(isUrl("https://.ejm.com")); // false
66+
console.log(isUrl("https://.ejm.com/a b")); // false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
_____________________________________
3+
https://github.com/kenysdev
4+
2024 - JavaScript
5+
_______________________________________
6+
#17 ITERACIONES
7+
---------------------------------------
8+
 * EJERCICIO:
9+
 * Utilizando tu lenguaje, emplea 3 mecanismos diferentes para imprimir
10+
 * números del 1 al 10 mediante iteración.
11+
 *
12+
 * DIFICULTAD EXTRA (opcional):
13+
 * Escribe el mayor número de mecanismos que posea tu lenguaje
14+
 * para iterar valores. ¿Eres capaz de utilizar 5? ¿Y 10?
15+
*/
16+
// ________________________________________________________
17+
18+
console.log("bucle 'for'")
19+
for (let i = 1; i <= 10; i++) {
20+
console.log(i);
21+
}
22+
23+
console.log("\nbucle 'while'")
24+
let i = 1;
25+
while (i <= 10) {
26+
console.log(i);
27+
i++;
28+
}
29+
30+
console.log("\nbucle 'do...while'")
31+
let n = 1;
32+
do {
33+
console.log(n);
34+
n++;
35+
} while (n <= 10);
36+
37+
// ________________________________________________________
38+
// DIFICULTAD EXTRA
39+
40+
console.log("\nfor...of con Array.from()")
41+
for (const num of Array.from({ length: 5 }, (_, i) => i + 1)) {
42+
console.log(num);
43+
}
44+
45+
console.log("\nArray.from() con .forEach()")
46+
Array.from({ length: 5 }, (_, i) => i + 1).forEach(num => console.log(num));
47+
48+
console.log("\nUsando 'map()'")
49+
Array.from({ length: 5 }, (_, i) => i + 1).map(num => console.log(num));
50+
51+
console.log("\nUsando 'reduce'")
52+
Array.from({ length: 5 }, (_, i) => i + 1).reduce((_, num) => {
53+
console.log(num);
54+
return num;
55+
}, 0);
56+
57+
console.log("\nUsando 'every'")
58+
const result = [1, 2, 3, 4].every(num => {
59+
console.log(num);
60+
return num < 4;
61+
});
62+
63+
console.log("\nUsando 'some'")
64+
const result2 = [1, 2, 3, 4].some(num => {
65+
console.log(num);
66+
return num === 3;
67+
});
68+
69+
console.log("\nUsando 'for...in'")
70+
const numbers = [1, 2, 3 , 4, 5]
71+
for (const n in numbers) {
72+
console.log(n);
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*
2+
_____________________________________
3+
https://github.com/kenysdev
4+
2024 - JavaScript
5+
_______________________________________
6+
#18 CONJUNTOS
7+
---------------------------------------
8+
 * EJERCICIO:
9+
 * Utilizando tu lenguaje crea un conjunto de datos y realiza las siguientes
10+
 * operaciones (debes utilizar una estructura que las soporte):
11+
 * - Añade un elemento al final.
12+
 * - Añade un elemento al principio.
13+
 * - Añade varios elementos en bloque al final.
14+
 * - Añade varios elementos en bloque en una posición concreta.
15+
 * - Elimina un elemento en una posición concreta.
16+
 * - Actualiza el valor de un elemento en una posición concreta.
17+
 * - Comprueba si un elemento está en un conjunto.
18+
 * - Elimina todo el contenido del conjunto.
19+
 *
20+
 * DIFICULTAD EXTRA (opcional):
21+
 * Muestra ejemplos de las siguientes operaciones con conjuntos:
22+
 * - Unión.
23+
 * - Intersección.
24+
 * - Diferencia.
25+
 * - Diferencia simétrica.
26+
*/
27+
// ________________________________________________________
28+
29+
// Crear una lista
30+
let myList = ["a", "b", "c"];
31+
32+
// Añade un elemento al final.
33+
myList.push("d");
34+
35+
// Añade un elemento al principio.
36+
myList.unshift("-");
37+
38+
// Añade varios elementos en bloque al final.
39+
myList.push("e", "f");
40+
41+
// Añade varios elementos en bloque en una posición concreta.
42+
myList.splice(4, 0, "-", ">");
43+
44+
// Elimina en una posición concreta.
45+
myList.splice(5, 1);
46+
47+
// Actualiza en una posición concreta.
48+
myList[2] = "-b";
49+
50+
// Mostrar
51+
console.log(myList);
52+
53+
// Comprobar
54+
console.log(`"c" en lista: ${myList.includes("c")}`);
55+
console.log(`"g" en lista: ${myList.includes("g")}`);
56+
57+
// Elimina todo el contenido.
58+
myList.length = 0;
59+
console.log(myList);
60+
61+
// ________________________________________________________
62+
// DIFICULTAD EXTRA
63+
64+
// Crear conjuntos
65+
let set1 = new Set(["a", "b", "c", "d"]);
66+
let set2 = new Set(["c", "d", "e", "f"]);
67+
console.log(`set1: ${[...set1]} - set2: ${[...set2]}`)
68+
69+
// Unión
70+
let union = new Set([...set1, ...set2]);
71+
console.log(`Unión: ${[...union]}`);
72+
73+
// Intersección
74+
let intersection = new Set([...set1].filter(x => set2.has(x)));
75+
console.log(`Intersección: ${[...intersection]}`);
76+
77+
// Diferencia (set1 - set2)
78+
let difference1 = new Set([...set1].filter(x => !set2.has(x)));
79+
console.log(`Diferencia: ${[...difference1]}`);
80+
81+
// Diferencia (set2 - set1)
82+
let difference2 = new Set([...set2].filter(x => !set1.has(x)));
83+
console.log(`Diferencia: ${[...difference2]}`);
84+
85+
// Diferencia simétrica
86+
let symmetricDifference = new Set([
87+
...[...set1].filter(x => !set2.has(x)),
88+
...[...set2].filter(x => !set1.has(x))
89+
]);
90+
console.log(`Diferencia simétrica: ${[...symmetricDifference]}`);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*
2+
_____________________________________
3+
https://github.com/kenysdev
4+
2024 - JavaScript
5+
_______________________________________
6+
#19 ENUMERACIONES
7+
---------------------------------------
8+
 * EJERCICIO:
9+
 * Empleando tu lenguaje, explora la definición del tipo de dato
10+
 * que sirva para definir enumeraciones (Enum).
11+
 * Crea un Enum que represente los días de la semana del lunes
12+
 * al domingo, en ese orden. Con ese enumerado, crea una operación
13+
 * que muestre el nombre del día de la semana dependiendo del número entero
14+
 * utilizado (del 1 al 7).
15+
 *
16+
 * DIFICULTAD EXTRA (opcional):
17+
 * Crea un pequeño sistema de gestión del estado de pedidos.
18+
 * Implementa una clase que defina un pedido con las siguientes características:
19+
 * - El pedido tiene un identificador y un estado.
20+
 * - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
21+
 * - Implementa las funciones que sirvan para modificar el estado:
22+
 *   - Pedido enviado
23+
 *   - Pedido cancelado
24+
 *   - Pedido entregado
25+
 *   (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
26+
 * - Implementa una función para mostrar un texto descriptivo según el estado actual.
27+
 * - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
28+
*/
29+
// ________________________________________________________
30+
31+
const Weekday = Object.freeze({
32+
MONDAY: 1,
33+
TUESDAY: 2,
34+
WEDNESDAY: 3,
35+
THURSDAY: 4,
36+
FRIDAY: 5,
37+
SATURDAY: 6,
38+
SUNDAY: 7,
39+
});
40+
41+
function getDay(num) {
42+
for (const [key, value] of Object.entries(Weekday)) {
43+
if (value === num) {
44+
return key;
45+
}
46+
}
47+
return "'o'";
48+
}
49+
50+
function getNumDay(day) {
51+
return Weekday[day] || 0;
52+
}
53+
54+
console.log(getDay(7)); // SUNDAY
55+
console.log(getDay(3)); // WEDNESDAY
56+
console.log(getDay(8)); // 'o'
57+
58+
console.log(getNumDay("TUESDAY")); // 2
59+
console.log(getNumDay("FRIDAY")); // 5
60+
console.log(getNumDay("abc")); // 0
61+
62+
// ________________________________________________________
63+
// DIFICULTAD EXTRA
64+
65+
console.log("\nEJERCICIO 2:");
66+
67+
// Enum para el estado de pedidos
68+
const Status = Object.freeze({
69+
PENDING: 1,
70+
SHIPPED: 2,
71+
DELIVERED: 3,
72+
CANCELED: 4,
73+
});
74+
75+
class Order {
76+
constructor(identifier) {
77+
this.identifier = identifier;
78+
this._status = Status.PENDING;
79+
}
80+
81+
send() {
82+
console.log("\nEnviar:");
83+
if (this._status === Status.PENDING) {
84+
this._status = Status.SHIPPED;
85+
console.log(this.info());
86+
} else {
87+
console.log(`Operación inválida:`, this.info());
88+
}
89+
}
90+
91+
cancel() {
92+
console.log("\nCancelar:");
93+
if (this._status === Status.PENDING) {
94+
this._status = Status.CANCELED;
95+
console.log(this.info());
96+
} else {
97+
console.log(`Operación inválida:`, this.info());
98+
}
99+
}
100+
101+
deliver() {
102+
console.log("\nEntregar:");
103+
if (this._status === Status.SHIPPED) {
104+
this._status = Status.DELIVERED;
105+
console.log(this.info());
106+
} else {
107+
console.log(`Operación inválida:`, this.info());
108+
}
109+
}
110+
111+
info() {
112+
const statusName = Object.keys(Status).find(
113+
key => Status[key] === this._status
114+
);
115+
return `${this.identifier} -> ${statusName}`;
116+
}
117+
}
118+
119+
const libro1 = new Order("libro1");
120+
const libro2 = new Order("libro2");
121+
const libro3 = new Order("libro3");
122+
123+
console.log("\n-----\nOperaciones exitosas:\n-----");
124+
libro1.send();
125+
libro1.deliver();
126+
libro2.cancel();
127+
128+
console.log("\n-----\nOperaciones inválidas:\n-----");
129+
libro3.deliver();
130+
libro2.cancel();
131+
libro1.send();

0 commit comments

Comments
 (0)