Fix error in calculation
This commit is contained in:
parent
90bfb60fff
commit
c99257d48f
@ -9,26 +9,37 @@ https://projecteuler.net/problem=17 =#
|
||||
|
||||
using BenchmarkTools
|
||||
|
||||
function num2letters(num, dic)
|
||||
function num2letters(num)
|
||||
nums = Dict(
|
||||
0 => "", 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"
|
||||
)
|
||||
|
||||
if num <= 20
|
||||
return length(dic[num])
|
||||
return length(nums[num])
|
||||
elseif num < 100
|
||||
tens, units = divrem(num, 10)
|
||||
return length(dic[tens * 10]) + num2letters(units, dic)
|
||||
return (length(nums[Int(tens) * 10]) + num2letters(units))
|
||||
elseif num < 1000
|
||||
hundreds, rest = divrem(num, 100)
|
||||
if rest != 0
|
||||
return num2letters(hundreds, dic) + length(dic[100])
|
||||
+ length("and") + num2letters(rest, dic)
|
||||
return (num2letters(hundreds) + length(nums[100])
|
||||
+ length("and") + num2letters(rest))
|
||||
else
|
||||
return num2letters(hundreds, dic) + length(dic[100])
|
||||
return (num2letters(hundreds) + length(nums[100]))
|
||||
end
|
||||
else
|
||||
thousands, rest = divrem(num, 1000)
|
||||
return num2letters(thousands, dic) + length(dic[1000])
|
||||
return (num2letters(thousands) + length(nums[1000]))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function Problem17()
|
||||
#=
|
||||
If the numbers 1 to 5 are written out in words: one, two, three, four,
|
||||
@ -41,20 +52,11 @@ function Problem17()
|
||||
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. =#
|
||||
nums = Dict(
|
||||
0 => "", 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"
|
||||
)
|
||||
|
||||
n = 1000
|
||||
letters = 0
|
||||
for num in 1:n
|
||||
letters += num2letters(num, nums)
|
||||
letters += num2letters(num)
|
||||
end
|
||||
return letters
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user