fork download
  1. from datetime import datetime, timedelta
  2.  
  3. for i in range(int(input())):
  4. # ENTRADA DE DATOS
  5. datos = input().split(',')
  6.  
  7. # VARIABLES AUXILIARES
  8. nombre = datos[0]
  9. asesinatos = int(datos[1])
  10. f = [] # Fechas
  11. serialP = True
  12.  
  13. # PROCESAMIENTO DE DATOS
  14. for j in range(asesinatos):
  15. f.append(input().split('-'))
  16.  
  17. dia_1 = f[0][2] # Fecha de primer asesinato (día)
  18.  
  19. # Verificamos si siempre ataca en la misma fecha (día)
  20. contador = 0
  21. for fecha in f:
  22. if fecha[2] == dia_1:
  23. contador += 1
  24. if contador == asesinatos:
  25. serialP = False
  26.  
  27. # ¿Qué pasa si ataca los últimos días de febrero y hay un año bisiesto?
  28. # Verificamos si siempre ataca los últimos días de febrero
  29. contador = 0 # Reiniciamos el contador
  30. for fecha in f:
  31. if (fecha[1] == "02") and (fecha[2] == "28" or fecha[2] == "29"):
  32. contador += 1
  33. if contador == asesinatos:
  34. serialP = False
  35.  
  36. # Si no ataca en la misma fecha:
  37. frecuencia = (datetime(int(f[1][0]), int(f[1][1]), int(f[1][2])) - datetime(int(f[0][0]), int(f[0][1]), int(f[0][2]))).days
  38.  
  39. aux = len(fecha) - 1
  40. ultimo_asesinato = datetime(int(f[aux][0]), int(f[aux][1]), int(f[aux][2]))
  41.  
  42. proximo_asesinato = ultimo_asesinato + timedelta(days = frecuencia)
  43.  
  44. # SALIDA DE DATOS
  45. if serialP == False:
  46. print(nombre, "no es asesino(a) serial periodico")
  47. print()
  48. else:
  49. print(nombre, "ataca cada", frecuencia, "dias y volvera a hacerlo en", proximo_asesinato.date())
  50. print()
Success #stdin #stdout 0.03s 9728KB
stdin
5
el comediante, 3
2000-01-01
2000-01-15
2000-01-29
la amante de gatos, 4
1998-12-12
1999-12-12
2000-12-12
2001-12-12
el asesino de la calle 9, 5
2009-09-09
2012-06-04
2015-02-28
2017-11-23
2020-08-18
el estrangulador de la peluca de payazo, 4
2005-07-10
2005-08-10
2005-09-10
2005-10-10       
david, 4
2004-02-29
2004-03-29
2004-04-27
2004-05-26
stdout
el comediante ataca cada 14 dias y volvera a hacerlo en 2000-02-12

la amante de gatos no es asesino(a) serial periodico

el asesino de la calle 9 ataca cada 999 dias y volvera a hacerlo en 2017-11-23

el estrangulador de la peluca de payazo ataca cada 31 dias y volvera a hacerlo en 2005-10-11

david ataca cada 29 dias y volvera a hacerlo en 2004-05-26