summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndinus <andinus@nand.sh>2021-08-27 09:36:49 +0530
committerAndinus <andinus@nand.sh>2021-08-27 09:36:49 +0530
commit346da9a7e08af19141a791978b3650bb150eafb0 (patch)
treec680fc4c2d30a0f5b35a64acb06f5ed4678a148e
parent16f7aba7ef1b48d940bca66adb59d10527b885e8 (diff)
downloadexercism-346da9a7e08af19141a791978b3650bb150eafb0.tar.gz
JS: Solve resistor-color exercise
-rw-r--r--javascript/resistor-color/.eslintrc29
-rw-r--r--javascript/resistor-color/.npmrc1
-rw-r--r--javascript/resistor-color/README.md87
-rw-r--r--javascript/resistor-color/babel.config.js15
-rw-r--r--javascript/resistor-color/package.json37
-rw-r--r--javascript/resistor-color/resistor-color.js6
-rw-r--r--javascript/resistor-color/resistor-color.spec.js32
7 files changed, 207 insertions, 0 deletions
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',
+    ]);
+  });
+});