-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem17.rb
More file actions
69 lines (66 loc) · 1.62 KB
/
problem17.rb
File metadata and controls
69 lines (66 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
require("./utils")
class Problem17
$number_lookup = {
"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"
}
def Problem17.run
sum = 0
(1..1000).each{|n| sum += get_text(n, "", false).length}
puts sum
end
def Problem17.get_text n, text, add_and
if n >= 1000 && n < 10000
text += $number_lookup["#{n.to_s[0]}"] + "thousand"
if (n % 1000 != 0)
get_text(Integer(Utils.strip_leading_zero(n.to_s[1..3])), text, true)
else
return text
end
elsif n >= 100
text += $number_lookup["#{n.to_s[0]}"] + "hundred"
if (n % 100 != 0)
get_text(Integer(Utils.strip_leading_zero(n.to_s[1..2])), text, true)
else
return text
end
elsif n > 20
text += (add_and ? "and" : "") + $number_lookup["#{n.to_s[0]}0"]
if n % 10 != 0
get_text(Integer(Utils.strip_leading_zero(n.to_s[1])), text, false)
else
return text
end
else
text += (add_and ? "and" : "") + $number_lookup[n.to_s]
return text
end
end
end