diff --git a/exercises/resistor-color-tolerance/canonical-data.json b/exercises/resistor-color-tolerance/canonical-data.json new file mode 100644 index 0000000000..7258eaa7f3 --- /dev/null +++ b/exercises/resistor-color-tolerance/canonical-data.json @@ -0,0 +1,167 @@ +{ + "exercise": "resistor-color-tolerance", + "cases": [ + { + "uuid": "fb677832-9a1b-4493-a5b0-786db5a8479c", + "description": "Orange, orange, black and red", + "property": "labelDecoder", + "input": { + "colors": ["orange", "orange", "black", "red"] + }, + "expected": { + "value": 33, + "unit": "ohms", + "tolerance": "±2%" + } + }, + { + "uuid": "8bdeb354-b8cf-47c1-96e4-84dceda90f8c", + "description": "Blue, gray, brown and violet", + "property": "labelDecoder", + "input": { + "colors": ["blue", "grey", "brown", "violet"] + }, + "expected": { + "value": 680, + "unit": "ohms", + "tolerance": "±0.1%" + } + }, + { + "uuid": "b4ef8864-09fc-443b-b4fb-82835c081637", + "description": "Red, black, red and green", + "property": "labelDecoder", + "input": { + "colors": ["red", "black", "red", "green"] + }, + "expected": { + "value": 2, + "unit": "kiloohms", + "tolerance": "±0.5%" + } + }, + { + "uuid": "c001757b-d388-4f42-9987-23e42bc22d68", + "description": "Green, brownm orange and grey", + "property": "labelDecoder", + "input": { + "colors": ["green", "brown", "orange", "grey"] + }, + "expected": { + "value": 51, + "unit": "kiloohms", + "tolerance": "±0.5%" + } + }, + { + "uuid": "1cb18e15-1fc5-4375-8a24-ca6eee130a27", + "description": "Only one band", + "comments": [ + "One band resistors only have the color black with a value of 0 and no tolerance." + ], + "property": "labelDecoder", + "input": { + "colors": ["black"] + }, + "expected": { + "value": 0, + "unit": "ohms" + } + }, + { + "uuid": "7e6841b9-0d11-43fb-85ad-be50e49b0656", + "description": "Orange, orange, yellow, black and brown", + "property": "labelDecoder", + "input": { + "colors": ["orange", "orange", "yellow", "black", "brown"] + }, + "expected": { + "value": 334, + "unit": "ohms", + "tolerance": "±1%" + } + }, + { + "uuid": "00019463-44d1-47f5-b59f-f3e7defc03d9", + "description": "Red, green, yellow, yellow and brown", + "property": "labelDecoder", + "input": { + "colors": ["red", "green", "yellow", "yellow", "brown"] + }, + "expected": { + "value": 2.54, + "unit": "megaohms", + "tolerance": "±1%" + } + }, + { + "uuid": "7998837e-fdfa-48c6-9191-0ab27c4777cc", + "description": "Blue, gray, white, brown and brown", + "scenarios": ["floating-point"], + "property": "labelDecoder", + "input": { + "colors": ["blue", "grey", "white", "brown", "brown"] + }, + "expected": { + "value": 6.89, + "unit": "kiloohms", + "tolerance": "±1%" + } + }, + { + "uuid": "51554e9f-c21d-4a73-a54c-1d9a973eaed0", + "description": "Violet, orange, red and gray", + "scenarios": ["floating-point"], + "property": "labelDecoder", + "input": { + "colors": ["violet", "orange", "red", "grey"] + }, + "expected": { + "value": 7.3, + "unit": "kiloohms", + "tolerance": "±0.05%" + } + }, + { + "uuid": "68aa7ba3-2334-411a-b3a4-7c47fe20fd99", + "description": "Brown, red, orange, green and blue", + "scenarios": ["floating-point"], + "property": "labelDecoder", + "input": { + "colors": ["brown", "red", "orange", "green", "blue"] + }, + "expected": { + "value": 12.3, + "unit": "megaohms", + "tolerance": "±0.25%" + } + }, + { + "uuid": "f6069edc-099b-429b-b2a9-bbe2537d2fae", + "description": "Brown, black, brown, yellow and violet", + "scenarios": ["floating-point"], + "property": "labelDecoder", + "input": { + "colors": ["brown", "black", "brown", "yellow", "violet"] + }, + "expected": { + "value": 1.01, + "unit": "megaohms", + "tolerance": "±0.1%" + } + }, + { + "uuid": "8fce56df-326e-45fe-9265-b69c334b9023", + "description": "Brown, black, red and red", + "property": "labelDecoder", + "input": { + "colors": ["brown", "black", "red", "red"] + }, + "expected": { + "value": 1, + "unit": "kiloohms", + "tolerance": "±2%" + } + } + ] +} diff --git a/exercises/resistor-color-tolerance/description.md b/exercises/resistor-color-tolerance/description.md new file mode 100644 index 0000000000..efc8e1f9c0 --- /dev/null +++ b/exercises/resistor-color-tolerance/description.md @@ -0,0 +1,85 @@ +# Description + +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 1, 4, or 5 colors as input and output the correct value in ohms. +The color bands are encoded as follows: + +| Color | Value | +| ------ | ----- | +| Black | 0 | +| Brown | 1 | +| Red | 2 | +| Orange | 3 | +| Yellow | 4 | +| Green | 5 | +| Blue | 6 | +| Violet | 7 | +| Gray | 8 | +| White | 9 | + +In [`Resistor Color Trio`][resistor-color-trio-exercise] you decoded the first three color bands. +For instance: orange-orange-brown translated to the main value `330`. +In this exercise you will need to add _tolerance_ to the mix. +Tolerance is the maximum amount that a value can be above or below the main value. +For example, if the last band is green, the maximum tolerance will be `±0.5%`. + +The tolerance band will have one of these values: + +| Color | Tolerance | +| ------ | --------: | +| Grey | ±0.05% | +| Violet | ±0.10% | +| Blue | ±0.25% | +| Green | ±0.50% | +| Brown | ±1.00% | +| Red | ±2.00% | +| Gold | ±5.00% | +| Silver | ±10.00% | + +The four-band resistor is built up like this: + +| Band_1 | Band_2 | Band_3 | Band_4 | +| ------- | ------- | ---------- | --------- | +| Value_1 | Value_2 | Multiplier | Tolerance | + +Examples: + +- orange-orange-brown-green would be `330` ohms with a `±0.5%` tolerance. +- orange-orange-red-grey would be `3300` ohms with a `±0.05%` tolerance. + +The difference between a four and five-band resistor is that the five-band resistor has an extra band to indicate a more precise value. + +| Band_1 | Band_2 | Band_3 | Band_4 | Band_5 | +| ------- | ------- | ------- | ---------- | --------- | +| Value_1 | Value_2 | Value_3 | Multiplier | Tolerance | + +Examples: + +- orange-orange-orange-black-green would be `333` ohms with a `±0.5%` tolerance. +- orange-red-orange-blue-violet would be `323 million` ohms with a `±0.1%` tolerance. + +There are also one band resistors. +One band resistors only have the color black with a value of 0. + +Your program should translate an input `list` of resistor band colors into a label: + +"... ohms ±...%" + +So an input `list` of `["orange", "orange", "black", "green"]` should return: + +"33 ohms ±0.5%" + +When there are thousands of ohms, we say "kiloohms". +That's similar to saying "kilometer" for 1000 meters, and "kilograms" for 1000 grams. + +So an input `list` of `["orange", "orange", "orange", "grey"]` should return: + +"33 kiloohms ±0.05%" + +When there are millions of ohms, we say "megaohms". + +So an input `list` of `["orange", "orange", "blue", "red"]` should return: + +"33 megaohms ±2%" + +[resistor-color-trio-exercise]: https://exercism.org/tracks/python/exercises/resistor-color-trio diff --git a/exercises/resistor-color-tolerance/metadata.toml b/exercises/resistor-color-tolerance/metadata.toml new file mode 100644 index 0000000000..1b29a3cc82 --- /dev/null +++ b/exercises/resistor-color-tolerance/metadata.toml @@ -0,0 +1,4 @@ +title = "Resistor Color Tolerance" +blurb = "Convert color codes as used on resistors with different bands to a human-readable label." +source = "@meatball133" +source_url = "https://github.com/exercism/python/tree/main/exercises/practice/resistor-color-expert"