diff options
Diffstat (limited to 'challenge-058/paulo-custodio/python/ch-1.py')
| -rw-r--r-- | challenge-058/paulo-custodio/python/ch-1.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/challenge-058/paulo-custodio/python/ch-1.py b/challenge-058/paulo-custodio/python/ch-1.py new file mode 100644 index 0000000000..915851c677 --- /dev/null +++ b/challenge-058/paulo-custodio/python/ch-1.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 + +# Challenge 058 +# +# TASK #1 › Compare Version +# Reviewed by Ryan Thompson +# Compare two given version number strings v1 and v2 such that: +# +# If v1 > v2 return 1 +# If v1 < v2 return -1 +# Otherwise, return 0 +# The version numbers are non-empty strings containing only digits, and the dot +# (“.”) and underscore (“_”) characters. (“_” denotes an alpha/development +# version, and has a lower precedence than a dot, “.”). Here are some examples: +# +# v1 v2 Result +# ------ ------ ------ +# 0.1 < 1.1 -1 +# 2.0 > 1.2 1 +# 1.2 < 1.2_5 -1 +# 1.2.1 > 1.2_1 1 +# 1.2.1 = 1.2.1 0 +# Version numbers may also contain leading zeros. You may handle these how you +# wish, as long as it’s consistent. + +import re +import sys + +def split_version(v): + m = re.search(r'^\d+', v) + if not m: + return False + else: + v_1 = int(m.group(0)) + if len(m.group(0)) == len(v): + v_sep = '' + v_rest = '' + else: + v_sep = v[len(m.group(0))] + v_rest = v[len(m.group(0))+1:] + return True, v_1, v_sep, v_rest + +def compare_version(a, b): + if a == b: + return 0 + else: + a_ok, a_1, a_sep, a_rest = split_version(a) + b_ok, b_1, b_sep, b_rest = split_version(b) + if not a_ok or not b_ok: + return 0 + elif a_1 < b_1: + return -1 + elif a_1 > b_1: + return 1 + elif a_sep == b_sep: + return compare_version(a_rest, b_rest) + elif a_sep == '': + return -1 + elif b_sep == '': + return 1 + elif a_sep == '.': + return -1 + elif b_sep == '.': + return 1 + else: + return compare_version(a_rest, b_rest) + +a = sys.argv[1] +b = sys.argv[2] +print(compare_version(a,b)) |
