Initial import
authorAntonio Ospite <ao2@ao2.it>
Fri, 23 Jan 2015 11:24:43 +0000 (12:24 +0100)
committerAntonio Ospite <ao2@ao2.it>
Fri, 23 Jan 2015 11:24:43 +0000 (12:24 +0100)
season_math_test.py [new file with mode: 0755]

diff --git a/season_math_test.py b/season_math_test.py
new file mode 100755 (executable)
index 0000000..e015ae7
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# season_math_test.py - convert from month to season and vice versa
+#
+# Copyright (C) 2015  Antonio Ospite <ao2@ao2.it>
+#
+# This program is free software. It comes without any warranty, to
+# the extent permitted by applicable law. You can redistribute it
+# and/or modify it under the terms of the Do What The Fuck You Want
+# To Public License, Version 2, as published by Sam Hocevar. See
+# http://sam.zoy.org/wtfpl/COPYING for more details.
+
+# The code assumes meteorological seasons.
+# See http://en.wikipedia.org/wiki/Season
+#
+# Default seasons order is the one for the Northern hemisphere.
+
+seasons_norhtern = ["Winter", "Spring", "Summer", "Fall"]
+seasons_southern = ["Summer", "Fall", "Winter", "Spring"]
+
+seasons = seasons_norhtern
+
+months = ["January", "February", "March", "April", "May", "June", "July",
+          "August", "September", "October", "November", "December"]
+
+
+def season(month):
+    if month < 0 or month > 11:
+        raise ValueError("Invalid month %d" % month)
+
+    # Rotate forward by one month because Winter starts in December,
+    # and group by three months because each season is three months long.
+    return ((month + 1) % 12) // 3
+
+
+def first_month_of_season(season):
+    if season < 0 or season > 3:
+        raise ValueError("Invalid season %d" % season)
+
+    # Expand by three because a new season starts every 3 months,
+    # and rotate back by one month because December is the first
+    # month of Winter
+    return (season * 3 - 1) % 12
+
+
+def test(function):
+    try:
+        eval(function)
+    except Exception as e:
+        print e.message
+
+
+if __name__ == "__main__":
+    test("season(-1)")
+    test("season(12)")
+    test("first_month_of_season(-1)")
+    test("first_month_of_season(4)")
+
+    print
+
+    for i, m in enumerate(months):
+        j = season(i)
+        print "Month: %s. (%d) \tSeason: %s (%d)" % (m[0:3], i, seasons[j], j)
+
+    print
+
+    for i, s in enumerate(seasons):
+        j = first_month_of_season(i)
+        print "Season: %s (%d)\tFirst month: %s (%d)" % (s, i, months[j], j)