Skip to content

Commit

Permalink
Add resistor-color exercise
Browse files Browse the repository at this point in the history
  • Loading branch information
BNAndras committed Apr 16, 2024
1 parent 29dbc91 commit 70eb016
Show file tree
Hide file tree
Showing 12 changed files with 208 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,14 @@
"prerequisites": [],
"difficulty": 2
},
{
"slug": "resistor-color",
"name": "Resistor Color",
"uuid": "2af13bc4-76d6-4986-988f-b6acce6aa128",
"practices": [],
"prerequisites": [],
"difficulty": 2
},
{
"slug": "queen-attack",
"name": "Queen Attack",
Expand Down
39 changes: 39 additions & 0 deletions exercises/practice/resistor-color/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Instructions

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.

The first 2 bands of a resistor have a simple encoding scheme: each color maps to a single number.

In this exercise you are going to create a helpful program so that you don't have to remember the values of the bands.

These 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

The goal of this exercise is to create a way:

- to look up the numerical value associated with a particular color band
- to list the different band colors

Mnemonics map the colors to the numbers, that, when stored as an array, happen to map to their index in the array:
Better Be Right Or Your Great Big Values Go Wrong.

More information on the color encoding of resistors can be found in the [Electronic color code Wikipedia article][e-color-code].

[e-color-code]: https://en.wikipedia.org/wiki/Electronic_color_code
11 changes: 11 additions & 0 deletions exercises/practice/resistor-color/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
## -*- conf -*-
.rebar3
_build/
ebin/
erl_crash.dump
rebar3.crashdump

tmp
bin/configlet
bin/configlet.exe
CHECKLIST
19 changes: 19 additions & 0 deletions exercises/practice/resistor-color/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"authors": [
"BNAndras"
],
"files": {
"solution": [
"src/resistor-color.lfe"
],
"test": [
"test/resistor-color-tests.lfe"
],
"example": [
".meta/example.lfe"
]
},
"blurb": "Convert a resistor band's color to its numeric representation.",
"source": "Maud de Vries, Erik Schierboom",
"source_url": "https://github.com/exercism/problem-specifications/issues/1458"
}
27 changes: 27 additions & 0 deletions exercises/practice/resistor-color/.meta/example.lfe
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(defmodule resistor-color
(export (color-code 1) (colors 0)))

(defun color-code
(("black") 0)
(("brown") 1)
(("red") 2)
(("orange") 3)
(("yellow") 4)
(("green") 5)
(("blue") 6)
(("violet") 7)
(("grey") 8)
(("white") 9)
((_) 'false))

(defun colors ()
'("black"
"brown"
"red"
"orange"
"yellow"
"green"
"blue"
"violet"
"grey"
"white"))
22 changes: 22 additions & 0 deletions exercises/practice/resistor-color/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.

[49eb31c5-10a8-4180-9f7f-fea632ab87ef]
description = "Color codes -> Black"

[0a4df94b-92da-4579-a907-65040ce0b3fc]
description = "Color codes -> White"

[5f81608d-f36f-4190-8084-f45116b6f380]
description = "Color codes -> Orange"

[581d68fa-f968-4be2-9f9d-880f2fb73cf7]
description = "Colors"
21 changes: 21 additions & 0 deletions exercises/practice/resistor-color/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
ERL := $(shell which erl)
REBAR3 := $(shell which rebar3)

null :=
space := $(null) #
comma := ,

ifeq ($(ERL),)
$(error Can't find Erlang executable 'erl')
else ifeq ($(REBAR3),)
$(error Can't find rebar3)
endif

compile: ; $(REBAR3) compile

clean: ; $(REBAR3) clean

.PHONY: test
test:
$(REBAR3) eunit \
-m $(subst $(space),$(comma),$(basename $(notdir $(wildcard test/*.lfe))))
11 changes: 11 additions & 0 deletions exercises/practice/resistor-color/rebar.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{plugins, [{rebar3_lfe, "0.4.3"}]}.

{provider_hooks, [{post, [{compile, {lfe, compile}}]}]}.

{deps, [{lfe, "2.1.1"}]}.

{profiles,
[{test,
[{eunit_compile_opts, [{src_dirs, ["src", "test"]}]},
{deps,
[{ltest, "0.13.3"}]}]}]}.
8 changes: 8 additions & 0 deletions exercises/practice/resistor-color/rebar.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{"1.2.0",
[{<<"lfe">>,{pkg,<<"lfe">>,<<"2.1.1">>},0}]}.
[
{pkg_hash,[
{<<"lfe">>, <<"4A888B26172D198DC7A5AFEB897E8248AF7D56E1638D9C8249AAF933AE811B96">>}]},
{pkg_hash_ext,[
{<<"lfe">>, <<"C484D3B655D40DED58BC41B17B22F173711C681BF36063A234A9BAA9506947E1">>}]}
].
11 changes: 11 additions & 0 deletions exercises/practice/resistor-color/src/resistor-color.app.src
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
%% -*- erlang -*-
{application, 'resistor-color',
[{description, ""},
{vsn, "0.0.1"},
{modules,
['resistor-color']},
{registered, []},
{applications,
[kernel, stdlib]},
{included_applications, []},
{env, []}]}.
4 changes: 4 additions & 0 deletions exercises/practice/resistor-color/src/resistor-color.lfe
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
(defmodule resistor-color
(export (color-code 1) (colors 0)))

; Please implement the color-code and colors functions.
27 changes: 27 additions & 0 deletions exercises/practice/resistor-color/test/resistor-color-tests.lfe
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
(defmodule resistor-color-tests
(behaviour ltest-unit)
(export all))

(include-lib "ltest/include/ltest-macros.lfe")

(deftest color-codes-black
(is-equal 0 (resistor-color:color-code "black")))

(deftest color-codes-white
(is-equal 9 (resistor-color:color-code "white")))

(deftest color-codes-orange
(is-equal 3 (resistor-color:color-code "orange")))

(deftest colors
(is-equal '("black"
"brown"
"red"
"orange"
"yellow"
"green"
"blue"
"violet"
"grey"
"white")
(resistor-color:colors)))

0 comments on commit 70eb016

Please sign in to comment.