diff --git a/src/Julia/Problem017.jl b/src/Julia/Problem017.jl index 6a92b0f..c07a708 100644 --- a/src/Julia/Problem017.jl +++ b/src/Julia/Problem017.jl @@ -8,32 +8,23 @@ 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" -) - +function num2letters(num, dic) if num <= 20 - return length(nums[num]) + return length(dic[num]) elseif num < 100 tens, units = divrem(num, 10) - return length(nums[tens * 10]) + num2letters(units) + return length(dic[tens * 10]) + num2letters(units, dic) elseif num < 1000 hundreds, rest = divrem(num, 100) if rest != 0 - return num2letters(hundreds) + length(nums[100]) + length("and") + num2letters(rest) + return num2letters(hundreds, dic) + length(dic[100]) + + length("and") + num2letters(rest, dic) else - return num2letters(hundreds) + length(nums[100]) + return num2letters(hundreds, dic) + length(dic[100]) end else thousands, rest = divrem(num, 1000) - return num2letters(thousands) + length(nums[1000]) + return num2letters(thousands, dic) + length(dic[1000]) end end @@ -50,10 +41,20 @@ function Problem17() 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) + letters += num2letters(num, nums) end return letters end