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 = int(f[0][2]) # Fecha de primer asesinato (día)
  18. # Verificamos si siempre ataca en la misma fecha (día)
  19. contador = 0
  20. for fecha in f:
  21. if int(fecha[2]) == dia_1:
  22. contador += 1
  23. if contador == asesinatos:
  24. serialP = False
  25.  
  26. # ¿Qué pasa si ataca los últimos días de febrero y hay un año bisiesto?
  27. # Verificamos si siempre ataca los últimos días de febrero
  28. contador = 0 # Reiniciamos el contador
  29. for fecha in f:
  30. if (fecha[1] == "02") and (fecha[2] == "28" or fecha[2] == "29"):
  31. contador += 1
  32. if contador == asesinatos:
  33. serialP = False
  34.  
  35. # Si no ataca en la misma fecha:
  36. 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
  37.  
  38. aux = len(f) - 1
  39. ultimo_asesinato = datetime(int(f[aux][0]), int(f[aux][1]), int(f[aux][2]))
  40.  
  41. proximo_asesinato = ultimo_asesinato + timedelta(days = frecuencia)
  42.  
  43. if serialP == False:
  44. print(nombre, "no es asesino(a) serial periodico")
  45. print()
  46. else:
  47. print(nombre, "ataca cada", frecuencia, "dias y volvera a hacerlo en", proximo_asesinato.date())
  48. print()
Success #stdin #stdout 0.02s 9572KB
stdin
1
andres, 4
2004-02-29
2005-03-31
2006-04-30
2007-05-31
stdout
andres ataca cada 396 dias y volvera a hacerlo en 2008-06-30