Unicode arrows and sensible defaults v1.0.0
authorAlexander Vasarab <alexander@wylark.com>
Mon, 24 Feb 2020 06:17:58 +0000 (22:17 -0800)
committerAlexander Vasarab <alexander@wylark.com>
Sat, 6 Jun 2020 20:30:48 +0000 (13:30 -0700)
munter.py

index b7a7f725b44882531f1245df49ca00304a071dfe..47fbd6b8bcf9410a5d66fea7129f1ce6f6d6f6b3 100755 (executable)
--- a/munter.py
+++ b/munter.py
@@ -1,4 +1,6 @@
 #! /usr/bin/env python
 #! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
 
 # Munter Time Calculation
 #
 
 # Munter Time Calculation
 #
@@ -11,42 +13,59 @@ class InvalidUnitsException(Exception):
     pass
 
 rates = {
     pass
 
 rates = {
-    'uphill': 4,
-    'flat': 6, # or downhill on foot
-    'downhill': 10,
-    'bushwhacking': 2
+    'uphill': { 'rate': 4, 'direction': '↑' },
+    'flat': { 'rate': 6, 'direction': '→' }, # or downhill on foot
+    'downhill': { 'rate': 10, 'direction': '↓' },
+    'bushwhacking': { 'rate': 2, 'direction': '↹' },
 }
 
 unit_choices = ['metric', 'imperial']
 travel_mode_choices = rates.keys()
 
 }
 
 unit_choices = ['metric', 'imperial']
 travel_mode_choices = rates.keys()
 
-def munter(distance, elevation, rate='flat', units='metric'):
+def munter(distance, elevation, rate, units):
+    retval = {}
+
     if units not in unit_choices:
         raise InvalidUnitsException
 
     if units not in unit_choices:
         raise InvalidUnitsException
 
+    unit_count = 0
+
     if 'imperial' == units:
         # convert to metric
         distance = (distance * 1.609) # mi to km
         elevation = (elevation * .305) # ft to m
 
     if 'imperial' == units:
         # convert to metric
         distance = (distance * 1.609) # mi to km
         elevation = (elevation * .305) # ft to m
 
-    time = (distance + (elevation / 100.0)) / rates[rate]
+    unit_count = distance + (elevation / 100.0)
 
 
-    return time
+    retval['time'] = (distance + (elevation / 100.0)) / rates[rate]['rate']
+    retval['unit_count'] = unit_count
+    retval['direction'] = rates[rate]['direction']
+    retval['pace'] = rates[rate]['rate']
+
+    return retval
 
 def main():
     parser = argparse.ArgumentParser(description='Munter Time Calculation')
 
 
 def main():
     parser = argparse.ArgumentParser(description='Munter Time Calculation')
 
-    parser.add_argument('--distance', '-d', type=float, required=True,
+    parser.add_argument('--distance', '-d', type=float,
+        required=True,
         help='Distance (in km, by default)')
         help='Distance (in km, by default)')
-    parser.add_argument('--elevation', '-e', type=float, required=True,
+
+    parser.add_argument('--elevation', '-e', type=float,
+        required=True,
         help='Elevation change (in m, by default)')
         help='Elevation change (in m, by default)')
+
     parser.add_argument('--travel-mode', '-t', type=str,
     parser.add_argument('--travel-mode', '-t', type=str,
-        default='uphill', choices=travel_mode_choices, required=False,
+        default='uphill',
+        choices=travel_mode_choices, required=False,
         help='Travel mode (flat, by default)')
         help='Travel mode (flat, by default)')
-    parser.add_argument('--units', '-u', type=str, default='metric',
+
+    parser.add_argument('--units', '-u', type=str,
+        default='imperial',
         required=False,
         choices=unit_choices,
         help='Units of input values')
         required=False,
         choices=unit_choices,
         help='Units of input values')
+
     opts = parser.parse_args()
 
     distance = opts.distance
     opts = parser.parse_args()
 
     distance = opts.distance
@@ -54,8 +73,27 @@ def main():
     units = opts.units
     travel_mode = opts.travel_mode
 
     units = opts.units
     travel_mode = opts.travel_mode
 
-    print("Estimated Time (in hours) = %8.2f"
-        % munter(distance, elevation, travel_mode, units=units))
+    time_calc = munter(distance, elevation, travel_mode, units=units)
+
+    hours = int(time_calc['time'])
+    minutes = int((time_calc['time'] - hours) * 60)
+
+    print "\n\t╒═══════════════════════════════╕"
+    print "\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎╮"
+    print "\t╎▒{:^29}▒╎│".format('')
+    print "\t╎▒{pace_readable:^31}▒╎│".format(
+            pace_readable="{units} {direction} @ {pace}".format(
+                units=round(time_calc['unit_count']),
+                direction=time_calc['direction'],
+                pace=time_calc['pace']))
+    print "\t╎▒{human_time:^29}▒╎│".format(
+            human_time="{hours} hours {minutes} minutes".format(
+                hours=hours,
+                minutes=minutes))
+    print "\t╎▒{:^29}▒╎│".format('')
+    print "\t╎▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╎│"
+    print "\t╘═══════════════════════════════╛│"
+    print "\t └───────────────────────────────┘\n"
 
 if __name__ == "__main__":
     main()
 
 if __name__ == "__main__":
     main()