From 346da9a7e08af19141a791978b3650bb150eafb0 Mon Sep 17 00:00:00 2001 From: Andinus Date: Fri, 27 Aug 2021 09:36:49 +0530 Subject: JS: Solve resistor-color exercise --- javascript/resistor-color/.eslintrc | 29 ++++++++ javascript/resistor-color/.npmrc | 1 + javascript/resistor-color/README.md | 87 ++++++++++++++++++++++++ javascript/resistor-color/babel.config.js | 15 ++++ javascript/resistor-color/package.json | 37 ++++++++++ javascript/resistor-color/resistor-color.js | 6 ++ javascript/resistor-color/resistor-color.spec.js | 32 +++++++++ 7 files changed, 207 insertions(+) create mode 100644 javascript/resistor-color/.eslintrc create mode 100644 javascript/resistor-color/.npmrc create mode 100644 javascript/resistor-color/README.md create mode 100644 javascript/resistor-color/babel.config.js create mode 100644 javascript/resistor-color/package.json create mode 100644 javascript/resistor-color/resistor-color.js create mode 100644 javascript/resistor-color/resistor-color.spec.js (limited to 'javascript/resistor-color') diff --git a/javascript/resistor-color/.eslintrc b/javascript/resistor-color/.eslintrc new file mode 100644 index 0000000..b8dab20 --- /dev/null +++ b/javascript/resistor-color/.eslintrc @@ -0,0 +1,29 @@ +{ + "root": true, + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 7, + "sourceType": "module" + }, + "globals": { + "BigInt": true + }, + "env": { + "es6": true, + "node": true, + "jest": true + }, + "extends": [ + "eslint:recommended", + "plugin:import/errors", + "plugin:import/warnings" + ], + "rules": { + "linebreak-style": "off", + + "import/extensions": "off", + "import/no-default-export": "off", + "import/no-unresolved": "off", + "import/prefer-default-export": "off" + } +} diff --git a/javascript/resistor-color/.npmrc b/javascript/resistor-color/.npmrc new file mode 100644 index 0000000..d26df80 --- /dev/null +++ b/javascript/resistor-color/.npmrc @@ -0,0 +1 @@ +audit=false diff --git a/javascript/resistor-color/README.md b/javascript/resistor-color/README.md new file mode 100644 index 0000000..82e352c --- /dev/null +++ b/javascript/resistor-color/README.md @@ -0,0 +1,87 @@ +# Resistor Color + +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](https://en.wikipedia.org/wiki/Electronic_color_code) + +Although the color names are capitalised in the description, the function colorCode will always be called with the lowercase equivalent, e.g brown instead of Brown + + +## Setup + +Go through the setup instructions for Javascript to install the necessary +dependencies: + +[https://exercism.io/tracks/javascript/installation](https://exercism.io/tracks/javascript/installation) + +## Requirements + +Please `cd` into exercise directory before running all below commands. + +Install assignment dependencies: + +```bash +$ npm install +``` + +## Making the test suite pass + +Execute the tests with: + +```bash +$ npm test +``` + +In the test suites all tests but the first have been skipped. + +Once you get a test passing, you can enable the next one by changing `xtest` to +`test`. + + +## Submitting Solutions + +Once you have a solution ready, you can submit it using: + +```bash +exercism submit resistor-color.js +``` + +## Submitting Incomplete Solutions + +It's possible to submit an incomplete solution so you can see how others have +completed the exercise. + +## Exercise Source Credits + +Maud de Vries, Erik Schierboom [https://github.com/exercism/problem-specifications/issues/1458](https://github.com/exercism/problem-specifications/issues/1458) + diff --git a/javascript/resistor-color/babel.config.js b/javascript/resistor-color/babel.config.js new file mode 100644 index 0000000..5cec972 --- /dev/null +++ b/javascript/resistor-color/babel.config.js @@ -0,0 +1,15 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + useBuiltIns: 'entry', + corejs: 3, + }, + ], + ], + plugins: ['@babel/plugin-syntax-bigint'], +}; diff --git a/javascript/resistor-color/package.json b/javascript/resistor-color/package.json new file mode 100644 index 0000000..77652f3 --- /dev/null +++ b/javascript/resistor-color/package.json @@ -0,0 +1,37 @@ +{ + "name": "@exercism/javascript", + "description": "Exercism exercises in Javascript.", + "author": "Katrina Owen", + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/exercism/javascript" + }, + "devDependencies": { + "@babel/cli": "^7.12.10", + "@babel/core": "^7.12.10", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/preset-env": "^7.12.11", + "@types/jest": "^26.0.19", + "@types/node": "^14.14.14", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.3", + "core-js": "^3.8.1", + "eslint": "^7.15.0", + "eslint-plugin-import": "^2.22.1", + "jest": "^26.6.3" + }, + "jest": { + "modulePathIgnorePatterns": [ + "package.json" + ] + }, + "scripts": { + "test": "jest --no-cache ./*", + "watch": "jest --no-cache --watch ./*", + "lint": "eslint ." + }, + "license": "MIT", + "dependencies": {}, + "version": "1.0.0" +} diff --git a/javascript/resistor-color/resistor-color.js b/javascript/resistor-color/resistor-color.js new file mode 100644 index 0000000..735ca5d --- /dev/null +++ b/javascript/resistor-color/resistor-color.js @@ -0,0 +1,6 @@ +export const colorCode = color => COLORS.indexOf(color); + +export const COLORS = [ + "black", "brown", "red", "orange", "yellow", "green", "blue", + "violet", "grey", "white", +]; diff --git a/javascript/resistor-color/resistor-color.spec.js b/javascript/resistor-color/resistor-color.spec.js new file mode 100644 index 0000000..e403129 --- /dev/null +++ b/javascript/resistor-color/resistor-color.spec.js @@ -0,0 +1,32 @@ +import { colorCode, COLORS } from './resistor-color'; + +describe('ResistorColor', () => { + describe('Color codes', () => { + test('Black', () => { + expect(colorCode('black')).toEqual(0); + }); + + test('White', () => { + expect(colorCode('white')).toEqual(9); + }); + + test('Orange', () => { + expect(colorCode('orange')).toEqual(3); + }); + }); + + test('Colors', () => { + expect(COLORS).toEqual([ + 'black', + 'brown', + 'red', + 'orange', + 'yellow', + 'green', + 'blue', + 'violet', + 'grey', + 'white', + ]); + }); +}); -- cgit 1.4.1-2-gfad0