Skip to content

Commit 09cd9ad

Browse files
author
Juan Pablo Patino Lopez
committed
Juanppdev - Reto mouredev#39 - Python
1 parent 148abd8 commit 09cd9ad

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
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+
from datetime import datetime, timedelta
38+
39+
def calcular_batman_day(anio_inicio, anios):
40+
batman_days = []
41+
for i in range(anios):
42+
anio = anio_inicio + i
43+
# Encuentra el primer día de la tercera semana de septiembre
44+
primer_dia_septiembre = datetime(anio, 9, 1)
45+
tercer_lunes = primer_dia_septiembre + timedelta(days=(14 - primer_dia_septiembre.weekday() + 7) % 7)
46+
batman_days.append(tercer_lunes)
47+
return batman_days
48+
49+
# Ejemplo de uso
50+
anio_inicio = 2024
51+
anios = 100 - 85 # Hasta el 100 aniversario
52+
batman_days = calcular_batman_day(anio_inicio, anios)
53+
for dia in batman_days:
54+
print(dia.strftime("%Y-%m-%d"))
55+
56+
57+
# Reto 2
58+
def calcular_amenaza(sensor_data):
59+
max_amenaza = 0
60+
coordenada_max = (0, 0)
61+
activar_protocolo = False
62+
63+
for i in range(18): # 20x20 grid, 3x3 subgrid
64+
for j in range(18):
65+
suma_amenaza = sum(sensor_data[x][y] for x in range(i, i+3) for y in range(j, j+3))
66+
if suma_amenaza > max_amenaza:
67+
max_amenaza = suma_amenaza
68+
coordenada_max = (i+1, j+1)
69+
activar_protocolo = suma_amenaza > 20
70+
71+
distancia_batcueva = abs(coordenada_max[0] - 1) + abs(coordenada_max[1] - 1)
72+
return coordenada_max, max_amenaza, distancia_batcueva, activar_protocolo
73+
74+
# Ejemplo de uso
75+
sensor_data = [[0]*20 for _ in range(20)]
76+
# Añadir datos de sensores (coordenada x, y, nivel de amenaza)
77+
sensores = [(5, 5, 8), (6, 6, 7), (7, 7, 6), (8, 8, 9), (9, 9, 10)]
78+
for x, y, amenaza in sensores:
79+
sensor_data[x][y] = amenaza
80+
81+
coordenada_max, max_amenaza, distancia_batcueva, activar_protocolo = calcular_amenaza(sensor_data)
82+
print(f"Coordenada más amenazada: {coordenada_max}")
83+
print(f"Suma de amenazas: {max_amenaza}")
84+
print(f"Distancia a la Batcueva: {distancia_batcueva}")
85+
print(f"Activar protocolo de seguridad: {'Sí' if activar_protocolo else 'No'}")

0 commit comments

Comments
 (0)