integer_expansion 1.0.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/integer_expansion.rb +0 -1
- data/lib/methods/english_number.rb +46 -67
- data/lib/methods/new_roman.rb +20 -21
- data/lib/methods/old_roman.rb +13 -9
- metadata +2 -2
data/lib/integer_expansion.rb
CHANGED
@@ -2,7 +2,6 @@ require File.dirname(__FILE__) + '/methods/new_roman'
|
|
2
2
|
require File.dirname(__FILE__) + '/methods/old_roman'
|
3
3
|
require File.dirname(__FILE__) + '/methods/factorial'
|
4
4
|
require File.dirname(__FILE__) + '/methods/english_number'
|
5
|
-
require File.dirname(__FILE__) + '/methods/commas'
|
6
5
|
|
7
6
|
class Integer
|
8
7
|
def to_roman
|
@@ -1,70 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
1
|
+
NUM_WORD_PAIRS = [[10 ** 12, 'trillion'],
|
2
|
+
[10 ** 9, 'billion'],
|
3
|
+
[10 ** 6, 'million'],
|
4
|
+
[10 ** 3, 'thousand'],
|
5
|
+
[10 ** 2, 'hundred'],
|
6
|
+
[90, 'ninety'],
|
7
|
+
[80, 'eighty'],
|
8
|
+
[70, 'seventy'],
|
9
|
+
[60, 'sixty'],
|
10
|
+
[50, 'fifty'],
|
11
|
+
[40, 'fourty'],
|
12
|
+
[30, 'thirty'],
|
13
|
+
[20, 'twenty'],
|
14
|
+
[19, 'nineteen'],
|
15
|
+
[18, 'eighteen'],
|
16
|
+
[17, 'seventeen'],
|
17
|
+
[16, 'sixteen'],
|
18
|
+
[15, 'fifteen'],
|
19
|
+
[14, 'fouteen'],
|
20
|
+
[13, 'thirteen'],
|
21
|
+
[12, 'twelve'],
|
22
|
+
[11, 'eleven'],
|
23
|
+
[10, 'ten'],
|
24
|
+
[ 9, 'nine'],
|
25
|
+
[ 8, 'eight'],
|
26
|
+
[ 7, 'seven'],
|
27
|
+
[ 6, 'six'],
|
28
|
+
[ 5, 'five'],
|
29
|
+
[ 4, 'four'],
|
30
|
+
[ 3, 'three'],
|
31
|
+
[ 2, 'two'],
|
32
|
+
[ 1, 'one']]
|
33
|
+
|
34
|
+
def english_number(num)
|
35
|
+
raise ArgumentError.new("Input be greater than or equal to 0.") if num < 0
|
36
|
+
return 'one' if num == 1
|
37
|
+
to_words_array = []
|
38
|
+
|
39
|
+
NUM_WORD_PAIRS.each do |pair|
|
40
|
+
if num > 99
|
41
|
+
lead_digits = (num % (pair[0] * 1000)) / pair[0]
|
42
|
+
to_words_array << english_number(lead_digits) if lead_digits > 0
|
16
43
|
end
|
17
|
-
|
18
|
-
|
19
|
-
string += parser(number % 1000) # last three digits
|
20
|
-
string.chop! if number % 1000 == 0 # remove extra space if no ones or tens
|
21
|
-
else
|
22
|
-
string += small_number(number)
|
44
|
+
to_words_array << pair[1] if (num / pair[0]) > 0
|
45
|
+
num %= pair[0]
|
23
46
|
end
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
def small_number(number) # numbers under 99
|
30
|
-
string = ''
|
31
|
-
small_hash = { 1 => 'one', 2 => 'two', 3 => 'three',
|
32
|
-
4 => 'four', 5 => 'five', 6 => 'six',
|
33
|
-
7 => 'seven', 8 => 'eight', 9 => 'nine',
|
34
|
-
11 => 'eleven', 12 => 'twelve', 13 => 'thirteen',
|
35
|
-
14 => 'fourteen', 15 => 'fifteen', 16 => 'sixteen',
|
36
|
-
17 => 'seventeen', 18 => 'eighteen', 19 => 'nineteen',
|
37
|
-
10 => 'ten', 20 => 'twenty', 30 => 'thirty',
|
38
|
-
40 => 'fourty', 50 => 'fifty', 60 => 'sixty',
|
39
|
-
70 => 'seventy', 80 => 'eighty', 90 => 'ninety'}
|
40
|
-
|
41
|
-
if number < 20
|
42
|
-
return small_hash[number]
|
43
|
-
else
|
44
|
-
extra = number % 10
|
45
|
-
string += small_hash[number - extra]
|
46
|
-
string += ' ' + small_hash[extra] if extra != 0
|
47
|
-
end
|
48
|
-
string
|
49
|
-
end
|
50
|
-
|
51
|
-
def parser(number) # decides is lead_digits needs to be processed as hundreds, or a small number
|
52
|
-
string = ''
|
53
|
-
string += hundreds(number) if number >= 100
|
54
|
-
string += small_number(number) if number < 100 && number != 0
|
55
|
-
string
|
56
|
-
end
|
57
|
-
|
58
|
-
def hundreds(number)
|
59
|
-
string = ''
|
60
|
-
string += small_number(number / 100 )
|
61
|
-
string += ' ' + factors(2)
|
62
|
-
string += ' and ' + small_number(number % 100) if number % 100 != 0
|
63
|
-
string
|
64
|
-
end
|
65
|
-
|
66
|
-
def factors(number) # 10 ** factor
|
67
|
-
hundred_hash = { 2 => 'hundred', 3 => 'thousand', 6 => 'million',
|
68
|
-
9 => 'billion', 12 => 'trillion'}
|
69
|
-
hundred_hash[number]
|
47
|
+
|
48
|
+
to_words_array.join(' ')
|
70
49
|
end
|
data/lib/methods/new_roman.rb
CHANGED
@@ -1,23 +1,22 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
NEW_ROMAN_ARRAY = [[1000, 'M'],
|
2
|
+
[ 900, 'CM'],
|
3
|
+
[ 500, 'D'],
|
4
|
+
[ 400, 'CD'],
|
5
|
+
[ 100, 'C'],
|
6
|
+
[ 90, 'XC'],
|
7
|
+
[ 50, 'L'],
|
8
|
+
[ 40, 'XL'],
|
9
|
+
[ 10, 'X'],
|
10
|
+
[ 9, 'IX'],
|
11
|
+
[ 5, 'V'],
|
12
|
+
[ 4, 'IV'],
|
13
|
+
[ 1, 'I']]
|
3
14
|
|
4
|
-
def new_roman(
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
['XC','XL'], # tens
|
10
|
-
['CM','CD']] # hundreds
|
11
|
-
|
12
|
-
digits.each_with_index do |x,i|
|
13
|
-
if x == "9"
|
14
|
-
new_roman << nines_fours[i][0]
|
15
|
-
elsif x == "4"
|
16
|
-
new_roman << nines_fours[i][1]
|
17
|
-
else
|
18
|
-
new_roman << old_roman(x.to_i * (10 ** i))
|
19
|
-
end
|
15
|
+
def new_roman(number)
|
16
|
+
string = ''
|
17
|
+
NEW_ROMAN_ARRAY.each do |pair|
|
18
|
+
string += pair[1] * (number / pair[0])
|
19
|
+
number %= pair[0]
|
20
20
|
end
|
21
|
-
|
22
|
-
|
23
|
-
end
|
21
|
+
string
|
22
|
+
end
|
data/lib/methods/old_roman.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
OLD_ROMAN_ARRAY = [[1000, 'M'],
|
2
|
+
[ 500, 'D'],
|
3
|
+
[ 100, 'C'],
|
4
|
+
[ 50, 'L'],
|
5
|
+
[ 10, 'X'],
|
6
|
+
[ 5, 'V'],
|
7
|
+
[ 1, 'I']]
|
8
|
+
|
9
|
+
def old_roman(number)
|
3
10
|
string = ''
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
string += 'X' * (year % 50 / 10)
|
9
|
-
string += 'V' * (year % 10 / 5)
|
10
|
-
string += 'I' * (year % 5 / 1)
|
11
|
+
OLD_ROMAN_ARRAY.each do |pair|
|
12
|
+
string += pair[1] * (number / pair[0])
|
13
|
+
number %= pair[0]
|
14
|
+
end
|
11
15
|
string
|
12
16
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: integer_expansion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: 1999#to_roman, 1999#to_old_roman, 4#fact, 1999#to_english, 1999#add_commas
|
15
15
|
email: tydotg@gmail.com
|