rafaym commited on
Commit
4ea6bd6
·
verified ·
1 Parent(s): 5333808

feat(es): add Spanish coding exercises (Tier 1-3)

Browse files
languages/es/exercises/tier3/cribo.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Tier 3 - Ejercicio 4: El Cribo de Eratóstenes / Sieve of Eratosthenes
2
+ # Dificultad: ⭐⭐⭐ | Tiempo estimado: 40 min
3
+ # Ejecutar: legesher run languages/es/exercises/tier3/cribo.py --lang es
4
+
5
+ definir cribo_eratostenes(n):
6
+ """Implementa el Cribo de Eratóstenes para encontrar primos hasta n."""
7
+ es_primo = [verdadero] * (n + 1)
8
+ es_primo[0] = falso
9
+ es_primo[1] = falso
10
+ p = 2
11
+ mientras p * p <= n:
12
+ si es_primo[p]:
13
+ por multiplo en rango(p * p, n + 1, p):
14
+ es_primo[multiplo] = falso
15
+ p += 1
16
+ devolver [i por i en rango(2, n + 1) si es_primo[i]]
17
+
18
+ definir calcular_estadisticas(primos, n):
19
+ """Calcula estadísticas sobre los números primos encontrados."""
20
+ total = longitud(primos)
21
+ mas_pequeno = primos[0]
22
+ mas_grande = primos[-1]
23
+ suma = sumar(primos)
24
+ promedio = redondear(suma / total, 2)
25
+ porcentaje = redondear((total / n) * 100, 2)
26
+ mas_cercano = minimo(primos, key=funcion_anonima p: valorabsoluto(p - n // 2))
27
+ devolver {
28
+ "total": total,
29
+ "mas_pequeno": mas_pequeno,
30
+ "mas_grande": mas_grande,
31
+ "suma": suma,
32
+ "promedio": promedio,
33
+ "porcentaje": porcentaje,
34
+ "mas_cercano": mas_cercano,
35
+ }
36
+
37
+ definir mostrar_resultados(primos, estadisticas, n):
38
+ """Muestra los resultados en pantalla."""
39
+ imprimir("===== EL CRIBO DE ERATÓSTENES =====")
40
+ imprimir(f"Calculando números primos hasta {n}...\n")
41
+ imprimir("Primos encontrados:")
42
+ imprimir(" ".join(cadena(p) por p en primos))
43
+ imprimir("\n===== ESTADÍSTICAS =====")
44
+ imprimir(f"Total de primos encontrados: {estadisticas['total']}")
45
+ imprimir(f"Primo más pequeño: {estadisticas['mas_pequeno']}")
46
+ imprimir(f"Primo más grande: {estadisticas['mas_grande']}")
47
+ imprimir(f"Primo más cercano a n/2: {estadisticas['mas_cercano']}")
48
+ imprimir(f"Suma de todos los primos: {estadisticas['suma']}")
49
+ imprimir(f"Promedio de primos: {estadisticas['promedio']}")
50
+ imprimir(f"Porcentaje de primos en rango 1-{n}: {estadisticas['porcentaje']}%")
51
+
52
+ definir guardar_resultados(primos, estadisticas, n):
53
+ """Guarda los resultados en primos.txt."""
54
+ con abrir("primos.txt", "w", encoding="utf-8") como f:
55
+ f.write(f"===== EL CRIBO DE ERATÓSTENES =====\n")
56
+ f.write(f"Números primos hasta {n}:\n")
57
+ f.write(" ".join(cadena(p) por p en primos))
58
+ f.write("\n\n===== ESTADÍSTICAS =====\n")
59
+ f.write(f"Total: {estadisticas['total']}\n")
60
+ f.write(f"Primo más pequeño: {estadisticas['mas_pequeno']}\n")
61
+ f.write(f"Primo más grande: {estadisticas['mas_grande']}\n")
62
+ f.write(f"Primo más cercano a n/2: {estadisticas['mas_cercano']}\n")
63
+ f.write(f"Suma: {estadisticas['suma']}\n")
64
+ f.write(f"Promedio: {estadisticas['promedio']}\n")
65
+ f.write(f"Porcentaje: {estadisticas['porcentaje']}%\n")
66
+
67
+ definir principal():
68
+ """Función principal."""
69
+ probar:
70
+ n = entero(entrada("Ingresa el límite superior (n): "))
71
+ si n < 2:
72
+ imprimir("El límite debe ser mayor que 2")
73
+ devolver
74
+ excepto ValueError:
75
+ imprimir("Por favor ingresa un número válido")
76
+ devolver
77
+
78
+ primos = cribo_eratostenes(n)
79
+ estadisticas = calcular_estadisticas(primos, n)
80
+ mostrar_resultados(primos, estadisticas, n)
81
+ guardar_resultados(primos, estadisticas, n)
82
+ imprimir("\nResultados guardados en primos.txt")
83
+
84
+ si __name__ == "__main__":
85
+ principal()