Advertisement
t_a_w

Untitled

Nov 30th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.17 KB | None | 0 0
  1. def is_leap_year(y):
  2.   if y % 4 == 0:
  3.     if y % 100 == 0:
  4.       if y % 400 == 0:
  5.         return True
  6.       return False
  7.     return True
  8.   return False
  9.  
  10. def days_in_month(y, m):
  11.   daysOfMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  12.   days = daysOfMonths[m-1]
  13.   if m == 2 and is_leap_year(y):
  14.     days += 1
  15.   return days
  16.  
  17. def next_date(y,m,d):
  18.   d += 1
  19.   max_d = days_in_month(y,m)
  20.   if d > max_d:
  21.     m += 1
  22.     d = 1
  23.   if m > 12:
  24.     m = 1
  25.     y += 1
  26.   return (y,m,d)
  27.  
  28. def days_between(y1,m1,d1,y2,m2,d2):
  29.   if (y1,m1,d1) > (y2,m2,d2):
  30.     return -days_between(y2,m2,d2,y1,m1,d1)
  31.   count = 0
  32.   while (y1,m1,d1) != (y2,m2,d2):
  33.     count += 1
  34.     (y1,m1,d1) = next_date(y1,m1,d1)
  35.   return count
  36.  
  37. def test():
  38.   test_cases = [
  39.      ((2012,1,1,2012,2,28), 58),
  40.      ((2012,1,1,2012,3,1), 60),
  41.      ((2011,6,30,2012,6,30), 366),
  42.      ((2011,1,1,2012,8,8), 585 ),
  43.      ((1900,1,1,1999,12,31), 36523)
  44.   ]
  45.   for ((y1,m1,d1,y2,m2,d2), expected) in test_cases:
  46.     actual = days_between(y1,m1,d1,y2,m2,d2)
  47.     if actual != expected:
  48.       print("FAILED FOR",y1,m1,d1,y2,m2,d2,actual,expected)
  49.     else:
  50.       print("SUCCESS!")
  51.  
  52.  
  53. test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement