diff --git a/config.json b/config.json index 98c20e0ea8d..f80b140e3fd 100644 --- a/config.json +++ b/config.json @@ -1554,6 +1554,16 @@ "topics": [ "arrays" ] + }, + { + "slug": "resistor-colors", + "uuid": "089f06a6-0759-479c-8c00-d699525a1e22", + "core": false, + "unlocked_by": null, + "difficulty": 1, + "topics": [ + "arrays" + ] } ] } diff --git a/exercises/resistor-colors/README.md b/exercises/resistor-colors/README.md new file mode 100644 index 00000000000..aa49ca44cb0 --- /dev/null +++ b/exercises/resistor-colors/README.md @@ -0,0 +1,72 @@ +# Resistor Colors + +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 acts as a digit of a number. 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 two colors as input, and output the correct number. + +The band colors are encoded as follows: + +- Black: 0 +- Brown: 1 +- Red: 2 +- Orange: 3 +- Yellow: 4 +- Green: 5 +- Blue: 6 +- Violet: 7 +- Grey: 8 +- White: 9 + + +## Exception messages + +Sometimes it is necessary to raise an exception. When you do this, you should include a meaningful error message to +indicate what the source of the error is. This makes your code more readable and helps significantly with debugging. Not +every exercise will require you to raise an exception, but for those that do, the tests will only pass if you include +a message. + +To raise a message with an exception, just write it as an argument to the exception type. For example, instead of +`raise Exception`, you should write: + +```python +raise Exception("Meaningful message indicating the source of the error") +``` + +## Running the tests + +To run the tests, run the appropriate command below ([why they are different](https://github.com/pytest-dev/pytest/issues/1629#issue-161422224)): + +- Python 2.7: `py.test resistor_colors_test.py` +- Python 3.4+: `pytest resistor_colors_test.py` + +Alternatively, you can tell Python to run the pytest module (allowing the same command to be used regardless of Python version): +`python -m pytest resistor_colors_test.py` + +### Common `pytest` options + +- `-v` : enable verbose output +- `-x` : stop running tests on first failure +- `--ff` : run failures from previous test before running other test cases + +For other options, see `python -m pytest -h` + +## Submitting Exercises + +Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/python/resistor-colors` directory. + +You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`. + +For more detailed information about running tests, code style and linting, +please see [Running the Tests](http://exercism.io/tracks/python/tests). + +## Source + +Maud de Vries, Erik Schierboom [https://github.com/exercism/problem-specifications/issues/1464](https://github.com/exercism/problem-specifications/issues/1464) + +## Submitting Incomplete Solutions + +It's possible to submit an incomplete solution so you can see how others have completed the exercise. diff --git a/exercises/resistor-colors/example.py b/exercises/resistor-colors/example.py new file mode 100644 index 00000000000..0f128593925 --- /dev/null +++ b/exercises/resistor-colors/example.py @@ -0,0 +1,16 @@ +COLORS = [ + 'black', + 'brown', + 'red', + 'orange', + 'yellow', + 'green', + 'blue', + 'violet', + 'grey', + 'white' +] + + +def value(colors): + return 10 * COLORS.index(colors[0]) + COLORS.index(colors[1]) diff --git a/exercises/resistor-colors/resistor_colors.py b/exercises/resistor-colors/resistor_colors.py new file mode 100644 index 00000000000..f83a1c237cb --- /dev/null +++ b/exercises/resistor-colors/resistor_colors.py @@ -0,0 +1,2 @@ +def value(colors): + pass diff --git a/exercises/resistor-colors/resistor_colors_test.py b/exercises/resistor-colors/resistor_colors_test.py new file mode 100644 index 00000000000..f3681dad4c4 --- /dev/null +++ b/exercises/resistor-colors/resistor_colors_test.py @@ -0,0 +1,23 @@ +import unittest + +from resistor_colors import value + + +# Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.0 + +class ResistorColorsTest(unittest.TestCase): + def test_brown_and_black(self): + self.assertEqual(value(['brown', 'black']), 10) + + def test_blue_and_grey(self): + self.assertEqual(value(['blue', 'grey']), 68) + + def test_yellow_and_violet(self): + self.assertEqual(value(['yellow', 'violet']), 47) + + def test_orange_and_orange(self): + self.assertEqual(value(['orange', 'orange']), 33) + + +if __name__ == '__main__': + unittest.main()