DEV Community

Cover image for Exercism Ruby - Resistor Color Duo
Juan Vasquez
Juan Vasquez

Posted on • Edited on

Exercism Ruby - Resistor Color Duo

Alt Text

If you want to build something using a Raspberry Pi, you'll probably use resistors. For this exercise, you need to know two things about them:

  • Each resistor has a resistance value.
  • Resistors are small - so small in fact that if you printed the resistance value on them, it would be hard to read. To get around this problem, manufacturers print color-coded bands onto the resistors to denote their resistance values. Each band has a position and a numeric value. For example, if they printed a brown band (value 1) followed by a green band (value 5), it would translate to the number 15.

In this exercise you are going to create a helpful program so that you don't have to remember the values of the bands. The program will take color names as input and output a two digit number, even if the input is more than two colors!

The colors are mapped to the numbers from 0 to 9 in the sequence: Black - Brown - Red - Orange - Yellow - Green - Blue - Violet - Grey - White

From the example above: brown-green should return 15 brown-green-violet should return 15 too, ignoring the third color.

source Maud de Vries, Erik Schierboom

require 'minitest/autorun'
require_relative 'resistor_color_duo'

# Common test data version: 2.1.0 00dda3a
class ResistorColorDuoTest < Minitest::Test
  def test_brown_and_black
    assert_equal 10, ResistorColorDuo.value(["brown", "black"])
  end

  def test_blue_and_grey
    assert_equal 68, ResistorColorDuo.value(["blue", "grey"])
  end

  def test_yellow_and_violet
    assert_equal 47, ResistorColorDuo.value(["yellow", "violet"])
  end

  def test_orange_and_orange
    assert_equal 33, ResistorColorDuo.value(["orange", "orange"])
  end

  def test_ignore_additional_colors
    assert_equal 51, ResistorColorDuo.value(["green", "brown", "orange"])
  end
end
Enter fullscreen mode Exit fullscreen mode
class ResistorColorDuo
  COLORS = {
    "black"  => "0",
    "brown"  => "1",
    "red"    => "2",
    "orange" => "3",
    "yellow" => "4",
    "green"  => "5",
    "blue"   => "6",
    "violet" => '7',
    "grey"   => '8',
    "white"  => "9"
  }.freeze

  def self.value bands
    "#{COLORS[bands[0]]}#{COLORS[bands[1]]}".to_i
  end
end
Enter fullscreen mode Exit fullscreen mode

It was great! because first I thought to use the positions array but suddenly I was thinking in hashes and finally I use it.

Top comments (1)

Collapse
 
juanvqz profile image
Juan Vasquez

What do you think about my answer?
What would you do?