project-euler/0017.py
2018-03-29 10:31:31 +02:00

98 lines
1.4 KiB
Python

from functools import reduce
target = 21124
# 1 = 'one'
# 2 = 'two'
# 3 = 'three'
# 4 = 'four'
# 5 = 'five'
# 6 = 'sixe'
# 7 = 'seven'
# 8 = 'eight'
# 9 = 'nine'
# 10 = 'ten'
nbrs = [
'',
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
'eleven',
'twelve',
'thirteen',
'fourteen',
'fifteen',
'sixteen',
'seventeen',
'eighteen',
'nineteen',
]
decades = [
None,
None,
'twenty',
'thirty',
'forty',
'fifty',
'sixty',
'seventy',
'eighty',
'ninety',
]
loads = [
'hundred',
'thousand',
]
def number_to_string(nbr):
thousand = nbr // 1000
hundred = (nbr % 1000) // 100
under_hundred = nbr % 100
string = ''
if (thousand > 0):
string += nbrs[thousand] + 'thousand'
if (hundred > 0):
string += nbrs[hundred] + 'hundred'
end_string = ''
if (under_hundred < 20):
end_string += nbrs[under_hundred]
else:
decade = under_hundred // 10
single = nbr % 10
end_string += decades[decade] + nbrs[single]
if (end_string):
if (string):
string += 'and'
string += end_string
return string
def count_len(result, nbr):
string = number_to_string(nbr)
return result + len(string)
result = reduce(count_len, list(range(1, 1001)), 0)
print(result)
print(result == target)