diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:21:45 +0200 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2014-08-31 20:35:09 +0200 |
| commit | 95341b61b030c9e1290f3b326cb7ec584f543aea (patch) | |
| tree | 852386fa04d32eb859bca11c0eff7b5ef9e50f00 /089.py | |
| parent | 571164d977f91925c4c76a292f74f5f93d09ae23 (diff) | |
Diffstat (limited to '089.py')
| -rw-r--r-- | 089.py | 97 |
1 files changed, 97 insertions, 0 deletions
@@ -0,0 +1,97 @@ + +def value(x): + if x == 'I': + return 1 + elif x == 'V': + return 5 + elif x == 'X': + return 10 + elif x == 'L': + return 50 + elif x == 'C': + return 100 + elif x == 'D': + return 500 + elif x == 'M': + return 1000 + else: + print "Decoding error: " + x + return None + + +def decode_roman(n): + result = 0 + for i in xrange(len(n)-1): # search for subtractive pairs + cur = value(n[i]) + nxt = value(n[i+1]) + if cur < nxt: + result -= cur + else: + result += cur + + result += value(n[-1]) + return result + + +def minimal_roman(n): + result = "" + while n > 0: + if n - 1000 >= 0: + n -= 1000 + result += "M" + elif n - 900 >= 0: + n -= 900 + result += "CM" + elif n - 500 >= 0: + n -= 500 + result += "D" + elif n - 400 >= 0: + n -= 400 + result += "CD" + elif n - 100 >= 0: + n -= 100 + result += "C" + elif n - 90 >= 0: + n -= 90 + result += "XC" + elif n - 50 >= 0: + n -= 50 + result += "L" + elif n - 40 >= 0: + n -= 40 + result += "XL" + elif n - 10 >= 0: + n -= 10 + result += "X" + elif n - 9 >= 0: + n -= 9 + result += "IX" + elif n - 5 >= 0: + n -= 5 + result += "V" + elif n - 4 >= 0: + n -= 4 + result += "IV" + elif n - 1 >= 0: + n -= 1 + result += "I" + return result + + +numbers = [] + +f = open('089.txt', 'r') +for line in f: + line = line.rstrip('\r\n') + numbers.append(line) +f.close() + +saved = 0 + +for number in numbers: + n = decode_roman(number) + m = minimal_roman(n) + saved += len(number) - len(m) + +print saved + |
