Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/02/2014, 07:14
sukoy
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 8 meses
Puntos: 18
Respuesta: Desafió 2014 - Semana 2

Bueno, hecho de dos formas:

Código Python:
Ver original
  1. from datetime import date
  2.  
  3. def weekdays(from_date, to_date):
  4.     correccion = 0
  5.     diferencia = (to_date - from_date).days + 1
  6.     dia_inicio = date.weekday(from_date)
  7.     diferencia_corregida = diferencia + dia_inicio
  8.     if dia_inicio == 6 :
  9.         correccion += -1
  10.     if diferencia_corregida % 7 == 6:
  11.         correccion += 1
  12.  
  13.     return diferencia_corregida / 7 * 2 + correccion
  14.  
  15. if __name__ == '__main__':
  16.     from time import time
  17.     t1 = time()
  18.     assert weekdays(date(2013, 9, 18), date(2013, 9, 23)) == 2, "Error en test 1"
  19.     assert weekdays(date(2013, 1, 1), date(2013, 2, 1)) == 8, "Error en test 2"
  20.     assert weekdays(date(2013, 2, 2), date(2013, 2, 3)) == 2, "Error en test 3"
  21.     assert weekdays(date(1999, 1, 1), date(2000, 1, 1)) == 105, "Error en test 4"
  22.     assert weekdays(date(2004, 2, 1), date(2004, 2, 29)) == 9, "Error en test 5"
  23.     assert weekdays(date(1980, 8, 8), date(2012, 3, 3)) == 3295, "Error en test 6"
  24.     assert weekdays(date(2001, 2, 2), date(2007, 12, 31)) == 722, "Error en test 7"
  25.     assert weekdays(date(2002, 9, 9), date(2002, 9, 10)) == 0, "Error en test 8"
  26.     assert weekdays(date(2011, 1, 1), date(2012, 2, 1)) == 114, "Error en test 9"
  27.     assert weekdays(date(1995, 3, 2), date(1999, 2, 3)) == 410, "Error en test 10"
  28.     assert weekdays(date(1992, 2, 1), date(2000, 1, 1)) == 827, "Error en test 11"
  29.     assert weekdays(date(1998, 5, 1), date(2001, 2, 22)) == 294, "Error en test 12"
  30.     assert weekdays(date(2003, 8, 2), date(2005, 3, 3)) == 166, "Error en test 13"
  31.     assert weekdays(date(2010, 2, 5), date(2010, 12, 31)) == 94, "Error en test 14"
  32.     t2 = time()
  33.  
  34.     print("Tiempo de ejecucion %0.3fs" % (t2 - t1))
  35.     print("Todos los tests completados")

Y.

Código Python:
Ver original
  1. from datetime import date, timedelta
  2.  
  3. def weekdays(from_date, to_date):
  4.  
  5.     diferencia = (to_date - from_date).days +1
  6.     count = 0
  7.     for i in xrange(diferencia):
  8.         if date.weekday(from_date) > 4:
  9.             count +=  1
  10.         from_date += timedelta(days=1)
  11.     return count
  12.  
  13. if __name__ == '__main__':
  14.     from time import time
  15.     t1 = time()
  16.     assert weekdays(date(2013, 9, 18), date(2013, 9, 23)) == 2, "Error en test 1"
  17.     assert weekdays(date(2013, 1, 1), date(2013, 2, 1)) == 8, "Error en test 2"
  18.     assert weekdays(date(2013, 2, 2), date(2013, 2, 3)) == 2, "Error en test 3"
  19.     assert weekdays(date(1999, 1, 1), date(2000, 1, 1)) == 105, "Error en test 4"
  20.     assert weekdays(date(2004, 2, 1), date(2004, 2, 29)) == 9, "Error en test 5"
  21.     assert weekdays(date(1980, 8, 8), date(2012, 3, 3)) == 3295, "Error en test 6"
  22.     assert weekdays(date(2001, 2, 2), date(2007, 12, 31)) == 722, "Error en test 7"
  23.     assert weekdays(date(2002, 9, 9), date(2002, 9, 10)) == 0, "Error en test 8"
  24.     assert weekdays(date(2011, 1, 1), date(2012, 2, 1)) == 114, "Error en test 9"
  25.     assert weekdays(date(1995, 3, 2), date(1999, 2, 3)) == 410, "Error en test 10"
  26.     assert weekdays(date(1992, 2, 1), date(2000, 1, 1)) == 827, "Error en test 11"
  27.     assert weekdays(date(1998, 5, 1), date(2001, 2, 22)) == 294, "Error en test 12"
  28.     assert weekdays(date(2003, 8, 2), date(2005, 3, 3)) == 166, "Error en test 13"
  29.     assert weekdays(date(2010, 2, 5), date(2010, 12, 31)) == 94, "Error en test 14"
  30.     t2 = time()
  31.  
  32.     print("Tiempo de ejecucion %0.3fs" % (t2 - t1))
  33.     print("Todos los tests completados")

La primera es más rápida, la segunda la encuentro mas lógica.

Saludos.