From 22589584c7fd058c50ea227660debf55dba48592 Mon Sep 17 00:00:00 2001 From: daviddoji Date: Wed, 28 Jul 2021 20:38:21 +0200 Subject: [PATCH] Solution to problem 17 in Julia --- src/Julia/Problem017.jl | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/Julia/Problem017.jl diff --git a/src/Julia/Problem017.jl b/src/Julia/Problem017.jl new file mode 100644 index 0000000..6a92b0f --- /dev/null +++ b/src/Julia/Problem017.jl @@ -0,0 +1,65 @@ +#= +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())