nr2w 0.0.1
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.
- checksums.yaml +7 -0
- data/lib/nr2w.rb +73 -0
- data/lib/utils.rb +42 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fefefabd28e8d9b47af3e6d5e5da7c338020a1e028c22e2bbfee826f78cc1bf3
|
4
|
+
data.tar.gz: cea9f42270d77d8040b6e5bc2fb1636c8e18a5844105612168ef9eeb100e1b42
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a56bb118fdb56060924a5970caf66851788b5d822b98448e4be4a26d4d75684302c21462443c0651ec4c28f08458b665612ad8958214e440d413c20d1b20546
|
7
|
+
data.tar.gz: 84371880f2138cee37b6120517b3e6b9b4f363aa3dc707ea5dce78a55a0f745994c758c393b39421fd8b12bec6c16ef5729c29dd6781aedd841cd7a6b305613e
|
data/lib/nr2w.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative './utils'
|
2
|
+
include Utils
|
3
|
+
|
4
|
+
module Nr2w
|
5
|
+
@str = ''
|
6
|
+
|
7
|
+
class << self
|
8
|
+
# Units and dozens
|
9
|
+
def unit_dozen_hundred(hundreds_digits)
|
10
|
+
dozens = hundreds_digits.slice(0, 2).reverse.join.to_i
|
11
|
+
@str.prepend dozens_str(dozens)
|
12
|
+
return unless hundreds_digits.length > 2 && hundreds_digits[2]&.positive?
|
13
|
+
|
14
|
+
@str.prepend hundreds_str(hundreds_digits[2], dozens.positive?)
|
15
|
+
end
|
16
|
+
|
17
|
+
def convert(value)
|
18
|
+
deal_with_errors(value)
|
19
|
+
|
20
|
+
# Transform into positive and set negative as true
|
21
|
+
@negative =
|
22
|
+
if value.negative?
|
23
|
+
value = value.abs
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
(0...value.digits.count).step(3) do |idx|
|
28
|
+
hundreds_digits = value.digits.slice(idx, 3)
|
29
|
+
number_notation(idx) if hundreds_digits.reverse.join.to_i.positive?
|
30
|
+
unit_dozen_hundred(hundreds_digits)
|
31
|
+
end
|
32
|
+
|
33
|
+
@str.prepend('minus ') if @negative
|
34
|
+
@str = 'zero' if value.zero?
|
35
|
+
|
36
|
+
puts assemble_str(@str)
|
37
|
+
end
|
38
|
+
|
39
|
+
def deal_with_errors(value)
|
40
|
+
raise 'Not an integer' unless value.is_a? Integer
|
41
|
+
raise 'Overflow' unless value.abs < 2**100
|
42
|
+
end
|
43
|
+
|
44
|
+
def number_notation(index)
|
45
|
+
name =
|
46
|
+
case index
|
47
|
+
when 3
|
48
|
+
' thousand '
|
49
|
+
when 6
|
50
|
+
' million '
|
51
|
+
when 9
|
52
|
+
' billion '
|
53
|
+
when 12
|
54
|
+
' trillion '
|
55
|
+
when 15
|
56
|
+
' quadrillion '
|
57
|
+
when 18
|
58
|
+
' quintillion '
|
59
|
+
when 21
|
60
|
+
' sextillion '
|
61
|
+
when 24
|
62
|
+
' septillion '
|
63
|
+
when 27
|
64
|
+
' octillion '
|
65
|
+
when 30
|
66
|
+
' nonillion '
|
67
|
+
else
|
68
|
+
''
|
69
|
+
end
|
70
|
+
@str.prepend name
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/utils.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Utils
|
2
|
+
def unit_digit(value)
|
3
|
+
array = ['', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
|
4
|
+
'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen',
|
5
|
+
'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen']
|
6
|
+
array[value]
|
7
|
+
end
|
8
|
+
|
9
|
+
def dozen_digit(value)
|
10
|
+
array = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy',
|
11
|
+
'eigthy', 'ninety']
|
12
|
+
array[value]
|
13
|
+
end
|
14
|
+
|
15
|
+
def dozens_str(value)
|
16
|
+
# This validation is necessary because of the special name cases between 11 and 19, or else it would be value < 10
|
17
|
+
if value < 20 # EX: onze, doze, treze etc
|
18
|
+
unit_digit(value)
|
19
|
+
else
|
20
|
+
digits = value.digits.reverse
|
21
|
+
append = " #{unit_digit(digits[1])}" if unit_digit(digits[1]) != '' # EX: vinte OU vinte um
|
22
|
+
"#{dozen_digit(digits[0])}#{append}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def hundreds_str(value, surplus = false)
|
27
|
+
append = surplus == false ? ' hundred' : ' hundred and '
|
28
|
+
unit_digit(value) + append
|
29
|
+
end
|
30
|
+
|
31
|
+
def assemble_str(str)
|
32
|
+
array = str.split(' ')
|
33
|
+
final_arr = []
|
34
|
+
array.each_with_index do |item, index|
|
35
|
+
final_arr << " #{item}"
|
36
|
+
if %w[nonillion octillion septill ion sextillion quintillion quadrillion trillion billion million thousand].include?(item) && index != array.size - 1
|
37
|
+
final_arr << ','
|
38
|
+
end
|
39
|
+
end
|
40
|
+
final_arr.reject(&:empty?).join('').strip
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nr2w
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- arbexmb
|
8
|
+
- callmarx
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2021-01-31 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: nr2w lets you convert number into words
|
15
|
+
email: lucasarbexmb@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/nr2w.rb
|
21
|
+
- lib/utils.rb
|
22
|
+
homepage: https://rubygems.org/gems/nr2w
|
23
|
+
licenses:
|
24
|
+
- MIT
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubygems_version: 3.1.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: number 2 words
|
45
|
+
test_files: []
|