cjavdev's solution

to Hexadecimal in the Ruby Track

Published at Jul 13 2018 · 0 comments
Instructions
Test suite
Solution

Convert a hexadecimal number, represented as a string (e.g. "10af8c"), to its decimal equivalent using first principles (i.e. no, you may not use built-in or external libraries to accomplish the conversion).

On the web we use hexadecimal to represent colors, e.g. green: 008000, teal: 008080, navy: 000080).

The program should handle invalid hexadecimal strings.

For installation and learning resources, refer to the exercism help page.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

``````gem install minitest
``````

If you would like color output, you can `require 'minitest/pride'` in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

``````ruby hexadecimal_test.rb
``````

To include color from the command line:

``````ruby -r minitest/pride hexadecimal_test.rb
``````

Source

All of Computer Science http://www.wolframalpha.com/examples/NumberBases.html

Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

``````require 'minitest/autorun'

def test_hex_1_is_decimal_1
end

def test_hex_c_is_decimal_12
skip
end

def test_hex_10_is_decimal_16
skip
end

def test_hex_af_is_decimal_175
skip
end

def test_hex_100_is_decimal_256
skip
end

def test_hex_19ace_is_decimal_105166
skip
end

def test_invalid_hex_is_decimal_0
skip
end

def test_black
skip
end

def test_white
skip
end

def test_yellow
skip
end
end``````
``````class Hexadecimal
HEX_TO_DEC = {
'0' => 0,
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 5,
'6' => 6,
'7' => 7,
'8' => 8,
'9' => 9,
'a' => 10,
'b' => 11,
'c' => 12,
'd' => 13,
'e' => 14,
'f' => 15,
}

def initialize(input)
input = '' if input =~ /[^a-f0-9]/
@input = input.downcase
end

def to_decimal
@input
.chars
.reverse
.map { |c| HEX_TO_DEC[c] }
.each_with_index
.inject(0) do |sum, (bit, i)|
sum + (bit * (16 ** i))
end
end
end``````