roman_nums 1.01 → 1.02
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -2
- data/Rakefile +3 -10
- data/lib/roman_nums/solver.rb +67 -5
- data/lib/roman_nums/version.rb +1 -1
- data/lib/roman_nums.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b76be28318ea83275d0da0af409b23fddea674bd948893fa1649f09a4fd072ce
|
4
|
+
data.tar.gz: aad988cf119b2c55ed00e86ac45f96eb709037c90d37c6c5273b63f4fb17804c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a91dd67856c76a59c86337d959af54c68bcae388bcf6851de3ac00d8bd03ac76d576eab2c595fa08c89d0a2df1b75da97eeda28f54ac5d5db39454e9784224fc
|
7
|
+
data.tar.gz: 80246f18e6aaba1030548f0e3897777e3054a67a728f87ac33393950c5f0c8d717f170ff2891b3ada0beab91ccda55ae22fa583d6e4b4ea54bfd83d3d8930b3d
|
data/README.md
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
|
6
6
|
#### Converts your input numbers to roman numerals.
|
7
7
|
|
8
|
-
Note: Currently being moved from local environment to this gem. Will be completed by 7/10/18
|
9
8
|
|
10
9
|
## Installation
|
11
10
|
|
@@ -25,7 +24,42 @@ Or install it yourself as:
|
|
25
24
|
|
26
25
|
## Usage
|
27
26
|
|
28
|
-
|
27
|
+
1. Add your arabic_nums to a hash with `:arabic_nums` symbol key and numbers as an array for the value, then pass the arguments to `RomanNums.convert(args)` like the example below. If you don't pass any args, and just run `RomanNums.convert` it will return sample data for testing.
|
28
|
+
|
29
|
+
```
|
30
|
+
arabic_nums = [3994, 4336, 9233, 1376, 8851, 6222, 1839, 3570, 8660, 9018, 4448, 1827, 9753, 2738, 8386, 9867, 1698, 9022, 8631, 8382, 4752]
|
31
|
+
|
32
|
+
number_hashes = RomanNums.convert(arabic_nums: arabic_nums)
|
33
|
+
```
|
34
|
+
|
35
|
+
2. Results as Array of Hashes:
|
36
|
+
|
37
|
+
```
|
38
|
+
[
|
39
|
+
{:arabic=>3994, :classic_rom=>"MMMDCCCCLXXXXIIII", :modern_rom=>"MMMDCCCCLXXXXIIII", :same=>true},
|
40
|
+
{:arabic=>4336, :classic_rom=>"MMMMCCCXXXVI", :modern_rom=>"MMMMCCCXXXVI", :same=>true},
|
41
|
+
{:arabic=>9233, :classic_rom=>"MMMMMMMMMCCXXXIII", :modern_rom=>"MMMMMMMMMCCXXXIII", :same=>true},
|
42
|
+
{:arabic=>1376, :classic_rom=>"MCCCLXXVI", :modern_rom=>"MCCCLXXVI", :same=>true},
|
43
|
+
{:arabic=>8851, :classic_rom=>"MMMMMMMMDCCCLI", :modern_rom=>"MMMMMMMMDCCCLI", :same=>true},
|
44
|
+
{:arabic=>6222, :classic_rom=>"MMMMMMCCXXII", :modern_rom=>"MMMMMMCCXXII", :same=>true},
|
45
|
+
{:arabic=>1839, :classic_rom=>"MDCCCXXXVIIII", :modern_rom=>"MDCCCXXXVIIII", :same=>true},
|
46
|
+
{:arabic=>3570, :classic_rom=>"MMMDLXX", :modern_rom=>"MMMDLXX", :same=>true},
|
47
|
+
{:arabic=>8660, :classic_rom=>"MMMMMMMMDCLX", :modern_rom=>"MMMMMMMMDCLX", :same=>true},
|
48
|
+
{:arabic=>9018, :classic_rom=>"MMMMMMMMMXVIII", :modern_rom=>"MMMMMMMMMXVIII", :same=>true},
|
49
|
+
{:arabic=>4448, :classic_rom=>"MMMMCCCCXXXXVIII", :modern_rom=>"MMMMCCCCXXXXVIII", :same=>true},
|
50
|
+
{:arabic=>1827, :classic_rom=>"MDCCCXXVII", :modern_rom=>"MDCCCXXVII", :same=>true},
|
51
|
+
{:arabic=>9753, :classic_rom=>"MMMMMMMMMDCCLIII", :modern_rom=>"MMMMMMMMMDCCLIII", :same=>true},
|
52
|
+
{:arabic=>2738, :classic_rom=>"MMDCCXXXVIII", :modern_rom=>"MMDCCXXXVIII", :same=>true},
|
53
|
+
{:arabic=>8386, :classic_rom=>"MMMMMMMMCCCLXXXVI", :modern_rom=>"MMMMMMMMCCCLXXXVI", :same=>true},
|
54
|
+
{:arabic=>9867, :classic_rom=>"MMMMMMMMMDCCCLXVII", :modern_rom=>"MMMMMMMMMDCCCLXVII", :same=>true},
|
55
|
+
{:arabic=>1698, :classic_rom=>"MDCLXXXXVIII", :modern_rom=>"MDCLXXXXVIII", :same=>true},
|
56
|
+
{:arabic=>9022, :classic_rom=>"MMMMMMMMMXXII", :modern_rom=>"MMMMMMMMMXXII", :same=>true},
|
57
|
+
{:arabic=>8631, :classic_rom=>"MMMMMMMMDCXXXI", :modern_rom=>"MMMMMMMMDCXXXI", :same=>true},
|
58
|
+
{:arabic=>8382, :classic_rom=>"MMMMMMMMCCCLXXXII", :modern_rom=>"MMMMMMMMCCCLXXXII", :same=>true},
|
59
|
+
{:arabic=>4752, :classic_rom=>"MMMMDCCLII", :modern_rom=>"MMMMDCCLII", :same=>true}
|
60
|
+
]
|
61
|
+
```
|
62
|
+
|
29
63
|
|
30
64
|
## Development
|
31
65
|
|
data/Rakefile
CHANGED
@@ -18,7 +18,7 @@ task :console do
|
|
18
18
|
require "active_support/all"
|
19
19
|
ARGV.clear
|
20
20
|
|
21
|
-
|
21
|
+
number_hashes = run_roman_nums
|
22
22
|
# binding.pry
|
23
23
|
|
24
24
|
IRB.start
|
@@ -26,14 +26,7 @@ end
|
|
26
26
|
|
27
27
|
|
28
28
|
def run_roman_nums
|
29
|
-
|
30
|
-
solve = RomanNums::Solver.new
|
31
|
-
res = solve.start
|
32
|
-
binding.pry
|
29
|
+
arabic_nums = [3994, 4336, 9233, 1376, 8851, 6222, 1839, 3570, 8660, 9018, 4448, 1827, 9753, 2738, 8386, 9867, 1698, 9022, 8631, 8382, 4752]
|
33
30
|
|
34
|
-
|
35
|
-
# scraped_links = scraper.start('https://en.wikipedia.org/wiki/Austin%2C_Texas')
|
36
|
-
# binding.pry
|
37
|
-
|
38
|
-
# scraper = LinkScraper::Scrape.new(WebsCriteria.all_scrub_web_criteria)
|
31
|
+
number_hashes = RomanNums.convert(arabic_nums: arabic_nums)
|
39
32
|
end
|
data/lib/roman_nums/solver.rb
CHANGED
@@ -2,13 +2,75 @@
|
|
2
2
|
module RomanNums
|
3
3
|
class Solver
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def convert(args = {})
|
6
|
+
arabic_nums = args.fetch(:arabic_nums, nil)
|
7
|
+
|
8
|
+
if !arabic_nums.present?
|
9
|
+
arabic_nums = sample_arabic_nums
|
10
|
+
else
|
11
|
+
if arabic_nums.is_a?(::String)
|
12
|
+
arabic_nums = arabic_nums.scan(/\d+/)
|
13
|
+
arabic_nums.map! { |num| num.to_i }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
roman_nums = arabic_nums.map { |num| convert_to_modern(num) }
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def to_classic(arabic)
|
22
|
+
answer = arabic / 1000 # 1
|
23
|
+
remainder = arabic % 1000 # 1
|
24
|
+
thousands = "M" * answer
|
25
|
+
|
26
|
+
answer = remainder / 500 # 1
|
27
|
+
remainder = arabic % 500 # 1
|
28
|
+
five_hundreds = "D" * answer
|
29
|
+
|
30
|
+
answer = remainder / 100 # 1
|
31
|
+
remainder = arabic % 100 # 1
|
32
|
+
hundreds = "C" * answer
|
33
|
+
|
34
|
+
answer = remainder / 50 # 1
|
35
|
+
remainder = arabic % 50 # 1
|
36
|
+
fifties = "L" * answer
|
37
|
+
|
38
|
+
answer = remainder / 10 # 1 top of logic
|
39
|
+
remainder = arabic % 10 # 6
|
40
|
+
tens = "X" * answer
|
41
|
+
|
42
|
+
answer = remainder / 5 # 1
|
43
|
+
remainder = arabic % 5 # 1
|
44
|
+
fives = "V" * answer
|
45
|
+
|
46
|
+
answer_n = remainder / 1 #
|
47
|
+
ones = "I" * answer_n
|
48
|
+
|
49
|
+
roman_num = thousands + five_hundreds + hundreds + fifties + tens + fives + ones
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def convert_to_modern(arabic)
|
54
|
+
classic_rom = to_classic(arabic)
|
55
|
+
modern_conversions = {'DCCCC'=> 'CM', 'CCCC'=> 'CD', 'LXXXX'=> 'XC', 'XXXX'=> 'XL', 'VIIII'=> 'IX', 'IIII'=> 'IV'}
|
56
|
+
|
57
|
+
modern_rom = classic_rom
|
58
|
+
modern_conversions.each do |k,v|
|
59
|
+
if classic_rom.include?(k)
|
60
|
+
modern_conversions = classic_rom.gsub(k,v)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
same = false if modern_rom == classic_rom
|
65
|
+
converted_hsh = { arabic: arabic,
|
66
|
+
classic_rom: classic_rom,
|
67
|
+
modern_rom: modern_rom,
|
68
|
+
same: same || true
|
69
|
+
}
|
7
70
|
end
|
8
71
|
|
9
|
-
def
|
10
|
-
|
11
|
-
"testing setup"
|
72
|
+
def sample_arabic_nums
|
73
|
+
numbers = (0..20).map { rand(999..9999) }
|
12
74
|
end
|
13
75
|
|
14
76
|
|
data/lib/roman_nums/version.rb
CHANGED
data/lib/roman_nums.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roman_nums
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.02'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Booth
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|