diff --git a/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/largest-int-from-concatenated-ints.md b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/largest-int-from-concatenated-ints.md
new file mode 100644
index 0000000000..e5ff62546f
--- /dev/null
+++ b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/largest-int-from-concatenated-ints.md
@@ -0,0 +1,74 @@
+---
+id: 5a23c84252665b21eecc7edb
+title: Largest int from concatenated ints
+challengeType: 5
+---
+
+## Description
+
+Given a set of positive integers, write a function to order the integers in such a way that the concatenation of the numbers forms the largest possible integer and return this integer.
+
+
+## Instructions
+
+
+## Tests
+
+
+``` yml
+tests:
+ - text: maxCombine
should be a function.
+ testString: assert(typeof maxCombine == 'function', 'maxCombine
should be a function.');
+ - text: maxCombine([1, 3, 3, 4, 55])
should return a number.
+ testString: assert(typeof maxCombine([1, 3, 3, 4, 55]) == 'number', 'maxCombine([1, 3, 3, 4, 55])
should return a number.');
+ - text: maxCombine([1, 3, 3, 4, 55])
should return 554331
.
+ testString: assert.equal(maxCombine([1, 3, 3, 4, 55]), 554331, 'maxCombine([1, 3, 3, 4, 55])
should return 554331
.');
+ - text: maxCombine([71, 45, 23, 4, 5])
should return 71545423
.
+ testString: assert.equal(maxCombine([71, 45, 23, 4, 5]), 71545423, 'maxCombine([71, 45, 23, 4, 5])
should return 71545423
.');
+ - text: maxCombine([14, 43, 53, 114, 55])
should return 55534314114
.
+ testString: assert.equal(maxCombine([14, 43, 53, 114, 55]), 55534314114, 'maxCombine([14, 43, 53, 114, 55])
should return 55534314114
.');
+ - text: maxCombine([1, 34, 3, 98, 9, 76, 45, 4])
should return 998764543431
.
+ testString: assert.equal(maxCombine([1, 34, 3, 98, 9, 76, 45, 4]), 998764543431, 'maxCombine([1, 34, 3, 98, 9, 76, 45, 4])
should return 998764543431
.');
+ - text: maxCombine([54, 546, 548, 60])
should return 6054854654
.
+ testString: assert.equal(maxCombine([54, 546, 548, 60]), 6054854654, 'maxCombine([54, 546, 548, 60])
should return 6054854654
.');
+```
+
+
+
+## Challenge Seed
+
+
+
+```js
+function maxCombine(xs) {
+ // Good luck!
+}
+```
+
+
+
+
+## Solution
+
+
+```js
+function maxCombine (xs) {
+ return parseInt(
+ xs.sort(
+ function (x, y) {
+ var a = x.toString(),
+ b = y.toString(),
+ ab = parseInt(a + b),
+ ba = parseInt(b + a);
+
+ return ab > ba ? -1 : (ab < ba ? 1 : 0);
+ }
+ )
+ .join(''), 10
+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/last-friday-of-each-month.md b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/last-friday-of-each-month.md
new file mode 100644
index 0000000000..59541adbde
--- /dev/null
+++ b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/last-friday-of-each-month.md
@@ -0,0 +1,76 @@
+---
+id: 5a23c84252665b21eecc7edc
+title: Last Friday of each month
+challengeType: 5
+---
+
+## Description
+
+Write a function that returns the date of the last Friday of a given month for a given year.
+
+
+## Instructions
+
+
+## Tests
+
+
+``` yml
+tests:
+ - text: lastFriday
should be a function.
+ testString: assert(typeof lastFriday == 'function', 'lastFriday
should be a function.');
+ - text: lastFriday(2018, 1)
should return a number.
+ testString: assert(typeof lastFriday(2018, 1) == 'number', 'lastFriday(2018, 1)
should return a number.');
+ - text: lastFriday(2018, 1)
should return 26
.
+ testString: assert.equal(lastFriday(2018, 1), 26, 'lastFriday(2018, 1)
should return 26
.');
+ - text: lastFriday(2017, 2)
should return 24
.
+ testString: assert.equal(lastFriday(2017, 2), 24, 'lastFriday(2017, 2)
should return 24
.');
+ - text: lastFriday(2012, 3)
should return 30
.
+ testString: assert.equal(lastFriday(2012, 3), 30, 'lastFriday(2012, 3)
should return 30
.');
+ - text: lastFriday(1900, 4)
should return 27
.
+ testString: assert.equal(lastFriday(1900, 4), 27, 'lastFriday(1900, 4)
should return 27
.');
+ - text: lastFriday(2000, 5)
should return 26
.
+ testString: assert.equal(lastFriday(2000, 5), 26, 'lastFriday(2000, 5)
should return 26
.');
+ - text: lastFriday(2006, 6)
should return 30
.
+ testString: assert.equal(lastFriday(2006, 6), 30, 'lastFriday(2006, 6)
should return 30
.');
+ - text: lastFriday(2010, 7)
should return 30
.
+ testString: assert.equal(lastFriday(2010, 7), 30, 'lastFriday(2010, 7)
should return 30
.');
+ - text: lastFriday(2005, 8)
should return 26
.
+ testString: assert.equal(lastFriday(2005, 8), 26, 'lastFriday(2005, 8)
should return 26
.');
+```
+
+
+
+## Challenge Seed
+
+
+
+```js
+function lastFriday(year, month) {
+ // Good luck!
+}
+```
+
+
+
+
+## Solution
+
+
+```js
+function lastFriday (year, month) {
+ var i, last_day;
+ i = 0;
+ while (true) {
+ last_day = new Date(year, month, i);
+ if (last_day.getDay() === 5) {
+ return last_day.getDate();
+ }
+ i -= 1;
+ }
+};
+```
+
+
\ No newline at end of file
diff --git a/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/leap-year.md b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/leap-year.md
new file mode 100644
index 0000000000..2f65c66203
--- /dev/null
+++ b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/leap-year.md
@@ -0,0 +1,64 @@
+---
+id: 5a23c84252665b21eecc7ede
+title: Leap year
+challengeType: 5
+---
+
+## Description
+
+Determine whether a given year is a leap year in the Gregorian calendar.
+
+
+## Instructions
+
+
+## Tests
+
+
+``` yml
+tests:
+ - text: isLeapYear
should be a function.
+ testString: assert(typeof isLeapYear == 'function', 'isLeapYear
should be a function.');
+ - text: isLeapYear()
should return a boolean.
+ testString: assert(typeof isLeapYear(2018) == 'boolean', 'isLeapYear()
should return a boolean.');
+ - text: isLeapYear(2018)
should return false
.
+ testString: assert.equal(isLeapYear(2018), false, 'isLeapYear(2018)
should return false
.');
+ - text: isLeapYear(2016)
should return true
.
+ testString: assert.equal(isLeapYear(2016), true, 'isLeapYear(2016)
should return true
.');
+ - text: isLeapYear(2000)
should return true
.
+ testString: assert.equal(isLeapYear(2000), true, 'isLeapYear(2000)
should return true
.');
+ - text: isLeapYear(1900)
should return false
.
+ testString: assert.equal(isLeapYear(1900), false, 'isLeapYear(1900)
should return false
.');
+ - text: isLeapYear(1996)
should return true
.
+ testString: assert.equal(isLeapYear(1996), true, 'isLeapYear(1996)
should return true
.');
+ - text: isLeapYear(1800)
should return false
.
+ testString: assert.equal(isLeapYear(1800), false, 'isLeapYear(1800)
should return false
.');
+```
+
+
+
+## Challenge Seed
+
+
+
+```js
+function isLeapYear(year) {
+ // Good luck!
+}
+```
+
+
+
+
+## Solution
+
+
+```js
+function isLeapYear (year) {
+ return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0);
+};
+```
+
+
\ No newline at end of file
diff --git a/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/least-common-multiple.md b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/least-common-multiple.md
new file mode 100644
index 0000000000..e4d5031f28
--- /dev/null
+++ b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/least-common-multiple.md
@@ -0,0 +1,72 @@
+---
+id: 5a23c84252665b21eecc7edf
+title: Least common multiple
+challengeType: 5
+---
+
+## Description
+
+The least common multiple of 12 and 18 is 36, because 12 is a factor (12 × 3 = 36), and 18 is a factor (18 × 2 = 36), and there is no positive integer less than 36 that has both factors. As a special case, if either m or n is zero, then the least common multiple is zero.
+One way to calculate the least common multiple is to iterate all the multiples of m, until you find one that is also a multiple of n.
+If you already have gcd for greatest common divisor, then this formula calculates lcm.
+\( \operatorname{lcm}(m, n) = \frac{|m \times n|}{\operatorname{gcd}(m, n)} \)
+
+
+## Instructions
+
+Compute the least common multiple of an array of intergers.
+Given m and n, the least common multiple is the smallest positive integer that has both m and n as factors.
+
+
+## Tests
+
+
+``` yml
+tests:
+ - text: LCM
should be a function.
+ testString: assert(typeof LCM == 'function', 'LCM
should be a function.');
+ - text: LCM([2, 4, 8])
should return a number.
+ testString: assert(typeof LCM([2, 4, 8]) == 'number', 'LCM([2, 4, 8])
should return a number.');
+ - text: LCM([2, 4, 8])
should return 8
.
+ testString: assert.equal(LCM([2, 4, 8]), 8, 'LCM([2, 4, 8])
should return 8
.');
+ - text: LCM([4, 8, 12])
should return 24
.
+ testString: assert.equal(LCM([4, 8, 12]), 24, 'LCM([4, 8, 12])
should return 24
.');
+ - text: LCM([3, 4, 5, 12, 40])
should return 120
.
+ testString: assert.equal(LCM([3, 4, 5, 12, 40]), 120, 'LCM([3, 4, 5, 12, 40])
should return 120
.');
+ - text: LCM([11, 33, 90])
should return 990
.
+ testString: assert.equal(LCM([11, 33, 90]), 990, 'LCM([11, 33, 90])
should return 990
.');
+ - text: LCM([-50, 25, -45, -18, 90, 447])
should return 67050
.
+ testString: assert.equal(LCM([-50, 25, -45, -18, 90, 447]), 67050, 'LCM([-50, 25, -45, -18, 90, 447])
should return 67050
.');
+```
+
+
+
+## Challenge Seed
+
+
+
+```js
+function LCM(A) {
+ // Good luck!
+}
+```
+
+
+
+
+## Solution
+
+
+```js
+function LCM (A) {
+ var n = A.length, a = Math.abs(A[0]);
+ for (var i = 1; i < n; i++)
+ { var b = Math.abs(A[i]), c = a;
+ while (a && b){ a > b ? a %= b : b %= a; }
+ a = Math.abs(c*A[i])/(a+b);
+ }
+ return a;
+}
+```
+
+
\ No newline at end of file
diff --git a/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/left-factorials.md b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/left-factorials.md
new file mode 100644
index 0000000000..572bb426dd
--- /dev/null
+++ b/curriculum/challenges/english/08-coding-interview-prep/rosetta-code/left-factorials.md
@@ -0,0 +1,89 @@
+---
+id: 5a23c84252665b21eecc7ee0
+title: Left factorials
+challengeType: 5
+---
+
+## Description
+
+Left factorials, $ !n $, may refer to either subfactorials or to factorial sums. The same notation can be confusingly seen used for the two different definitions. Sometimes, subfactorials (also known as derangements) may use any of the notations:
+
+(It may not be visually obvious, but the last example uses an upside-down exclamation mark.) This task will be using this formula for left factorial:
+$ !n = \sum_{k=0}^{n-1} k! $
+where $!0 = 0$
+
+
+## Instructions
+
+Write a function to calculate the left factorial of a given number.
+
+
+## Tests
+
+
+``` yml
+tests:
+ - text: leftFactorial
should be a function.
+ testString: assert(typeof leftFactorial == 'function', 'leftFactorial
should be a function.');
+ - text: leftFactorial(0)
should return a number.
+ testString: assert(typeof leftFactorial(0) == 'number', 'leftFactorial(0)
should return a number.');
+ - text: leftFactorial(0)
should return 0
.
+ testString: assert.equal(leftFactorial(0), 0, 'leftFactorial(0)
should return 0
.');
+ - text: leftFactorial(1)
should return 1
.
+ testString: assert.equal(leftFactorial(1), 1, 'leftFactorial(1)
should return 1
.');
+ - text: leftFactorial(2)
should return 2
.
+ testString: assert.equal(leftFactorial(2), 2, 'leftFactorial(2)
should return 2
.');
+ - text: leftFactorial(3)
should return 4
.
+ testString: assert.equal(leftFactorial(3), 4, 'leftFactorial(3)
should return 4
.');
+ - text: leftFactorial(10)
should return 409114
.
+ testString: assert.equal(leftFactorial(10), 409114, 'leftFactorial(10)
should return 409114
.');
+ - text: leftFactorial(17)
should return 22324392524314
.
+ testString: assert.equal(leftFactorial(17), 22324392524314, 'leftFactorial(17)
should return 22324392524314
.');
+ - text: leftFactorial(19)
should return 6780385526348314
.
+ testString: assert.equal(leftFactorial(19), 6780385526348314, 'leftFactorial(19)
should return 6780385526348314
.');
+```
+
+
+
+## Challenge Seed
+
+
+
+```js
+function leftFactorial(n) {
+ // Good luck!
+}
+```
+
+
+
+
+## Solution
+
+
+```js
+function leftFactorial(n) {
+ if (n == 0)
+ return 0
+ if (n == 1)
+ return 1;
+
+ // Note: for n>=20, the result may not be correct.
+ // This is because Javascript uses 53 bit integers and
+ // for n>=20 result becomes too large.
+
+ let res = 2, fact = 2;
+ for (var i = 2; i < n; i++) {
+ res += fact;
+ fact *= (i + 1);
+ }
+
+ return res;
+}
+```
+
+
\ No newline at end of file