blob: f8d36be877fbbc30ece25d17d7f04683d1d95894 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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
|