numerale 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/numerale/version.rb +1 -1
  2. data/lib/numerale.rb +113 -114
  3. metadata +3 -3
@@ -1,3 +1,3 @@
1
1
  module Numerale
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/numerale.rb CHANGED
@@ -1,136 +1,135 @@
1
1
  class Numerale
2
- UNITS = {0 => "zero",
3
- 1 => "jeden",
4
- 2 => "dwa",
5
- 3 => "trzy",
6
- 4 => "cztery",
7
- 5 => "pięć",
8
- 6 => "sześć",
9
- 7 => "siedem",
10
- 8 => "osiem",
11
- 9 => "dziewięć",
12
- 10 => "dziesięć",
13
- 11 => "jedenaście",
14
- 12 => "dwanaście",
15
- 13 => "trzynaście",
16
- 14 => "czternaście",
17
- 15 => "piętnaście",
18
- 16 => "szesnaście",
19
- 17 => "siedemnaście",
20
- 18 => "osiemnaście",
21
- 19 => "dziewiętnaście",
22
- 20 => "dwadzieścia",
23
- 30 => 'trzydzieści',
24
- 40 => 'czterdzieści',
25
- 50 => 'pięćdziesiąt',
26
- 60 => 'sześćdziesiąt',
27
- 70 => 'siedemdziesiąt',
28
- 80 => 'osiemdziesiąt',
29
- 90 => 'dziewięćdziesiąt',
30
- 100 => "sto",
31
- 200 => "dwieście",
32
- 300 => "trzysta",
33
- 400 => "czterysta",
34
- 500 => "pięćset",
35
- 600 => 'sześćset',
36
- 700 => 'siedemset',
37
- 800 => 'osiemset',
38
- 900 => 'dziewięćset',
39
- 1000 => {1 => 'tysiąc', 2 => 'tysiące', 5 => 'tysięcy'},
40
- 1000000 => {1 => 'milion', 2 => 'miliony', 5 => 'milionów'},
41
- 1000000000 => {1 => 'miliard', 2 => 'miliardy', 5 => 'miliardów'}}
42
-
43
- CURRENCIES = {
44
- 'PLN' => { 'full' => {1 => 'złoty', 2 => 'złote', 5 => 'złotych'}, 'frac' => {1 => 'grosz', 2 => 'grosze', 5 => 'groszy'} },
45
- 'USD' => { 'full' => {1 => 'dollar', 2 => 'dollars', 5 => 'dollars'}, 'frac' => {1 => 'cent', 2 => 'cents', 5 => 'cents'}}
46
- }
47
-
48
-
49
- def initialize(d)
50
- number = d
51
- precision = 10**2
52
- number = [number.to_i, ((number * precision).round % precision).to_i]
53
-
54
- decomposition = []
55
- i = 0
56
- number.each do |n|
57
- decomposition[i] = {}
58
-
59
- if n == 0
60
- decomposition[i][1] = 0
61
- else
62
- pow = 10**9
63
- count = n
64
-
65
- while pow > 0 do
66
- decomposition[i][pow] = count / pow
67
- count %= pow
68
- pow /= 10**3
69
- end
2
+ UNITS = {0 => "zero",
3
+ 1 => "jeden",
4
+ 2 => "dwa",
5
+ 3 => "trzy",
6
+ 4 => "cztery",
7
+ 5 => "pięć",
8
+ 6 => "sześć",
9
+ 7 => "siedem",
10
+ 8 => "osiem",
11
+ 9 => "dziewięć",
12
+ 10 => "dziesięć",
13
+ 11 => "jedenaście",
14
+ 12 => "dwanaście",
15
+ 13 => "trzynaście",
16
+ 14 => "czternaście",
17
+ 15 => "piętnaście",
18
+ 16 => "szesnaście",
19
+ 17 => "siedemnaście",
20
+ 18 => "osiemnaście",
21
+ 19 => "dziewiętnaście",
22
+ 20 => "dwadzieścia",
23
+ 30 => 'trzydzieści',
24
+ 40 => 'czterdzieści',
25
+ 50 => 'pięćdziesiąt',
26
+ 60 => 'sześćdziesiąt',
27
+ 70 => 'siedemdziesiąt',
28
+ 80 => 'osiemdziesiąt',
29
+ 90 => 'dziewięćdziesiąt',
30
+ 100 => "sto",
31
+ 200 => "dwieście",
32
+ 300 => "trzysta",
33
+ 400 => "czterysta",
34
+ 500 => "pięćset",
35
+ 600 => 'sześćset',
36
+ 700 => 'siedemset',
37
+ 800 => 'osiemset',
38
+ 900 => 'dziewięćset',
39
+ 1000 => {1 => 'tysiąc', 2 => 'tysiące', 5 => 'tysięcy'},
40
+ 1000000 => {1 => 'milion', 2 => 'miliony', 5 => 'milionów'},
41
+ 1000000000 => {1 => 'miliard', 2 => 'miliardy', 5 => 'miliardów'}}
42
+
43
+ CURRENCIES = {
44
+ 'PLN' => { 'full' => {1 => 'złoty', 2 => 'złote', 5 => 'złotych'}, 'frac' => {1 => 'grosz', 2 => 'grosze', 5 => 'groszy'} },
45
+ 'USD' => { 'full' => {1 => 'dollar', 2 => 'dollars', 5 => 'dollars'}, 'frac' => {1 => 'cent', 2 => 'cents', 5 => 'cents'}}
46
+ }
47
+
48
+
49
+ def initialize(d)
50
+ number = d
51
+ precision = 10**2
52
+ number = [number.to_i, ((number * precision).round % precision).to_i]
53
+
54
+ decomposition = []
55
+ i = 0
56
+ number.each do |n|
57
+ decomposition[i] = {}
58
+
59
+ if n == 0
60
+ decomposition[i][1] = 0
61
+ else
62
+ pow = 10**9
63
+ count = n
64
+
65
+ while pow > 0 do
66
+ decomposition[i][pow] = count / pow
67
+ count %= pow
68
+ pow /= 10**3
70
69
  end
71
- i += 1
72
70
  end
73
-
74
- @number = decomposition
71
+ i += 1
75
72
  end
76
73
 
77
- def expand_partial(number, pow)
78
- result = ""
79
- @ones = 0
80
-
81
- if number.include?(pow) && number[pow] > 0
82
- hundreds = (number[pow] / 10**2) * 10**2
83
- if (number[pow] % 10**2) < 20 && ((number[pow] % 10**2) > 10)
84
- tens = (number[pow] % 10**2)
85
- ones = 0
86
- else
87
- tens = ((number[pow] % 10**2) / 10) * 10
88
- ones = number[pow] % 10
89
- end
74
+ @number = decomposition
75
+ end
90
76
 
91
- result += "#{UNITS[hundreds]} " if hundreds > 0
92
- result += "#{UNITS[tens]} " if tens > 0
93
- result += "#{UNITS[ones]} " if ones > 0
77
+ def expand_partial(number, pow)
78
+ result = ""
79
+ @ones = 0
80
+
81
+ if number.include?(pow) && number[pow] > 0
82
+ hundreds = (number[pow] / 10**2) * 10**2
83
+ if (number[pow] % 10**2) < 20 && ((number[pow] % 10**2) > 10)
84
+ tens = (number[pow] % 10**2)
85
+ ones = 0
86
+ else
87
+ tens = ((number[pow] % 10**2) / 10) * 10
88
+ ones = number[pow] % 10
89
+ end
94
90
 
95
- c = (hundreds > 0 || tens > 0) ? ones > 1 && ones < 5 ? 2 : 5 : ones == 1 ? 1 : ones < 5 ? 2 : 5
96
- result += "#{UNITS[pow][c]} " if UNITS[pow].class == Hash
91
+ result += "#{UNITS[hundreds]} " if hundreds > 0
92
+ result += "#{UNITS[tens]} " if tens > 0
93
+ result += "#{UNITS[ones]} " if ones > 0
97
94
 
98
- @hundreds = hundreds
99
- @tens = tens
100
- @ones = ones
101
- end
95
+ c = (hundreds > 0 || tens > 0) ? ones > 1 && ones < 5 ? 2 : 5 : ones == 1 ? 1 : ones < 5 ? 2 : 5
96
+ result += "#{UNITS[pow][c]} " if UNITS[pow].class == Hash
102
97
 
103
- return result
98
+ @hundreds = hundreds
99
+ @tens = tens
100
+ @ones = ones
104
101
  end
105
102
 
106
- def expand(number, currency, ending)
107
- result = ""
103
+ return result
104
+ end
108
105
 
109
- pow = 10**9
110
- ones = 0
106
+ def expand(number, currency, ending)
107
+ result = ""
111
108
 
112
- while pow > 0
113
- result += expand_partial(number, pow)
114
- pow /= 10**3
115
- end
109
+ pow = 10**9
110
+ ones = 0
116
111
 
112
+ while pow > 0
113
+ result += expand_partial(number, pow)
114
+ pow /= 10**3
115
+ end
117
116
 
118
- if result.strip == "" && number[1] == 0
119
- result += "#{UNITS[0]} "
120
- end
121
117
 
122
- c = @hundreds > 0 || @tens > 0 ? @ones > 1 && @ones < 5 ? 2 : 5 : @ones == 1 ? 1 : @ones < 5 ? 2 : 5
123
- result += "#{CURRENCIES[currency][ending][c]}" if result.strip != ""
118
+ if result.strip == "" && number[1] == 0
119
+ result += "#{UNITS[0]} "
124
120
  end
125
121
 
122
+ c = @hundreds > 0 || @tens > 0 ? @ones > 1 && @ones < 5 ? 2 : 5 : @ones == 1 ? 1 : @ones < 5 ? 2 : 5
123
+ result += "#{CURRENCIES[currency][ending][c]}" if result.strip != ""
124
+ end
125
+
126
126
 
127
- def to_text(currency = "PLN")
128
- result = ""
129
- result = "#{expand(@number[0], currency, 'full')}"
130
- result += " " if result.strip != ""
131
- result += "#{expand(@number[1], currency, 'frac')}"
132
- puts result
133
- end
127
+ def to_text(currency = "PLN")
128
+ result = ""
129
+ result = "#{expand(@number[0], currency, 'full')}"
130
+ result += " " if result.strip != ""
131
+ result += "#{expand(@number[1], currency, 'frac')}"
132
+ puts result
134
133
  end
135
134
  end
136
135
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numerale
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Piotr Debosz