diff --git a/README.md b/README.md
index 54ed1daef..9708a6ab6 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,44 @@
- Use Ctrl + F or command + F to search for a snippet.
- Contributions welcome, please read [contribution guide](contributing.md).
+## Contents
+
+* [Even or odd number](even-or-odd-number.md)
+* [Greatest common divisor gcd](greatest-common-divisor-gcd.md)
+* [RGB to hexadecimal](RGB-to-hexadecimal.md)
+* [Sort characters in string alphabetical](sort-characters-in-string-alphabetical.md)
+* [Sum of array of numbers](sum-of-array-of-numbers.md)
+* [Unique values of array](unique-values-of-array.md)
+
+### Even or odd number
+
+Use `Math.abs()` to extend logic to negative numbers, check using the modulo (`%`) operator.
+Return `true` if the number is even, `false` if the number is odd.
+
+```js
+var isEven = num => Math.abs(num) % 2 === 0;
+```
+
+## Greatest common divisor (GCD)
+
+Use recursion.
+Base case is when `y` equals `0`. In this case, return `x`.
+Otherwise, return the GCD of `y` and the remainder of the division `x/y`.
+
+```js
+var gcd = (x , y) => !y ? x : gcd(y, x % y);
+```
+
+## RGB to hexadecimal
+
+Convert each value to a hexadecimal string, using `toString(16)`, then `padStart(2,'0')` to get a 2-digit hexadecimal value.
+Combine values using `join('')`.
+
+```js
+var rgbToHex = (r, g, b) =>
+ [r.toString(16).padStart(2,'0') , g.toString(16).padStart(2,'0') , b.toString(16).padStart(2,'0')].join('');
+```
+
### Sort characters in string (alphabetical)
Split the string using `split('')`, `sort()` utilizing `localeCompare()`, recombine using `join('')`.
@@ -15,6 +53,29 @@ var sortCharactersInString = str =>
str.split('').sort( (a,b) => a.localeCompare(b) ).join('');
```
+### Sum of array of numbers
+
+Use `reduce()` to add each value to an accumulator, initialized with a value of `0`.
+
+```js
+var sum = arr =>
+ arr.reduce( (acc , val) => acc + val, 0);
+```
+
+### Unique values of array
+
+Use `reduce()` to accumulate all unique values in an array.
+Check if each value has already been added, using `indexOf()` on the accumulator array.
+
+```js
+var uniqueValues = arr =>
+ arr.reduce( (acc, val) => {
+ if(acc.indexOf(val) === -1)
+ acc.push(val);
+ return acc;
+ }, []);
+```
+
## Credits
*Icons made by [Smashicons](https://www.flaticon.com/authors/smashicons) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/).*
diff --git a/scripts/builder.js b/scripts/builder.js
index 6958feffd..9100db79b 100644
--- a/scripts/builder.js
+++ b/scripts/builder.js
@@ -27,6 +27,9 @@ catch (err){
try {
output += `${startPart+'\n'}`;
+ for(var snippet of Object.entries(snippets))
+ output += `* [${snippet[0][0].toUpperCase() + snippet[0].replace(/-/g,' ').slice(1,snippet[0].length-3)}](${snippet[0]})\n`
+ output += '\n';
for(var snippet of Object.entries(snippets))
output += `${snippet[1]+'\n'}`;
output += `${endPart+'\n'}`;
diff --git a/snippets/RGB-to-hexadecimal.md b/snippets/RGB-to-hexadecimal.md
new file mode 100644
index 000000000..3e53fc25d
--- /dev/null
+++ b/snippets/RGB-to-hexadecimal.md
@@ -0,0 +1,9 @@
+## RGB to hexadecimal
+
+Convert each value to a hexadecimal string, using `toString(16)`, then `padStart(2,'0')` to get a 2-digit hexadecimal value.
+Combine values using `join('')`.
+
+```js
+var rgbToHex = (r, g, b) =>
+ [r.toString(16).padStart(2,'0') , g.toString(16).padStart(2,'0') , b.toString(16).padStart(2,'0')].join('');
+```
diff --git a/snippets/even-or-odd-number.md b/snippets/even-or-odd-number.md
new file mode 100644
index 000000000..1745c5e24
--- /dev/null
+++ b/snippets/even-or-odd-number.md
@@ -0,0 +1,8 @@
+### Even or odd number
+
+Use `Math.abs()` to extend logic to negative numbers, check using the modulo (`%`) operator.
+Return `true` if the number is even, `false` if the number is odd.
+
+```js
+var isEven = num => Math.abs(num) % 2 === 0;
+```
diff --git a/snippets/greatest-common-divisor-gcd.md b/snippets/greatest-common-divisor-gcd.md
new file mode 100644
index 000000000..1a4b8a1e7
--- /dev/null
+++ b/snippets/greatest-common-divisor-gcd.md
@@ -0,0 +1,9 @@
+## Greatest common divisor (GCD)
+
+Use recursion.
+Base case is when `y` equals `0`. In this case, return `x`.
+Otherwise, return the GCD of `y` and the remainder of the division `x/y`.
+
+```js
+var gcd = (x , y) => !y ? x : gcd(y, x % y);
+```
diff --git a/snippets/sort-characters-in-string.md b/snippets/sort-characters-in-string-alphabetical.md
similarity index 100%
rename from snippets/sort-characters-in-string.md
rename to snippets/sort-characters-in-string-alphabetical.md
diff --git a/snippets/sum-of-array-of-numbers.md b/snippets/sum-of-array-of-numbers.md
new file mode 100644
index 000000000..22d202550
--- /dev/null
+++ b/snippets/sum-of-array-of-numbers.md
@@ -0,0 +1,8 @@
+### Sum of array of numbers
+
+Use `reduce()` to add each value to an accumulator, initialized with a value of `0`.
+
+```js
+var sum = arr =>
+ arr.reduce( (acc , val) => acc + val, 0);
+```
diff --git a/snippets/unique-values-of-array.md b/snippets/unique-values-of-array.md
new file mode 100644
index 000000000..d00c7f112
--- /dev/null
+++ b/snippets/unique-values-of-array.md
@@ -0,0 +1,13 @@
+### Unique values of array
+
+Use `reduce()` to accumulate all unique values in an array.
+Check if each value has already been added, using `indexOf()` on the accumulator array.
+
+```js
+var uniqueValues = arr =>
+ arr.reduce( (acc, val) => {
+ if(acc.indexOf(val) === -1)
+ acc.push(val);
+ return acc;
+ }, []);
+```
diff --git a/static-parts/README-start.md b/static-parts/README-start.md
index 835f73882..d4cefebea 100644
--- a/static-parts/README-start.md
+++ b/static-parts/README-start.md
@@ -5,3 +5,5 @@
- Use Ctrl + F or command + F to search for a snippet.
- Contributions welcome, please read [contribution guide](contributing.md).
+
+## Contents