Skip to content

Commit e8f8f7c

Browse files
authored
Merge pull request mouredev#7754 from davidrguez98/main
mouredev#39 - Python
2 parents 080530d + b27c179 commit e8f8f7c

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Cada año se celebra el Batman Day durante la tercera semana de septiembre...
4+
* ¡Y este año cumple 85 años! Te propongo un reto doble:
5+
*
6+
* RETO 1:
7+
* Crea un programa que calcule cuándo se va a celebrar el Batman Day hasta
8+
* su 100 aniversario.
9+
*
10+
* RETO 2:
11+
* Crea un programa que implemente el sistema de seguridad de la Batcueva.
12+
* Este sistema está diseñado para monitorear múltiples sensores distribuidos
13+
* por Gotham, detectar intrusos y activar respuestas automatizadas.
14+
* Cada sensor reporta su estado en tiempo real, y Batman necesita un programa
15+
* que procese estos datos para tomar decisiones estratégicas.
16+
* Requisitos:
17+
* - El mapa de Gotham y los sensores se representa con una cuadrícula 20x20.
18+
* - Cada sensor se identifica con una coordenada (x, y) y un nivel
19+
* de amenaza entre 0 a 10 (número entero).
20+
* - Batman debe concentrar recursos en el área más crítica de Gotham.
21+
* - El programa recibe un listado de tuplas representando coordenadas de los
22+
* sensores y su nivel de amenaza. El umbral de activación del protocolo de
23+
* seguridad es 20 (sumatorio de amenazas en una cuadrícula 3x3).
24+
* Acciones:
25+
* - Identifica el área con mayor concentración de amenazas
26+
* (sumatorio de amenazas en una cuadrícula 3x3).
27+
* - Si el sumatorio de amenazas es mayor al umbral, activa el
28+
* protocolo de seguridad.
29+
* - Calcula la distancia desde la Batcueva, situada en (0, 0). La distancia es
30+
* la suma absoluta de las coordenadas al centro de la cuadrícula amenazada.
31+
* - Muestra la coordenada al centro de la cuadrícula más amenazada, la suma de
32+
* sus amenazas, la distancia a la Batcueva y si se debe activar el
33+
* protocolo de seguridad.
34+
*/ """
35+
36+
#RETO 1
37+
38+
from datetime import datetime, timedelta
39+
40+
year_of_creation = 1939
41+
anniversary_year = year_of_creation + 85
42+
43+
batman_day_anniversary_dates = []
44+
45+
while anniversary_year <= year_of_creation + 100:
46+
47+
september = datetime(anniversary_year, 9, 1)
48+
49+
first_saturday = 5 - september.weekday() if september.weekday() <= 5 else 12 - september.weekday()
50+
51+
third_saturday = september + timedelta(days=first_saturday + 14)
52+
53+
batman_day_anniversary_dates.append((anniversary_year, anniversary_year - year_of_creation, third_saturday.strftime("%d-%m-%Y")))
54+
55+
anniversary_year += 1
56+
57+
for year, anniversary, batman_day in batman_day_anniversary_dates:
58+
print(f"Batman day {year} ({anniversary} aniversario): {batman_day}")
59+
60+
#RETO 2
61+
62+
def sum_subgrid_alerts(sensors, x, y) -> int:
63+
64+
total = 0
65+
66+
for x in range(x - 1, x + 2):
67+
for y in range(y - 1, y + 2):
68+
for sensor in sensors:
69+
if sensor[0] == x and sensor[1] == y:
70+
total += sensor[2]
71+
72+
return total
73+
74+
75+
def batcave_security_system(sensors):
76+
77+
max_alert_level = 0
78+
max_alert_coordinate = (0,0)
79+
80+
for x in range(1, 19):
81+
for y in range(1, 19):
82+
alert_level = sum_subgrid_alerts(sensors, x, y)
83+
if alert_level > max_alert_level:
84+
max_alert_level = alert_level
85+
max_alert_coordinate = (x, y)
86+
87+
distance = abs(max_alert_coordinate[0]) + abs(max_alert_coordinate[1])
88+
activate_protocol = max_alert_level > 20
89+
90+
91+
return max_alert_coordinate, max_alert_level, distance, activate_protocol
92+
93+
sensors = [
94+
(1, 5, 9),
95+
(3, 8, 2),
96+
(6, 1, 7),
97+
(9, 4, 5),
98+
(12, 7, 6),
99+
(14, 10, 3),
100+
(17, 13, 9),
101+
(16, 13, 9),
102+
(15, 13, 9),
103+
(19, 15, 4),
104+
(21, 18, 7),
105+
(25, 20, 6)
106+
]
107+
108+
result = batcave_security_system(sensors)
109+
print(f"Centro cuadrícula más amenazada: {result[0]}.")
110+
print(f"Máximo nivel de alerta: {result[1]}.")
111+
print(f"Distancia a la Batcueva: {result[2]}.")
112+
print(f"Activar protocolo de seguridad: {result[3]}.")

0 commit comments

Comments
 (0)