-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProblem17.py
More file actions
88 lines (73 loc) · 2.39 KB
/
Problem17.py
File metadata and controls
88 lines (73 loc) · 2.39 KB
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
"""
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.
If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.
"""
word_lookup = {
0 : 'zero',
1 : 'one',
2 : 'two',
3 : 'three',
4 : 'four',
5 : 'five',
6 : 'six',
7 : 'seven',
8 : 'eight',
9 : 'nine',
10 : 'ten',
11 : 'eleven',
12 : 'twelve',
13 : 'thirteen',
14 : 'fourteen',
15 : 'fifteen',
16 : 'sixteen',
17 : 'seventeen',
18 : 'eighteen',
19 : 'nineteen',
20 : 'twenty',
30 : 'thirty',
40 : 'forty',
50 : 'fifty',
60 : 'sixty',
70 : 'seventy',
80 : 'eighty',
90 : 'ninety',
100 : 'hundred',
1000: 'thousand'
}
def number_to_string(number):
original_number = number
# Check for thousands
quotient = number // 1000
name = ''
if quotient is not 0:
name += '%s %s ' % (word_lookup[quotient], word_lookup[1000])
number = number % 1000
# Check for hundreds
quotient = number // 100
if quotient is not 0:
name += '%s %s ' % (word_lookup[quotient], word_lookup[100])
number = number % 100
# Check for tens
if number is not 0:
quotient = number // 10
# If the original number was over 100 we add and per British usage
if original_number > 100:
name += 'and '
# Special case where 1-19
if 1 <= number <= 19:
name += '%s ' % word_lookup[number]
number = 0
else:
name += '%s ' % word_lookup[quotient*10]
number = number % 10
# Check for ones
if number is not 0:
name += '%s ' % word_lookup[number]
return name
if __name__ == "__main__":
# Construct array of strings representing numbers from [1,1000] with white space removed.
numbers = [number_to_string(i).replace(" ","") for i in xrange(1, 1001, 1)]
# Join array by empty string
number_str = ''.join(numbers)
print 'The string length is %d characters' % len(number_str)