66 lines
2.0 KiB
Julia
66 lines
2.0 KiB
Julia
#=
|
|
Created on 28 Jul 2021
|
|
|
|
@author: David Doblas Jiménez
|
|
@email: daviddoji@pm.me
|
|
|
|
Solution for Problem 17 of Project Euler
|
|
https://projecteuler.net/problem=17
|
|
=#
|
|
|
|
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(nums[num])
|
|
elseif num < 100
|
|
tens, units = divrem(num, 10)
|
|
return length(nums[tens * 10]) + num2letters(units)
|
|
elseif num < 1000
|
|
hundreds, rest = divrem(num, 100)
|
|
if rest != 0
|
|
return num2letters(hundreds) + length(nums[100]) + length("and") + num2letters(rest)
|
|
else
|
|
return num2letters(hundreds) + length(nums[100])
|
|
end
|
|
else
|
|
thousands, rest = divrem(num, 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,
|
|
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.
|
|
=#
|
|
n = 1000
|
|
letters = 0
|
|
for num in 1:n
|
|
letters += num2letters(num)
|
|
end
|
|
return letters
|
|
end
|
|
|
|
|
|
println("Time to evaluate Problem 17:")
|
|
@time Problem17()
|
|
println("")
|
|
println("Result for Problem 17: ", Problem17())
|