Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 167 additions & 0 deletions exercises/resistor-color-tolerance/canonical-data.json
Original file line number Diff line number Diff line change
@@ -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,
Comment thread
BethanyG marked this conversation as resolved.
Resolved
"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%"
}
}
]
}
85 changes: 85 additions & 0 deletions exercises/resistor-color-tolerance/description.md
Comment thread
IsaacG marked this conversation as resolved.
Resolved
Original file line number Diff line number Diff line change
@@ -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%"

Comment thread
zeektvbox01-hub marked this conversation as resolved.
Resolved
[resistor-color-trio-exercise]: https://exercism.org/tracks/python/exercises/resistor-color-trio
4 changes: 4 additions & 0 deletions exercises/resistor-color-tolerance/metadata.toml
Original file line number Diff line number Diff line change
@@ -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"
Loading