diff --git a/.travis/push.sh b/.travis/push.sh index 2f7ce8d71..277140235 100755 --- a/.travis/push.sh +++ b/.travis/push.sh @@ -12,6 +12,7 @@ commit_website_files() { } upload_files() { + echo "https://${GH_TOKEN}@github.com/Chalarangelo/30-seconds-of-code.git" git push --force "https://${GH_TOKEN}@github.com/Chalarangelo/30-seconds-of-code.git" master > /dev/null 2>&1 } diff --git a/README.md b/README.md index 96dfe3c60..abb50682e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ ### Array * [`arrayGcd`](#arraygcd) +* [`arrayLcm`](#arraylcm) * [`arrayMax`](#arraymax) * [`arrayMin`](#arraymin) * [`chunk`](#chunk) @@ -150,6 +151,7 @@ * [`isSymbol`](#issymbol) * [`RGBToHex`](#rgbtohex) * [`timeTaken`](#timetaken) +* [`toDecimalMark`](#todecimalmark) * [`toOrdinalSuffix`](#toordinalsuffix) * [`UUIDGenerator`](#uuidgenerator) * [`validateEmail`](#validateemail) @@ -174,6 +176,24 @@ const arrayGcd = arr =>{ [⬆ back to top](#table-of-contents) +### arrayLcm + +Calculates the lowest common multiple (lcm) of an array of numbers. + +Use `Array.reduce()` and the `lcm` formula (uses recursion) to calculate the lowest common multiple of an array of numbers. + +```js +const arrayLcm = arr =>{ + const gcd = (x, y) => !y ? x : gcd(y, x % y); + const lcm = (x, y) => (x*y)/gcd(x, y) + return arr.reduce((a,b) => lcm(a,b)); +} +// arrayLcm([1,2,3,4,5]) -> 60 +// arrayLcm([4,8,12]) -> 24 +``` + +[⬆ back to top](#table-of-contents) + ### arrayMax Returns the maximum value in an array. @@ -2091,6 +2111,26 @@ const timeTaken = callback => { [⬆ back to top](#table-of-contents) +### toDecimalMark + +Convert a float-point arithmetic to the [Decimal mark](https://en.wikipedia.org/wiki/Decimal_mark) form. + +Use `toString()` to convert the float `num` to a string, then use regex to separate every three characters of the integer part with a comma. + + ```js +const toDecimalMark = (num) => { + let cleanNum = num.toString().split('').filter(n => '0123456789.'.includes(n)).join('') + let wholeNum = cleanNum.split('.')[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + let decNum = `.${cleanNum.split('.')[1]}` + return wholeNum + decNum; +} +// toDecimalMark(12305030388.9087) //-> '12,305,030,388.9087' +// toDecimalMark(123.889087e2) //-> '12,388.9087' +// toDecimalMark('12305abc030388.9087') // -> '12,305,030,388.9087' +``` + +[⬆ back to top](#table-of-contents) + ### toOrdinalSuffix Adds an ordinal suffix to a number. diff --git a/docs/index.html b/docs/index.html index 0423fcd3e..ef88e9600 100644 --- a/docs/index.html +++ b/docs/index.html @@ -43,6 +43,7 @@

Array

arrayGcd +arrayLcm arrayMax arrayMin chunk @@ -181,6 +182,7 @@ isSymbol RGBToHex timeTaken +toDecimalMark toOrdinalSuffix UUIDGenerator validateEmail @@ -197,6 +199,17 @@ // arrayGcd([1,2,3,4,5]) -> 1 // arrayGcd([4,8,12]) -> 4 +

arrayLcm

+

Calculates the lowest common multiple (lcm) of an array of numbers.

+

Use Array.reduce() and the lcm formula (uses recursion) to calculate the lowest common multiple of an array of numbers.

+
const arrayLcm = arr =>{
+  const gcd = (x, y) => !y ? x : gcd(y, x % y);
+  const lcm = (x, y) => (x*y)/gcd(x, y) 
+  return arr.reduce((a,b) => lcm(a,b));
+}
+// arrayLcm([1,2,3,4,5]) -> 60
+// arrayLcm([4,8,12]) -> 24
+

arrayMax

Returns the maximum value in an array.

Use Math.max() combined with the spread operator (...) to get the maximum value in the array.

@@ -1270,6 +1283,19 @@ Omit the second argument to use the default regex.

// timeTaken(() => Math.pow(2, 10)) -> 1024 // (logged): timeTaken: 0.02099609375ms +

toDecimalMark

+

Convert a float-point arithmetic to the Decimal mark form.

+

Use toString() to convert the float num to a string, then use regex to separate every three characters of the integer part with a comma.

+
const toDecimalMark = (num) => {
+ let cleanNum = num.toString().split('').filter(n => '0123456789.'.includes(n)).join('') 
+ let wholeNum = cleanNum.split('.')[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")
+ let decNum = `.${cleanNum.split('.')[1]}`
+ return wholeNum + decNum;
+}
+// toDecimalMark(12305030388.9087) //-> '12,305,030,388.9087'
+// toDecimalMark(123.889087e2) //-> '12,388.9087'
+// toDecimalMark('12305abc030388.9087') // -> '12,305,030,388.9087'
+

toOrdinalSuffix

Adds an ordinal suffix to a number.

Use the modulo operator (%) to find values of single and tens digits. diff --git a/snippets/arrayLcm.md b/snippets/arrayLcm.md new file mode 100644 index 000000000..5439d5924 --- /dev/null +++ b/snippets/arrayLcm.md @@ -0,0 +1,15 @@ +### arrayLcm + +Calculates the lowest common multiple (lcm) of an array of numbers. + +Use `Array.reduce()` and the `lcm` formula (uses recursion) to calculate the lowest common multiple of an array of numbers. + +```js +const arrayLcm = arr =>{ + const gcd = (x, y) => !y ? x : gcd(y, x % y); + const lcm = (x, y) => (x*y)/gcd(x, y) + return arr.reduce((a,b) => lcm(a,b)); +} +// arrayLcm([1,2,3,4,5]) -> 60 +// arrayLcm([4,8,12]) -> 24 +``` diff --git a/tag_database b/tag_database index 2571d8868..6e965bf45 100644 --- a/tag_database +++ b/tag_database @@ -1,6 +1,7 @@ anagrams:string arrayAverage:math arrayGcd:array +arrayLcm:array arrayMax:array arrayMin:array arraySum:math