Skip to content

Commit f6df226

Browse files
authored
Merge pull request mouredev#5968 from pedroomar23/pedroomar23
#22, #23 - Swift
2 parents 8d24618 + f8d682d commit f6df226

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import Foundation
2+
3+
/*
4+
* EJERCICIO:
5+
* Explora el concepto de funciones de orden superior en tu lenguaje
6+
* creando ejemplos simples (a tu elección) que muestren su funcionamiento.
7+
*
8+
* DIFICULTAD EXTRA (opcional):
9+
* Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
10+
* lista de calificaciones), utiliza funciones de orden superior para
11+
* realizar las siguientes operaciones de procesamiento y análisis:
12+
* - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
13+
* y promedio de sus calificaciones.
14+
* - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
15+
* que tienen calificaciones con un 9 o más de promedio.
16+
* - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
17+
* - Mayor calificación: Obtiene la calificación más alta de entre todas las
18+
* de los alumnos.
19+
* - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
20+
*/
21+
22+
// Ejemplos simples de funciones de orden superior
23+
24+
// 1. Map: Transforma cada elemento de una colección
25+
let numbers = [1, 2, 3, 4, 5]
26+
let squaredNumbers = numbers.map { $0 * $0 }
27+
print("Números al cuadrado: \(squaredNumbers)")
28+
29+
// 2. Filter: Filtra elementos de una colección basado en una condición
30+
let evenNumbers = numbers.filter { $0 % 2 == 0 }
31+
print("Números pares: \(evenNumbers)")
32+
33+
// 3. Reduce: Combina todos los elementos de una colección en un único valor
34+
let sum = numbers.reduce(0, +)
35+
print("Suma de números: \(sum)")
36+
37+
// 4. Función que recibe otra función como parámetro
38+
func applyOperation(_ a: Int, _ b: Int, operation: (Int, Int) -> Int) -> Int {
39+
return operation(a, b)
40+
}
41+
42+
let result = applyOperation(5, 3, operation: *)
43+
print("Resultado de la operación: \(result)")
44+
45+
// Dificultad Extra
46+
struct Student {
47+
let name: String
48+
let birthDate: Date
49+
let grades: [Double]
50+
}
51+
52+
let dateFormatter = DateFormatter()
53+
dateFormatter.dateFormat = "yyyy-MM-dd"
54+
55+
let students = [
56+
Student(name: "Ana", birthDate: dateFormatter.date(from: "2000-05-15")!, grades: [8.5, 9.0, 7.5, 10.0]),
57+
Student(name: "Carlos", birthDate: dateFormatter.date(from: "1999-11-22")!, grades: [7.0, 8.5, 9.5, 8.0]),
58+
Student(name: "Elena", birthDate: dateFormatter.date(from: "2001-03-10")!, grades: [9.5, 9.0, 9.5, 10.0]),
59+
Student(name: "David", birthDate: dateFormatter.date(from: "2000-09-05")!, grades: [6.5, 7.0, 8.0, 7.5])
60+
]
61+
62+
// 1. Promedio de calificaciones
63+
let averageGrades = students.map { student in
64+
(name: student.name, average: student.grades.reduce(0, +) / Double(student.grades.count))
65+
}
66+
print("Promedio de calificaciones:")
67+
averageGrades.forEach { print("\($0.name): \(String(format: "%.2f", $0.average))") }
68+
69+
// 2. Mejores estudiantes
70+
let bestStudents = students.filter { student in
71+
student.grades.reduce(0, +) / Double(student.grades.count) >= 9.0
72+
}.map { $0.name }
73+
print("\nMejores estudiantes: \(bestStudents)")
74+
75+
// 3. Ordenar por nacimiento (más joven primero)
76+
let sortedByAge = students.sorted { $0.birthDate > $1.birthDate }
77+
print("\nEstudiantes ordenados por edad (más joven primero):")
78+
sortedByAge.forEach { print("\($0.name): \(dateFormatter.string(from: $0.birthDate))") }
79+
80+
// 4. Mayor calificación
81+
let highestGrade = students.flatMap { $0.grades }.max() ?? 0.0
82+
print("\nCalificación más alta: \(highestGrade)")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import Foundation
2+
3+
x/*
4+
* EJERCICIO:
5+
* Explora el patrón de diseño "singleton" y muestra cómo crearlo
6+
* con un ejemplo genérico.
7+
*
8+
* DIFICULTAD EXTRA (opcional):
9+
* Utiliza el patrón de diseño "singleton" para representar una clase que
10+
* haga referencia a la sesión de usuario de una aplicación ficticia.
11+
* La sesión debe permitir asignar un usuario (id, username, nombre y email),
12+
* recuperar los datos del usuario y borrar los datos de la sesión.
13+
*/
14+
15+
class Singlenton {
16+
static let shared: Singleton = Singlenton()
17+
18+
private init() {}
19+
20+
func someMethod() {
21+
print("Este es un metodo generico Singlenton")
22+
}
23+
}
24+
25+
// Ejemplo genérico de Singleton
26+
class GenericSingleton {
27+
static let shared = GenericSingleton()
28+
29+
private init() {}
30+
31+
func someMethod() {
32+
print("This is a method of the Singleton")
33+
}
34+
}
35+
36+
// Ejemplo de Singleton para una sesión de usuario
37+
class UserSession {
38+
static let shared = UserSession()
39+
40+
private init() {}
41+
42+
private var user: User?
43+
44+
struct User {
45+
let id: String
46+
let username: String
47+
let name: String
48+
let email: String
49+
}
50+
51+
func assignUser(id: String, username: String, name: String, email: String) {
52+
user = User(id: id, username: username, name: name, email: email)
53+
}
54+
55+
func getUserData() -> User? {
56+
return user
57+
}
58+
59+
func clearSession() {
60+
user = nil
61+
}
62+
}

0 commit comments

Comments
 (0)