diff --git a/config.json b/config.json index a77d221..2dc08d5 100644 --- a/config.json +++ b/config.json @@ -51,6 +51,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "resistor-color-trio", + "name": "Resistor Color Trio", + "uuid": "bf63aff6-54bf-484a-b00d-9a038db249aa", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "uuid": "c3b37c54-cc4e-49a5-a869-cd7700b0e448", "slug": "leap", diff --git a/exercises/practice/resistor-color-trio/.docs/instructions.md b/exercises/practice/resistor-color-trio/.docs/instructions.md new file mode 100644 index 0000000..59d2278 --- /dev/null +++ b/exercises/practice/resistor-color-trio/.docs/instructions.md @@ -0,0 +1,56 @@ +# Instructions + +If you want to build something using a Raspberry Pi, you'll probably use _resistors_. +For this exercise, you need to know only three 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 3 colors as input, and outputs the correct value, in ohms. + The color bands are encoded as follows: + +- Black: 0 +- Brown: 1 +- Red: 2 +- Orange: 3 +- Yellow: 4 +- Green: 5 +- Blue: 6 +- Violet: 7 +- Grey: 8 +- White: 9 + +In Resistor Color Duo you decoded the first two colors. +For instance: orange-orange got the main value `33`. +The third color stands for how many zeros need to be added to the main value. +The main value plus the zeros gives us a value in ohms. +For the exercise it doesn't matter what ohms really are. +For example: + +- orange-orange-black would be 33 and no zeros, which becomes 33 ohms. +- orange-orange-red would be 33 and 2 zeros, which becomes 3300 ohms. +- orange-orange-orange would be 33 and 3 zeros, which becomes 33000 ohms. + +(If Math is your thing, you may want to think of the zeros as exponents of 10. +If Math is not your thing, go with the zeros. +It really is the same thing, just in plain English instead of Math lingo.) + +This exercise is about translating the colors into a label: + +> "... ohms" + +So an input of `"orange", "orange", "black"` should return: + +> "33 ohms" + +When we get to larger resistors, a [metric prefix][metric-prefix] is used to indicate a larger magnitude of ohms, such as "kiloohms". +That is similar to saying "2 kilometers" instead of "2000 meters", or "2 kilograms" for "2000 grams". + +For example, an input of `"orange", "orange", "orange"` should return: + +> "33 kiloohms" + +[metric-prefix]: https://en.wikipedia.org/wiki/Metric_prefix diff --git a/exercises/practice/resistor-color-trio/.meta/config.json b/exercises/practice/resistor-color-trio/.meta/config.json new file mode 100644 index 0000000..0691fb7 --- /dev/null +++ b/exercises/practice/resistor-color-trio/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "glaxxie" + ], + "files": { + "solution": [ + "resistor_color_trio.gd" + ], + "test": [ + "resistor_color_trio_test.gd" + ], + "example": [ + ".meta/example.gd" + ] + }, + "blurb": "Convert color codes, as used on resistors, to a human-readable label.", + "source": "Maud de Vries, Erik Schierboom", + "source_url": "https://github.com/exercism/problem-specifications/issues/1549" +} diff --git a/exercises/practice/resistor-color-trio/.meta/example.gd b/exercises/practice/resistor-color-trio/.meta/example.gd new file mode 100644 index 0000000..043375d --- /dev/null +++ b/exercises/practice/resistor-color-trio/.meta/example.gd @@ -0,0 +1,18 @@ +func color_code(colors): + var colors_code = ["black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"] + + var units = { + 1e9: "gigaohms", + 1e6: "megaohms", + 1e3: "kiloohms" + } + + var base_value = colors_code.find(colors[0]) * 10 + colors_code.find(colors[1]) + var magnitude = 10 ** colors_code.find(colors[2]) + var total = base_value * magnitude + + for key in units.keys(): + if total >= key: + return str(total / key) + " " + units[key] + + return str(total) + " ohms" \ No newline at end of file diff --git a/exercises/practice/resistor-color-trio/resistor_color_trio.gd b/exercises/practice/resistor-color-trio/resistor_color_trio.gd new file mode 100644 index 0000000..0956b0e --- /dev/null +++ b/exercises/practice/resistor-color-trio/resistor_color_trio.gd @@ -0,0 +1,2 @@ +func color_code(colors): + pass \ No newline at end of file diff --git a/exercises/practice/resistor-color-trio/resistor_color_trio_test.gd b/exercises/practice/resistor-color-trio/resistor_color_trio_test.gd new file mode 100644 index 0000000..b4e479e --- /dev/null +++ b/exercises/practice/resistor-color-trio/resistor_color_trio_test.gd @@ -0,0 +1,59 @@ +func test_orange_and_orange_and_black(solution_script): + var colors = ["orange", "orange", "black"] + var expected = "33 ohms" + return [expected, solution_script.color_code(colors)] + + +func test_blue_and_grey_and_brown(solution_script): + var colors = ["blue", "grey", "brown"] + var expected = "680 ohms" + return [expected, solution_script.color_code(colors)] + + +func test_red_and_black_and_red(solution_script): + var colors = ["red", "black", "red"] + var expected = "2 kiloohms" + return [expected, solution_script.color_code(colors)] + + +func test_green_and_brown_and_orange(solution_script): + var colors = ["green", "brown", "orange"] + var expected = "51 kiloohms" + return [expected, solution_script.color_code(colors)] + + +func test_yellow_and_violet_and_yellow(solution_script): + var colors = ["yellow", "violet", "yellow"] + var expected = "470 kiloohms" + return [expected, solution_script.color_code(colors)] + + +func test_blue_and_violet_and_blue(solution_script): + var colors = ["blue", "violet", "blue"] + var expected = "67 megaohms" + return [expected, solution_script.color_code(colors)] + + +func test_minimum_possible_value(solution_script): + var colors = ["black", "black", "black"] + var expected = "0 ohms" + return [expected, solution_script.color_code(colors)] + + +func test_maximum_possible_value(solution_script): + var colors = ["white", "white", "white"] + var expected = "99 gigaohms" + return [expected, solution_script.color_code(colors)] + + +func test_first_two_colors_make_an_invalid_octal_number(solution_script): + var colors = ["black", "grey", "black"] + var expected = "8 ohms" + return [expected, solution_script.color_code(colors)] + + +func test_ignore_extra_colors(solution_script): + var colors = ["blue", "green", "yellow", "orange"] + var expected = "650 kiloohms" + return [expected, solution_script.color_code(colors)] +