Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 1. largeSum
- * */
- const largeSum = (a, b, limit) => {
- if (
- typeof a !== "number" ||
- typeof b !== "number" ||
- typeof limit !== "number"
- )
- throw new Error(
- "Input values should be number. Exptected for @a: number, @b: number, @limit: number"
- );
- let sum = 0;
- for (let i = 1; a * i < limit || b * i < limit; i++) {
- const _a = a * i;
- const _b = b * i;
- if (_a < limit) {
- sum += _a;
- }
- if (_b < limit && _b % a !== 0) {
- sum += _b;
- }
- }
- return sum;
- };
- /*
- * 2. sequence
- * */
- const isEven = n => !(n % 2);
- const f = num => {
- if (isEven(num)) {
- return num / 2;
- } else {
- return 1 + 3 * num;
- }
- };
- const a = num => {
- if (typeof num !== "number") throw new Error("@n param should be a number");
- const seq = [num];
- while (seq[seq.length - 1] !== 1) {
- seq.push(f(seq[seq.length - 1]));
- }
- return seq.reduce((acc, val) => acc + val);
- };
- /*
- * 3. countLeapDays
- * */
- const hasLeapDay = year => !(year % 400) || (!(year % 4) && !!(year % 100));
- const getLeapDay = year => new Date(`Feb 29, ${year}`).getDay();
- const countLeapDays = (start, end) => {
- if (
- start > end ||
- typeof start !== "number" ||
- (end && typeof end !== "number")
- ) {
- throw new Error("Please, provide valide time range");
- }
- const dayRow = [
- "Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Answer"
- ];
- const dayMap = {
- Sunday: 0,
- Monday: 0,
- Tuesday: 0,
- Wednesday: 0,
- Thursday: 0,
- Friday: 0,
- Saturday: 0
- };
- const leapYears = [];
- if (!end) {
- return dayRow[getLeapDay(start)];
- }
- for (let year = start; year < end; year++) {
- if (hasLeapDay(year)) {
- leapYears.push(year);
- }
- }
- if (leapYears.length) {
- leapYears.forEach(year => {
- return year && (dayMap[dayRow[getLeapDay(year)]] += 1);
- });
- }
- return dayMap;
- };
- const logSuccess = (values, result) =>
- console.log("✅ Test passed: " + values + " : " + result);
- const logFailure = (values, result, exp) =>
- console.error(
- "❌ Test failed: " + values + " : " + result + ". Expected:" + exp
- );
- /* 1. */
- const test1 = largeSum.call(null, 5, 7, 40);
- const test2 = largeSum.call(null, 5, 7, 1000000);
- const test3 = largeSum.call(null, 5, 7, 21);
- const expectedResult1 = 210;
- const expectedResult2 = 157142642861;
- const expectedResult3 = 71;
- /* 2. */
- const test2_1 = a.call(null, 3);
- const test2_2 = a.call(null, 9);
- const test2_3 = a.call(null, 6171);
- const expectedResult2_1 = 49;
- const expectedResult2_2 = 339;
- const expectedResult2_3 = 12152173;
- /* 3. */
- const test3_1 = countLeapDays.call(null, 1940);
- const test3_2 = countLeapDays.call(null, 2000);
- const test3_3 = countLeapDays.call(null, 1900, 2000);
- const expectedResult3_1 = "Thursday";
- const expectedResult3_2 = "Tuesday";
- const expectedResult3_3 = {
- Sunday: 3,
- Monday: 4,
- Tuesday: 3,
- Wednesday: 3,
- Thursday: 4,
- Friday: 3,
- Saturday: 4
- };
- /*TESTS:
- * */
- console.info("Running test 1...");
- (test1 === expectedResult1 ? logSuccess : logFailure)(
- "5, 7, 40",
- test1,
- expectedResult1
- );
- (test2 === expectedResult2 ? logSuccess : logFailure)(
- "5, 7, 1000000",
- test2,
- expectedResult2
- );
- (test3 === expectedResult3 ? logSuccess : logFailure)(
- "5, 7, 21",
- test3,
- expectedResult3
- );
- console.info("Running test 2...");
- (test2_1 === expectedResult2_1 ? logSuccess : logFailure)(
- "3",
- test2_1,
- expectedResult2_1
- );
- (test2_2 === expectedResult2_2 ? logSuccess : logFailure)(
- "9",
- test2_2,
- expectedResult2_2
- );
- (test2_3 === expectedResult2_3 ? logSuccess : logFailure)(
- "6171",
- test2_3,
- expectedResult2_3
- );
- console.info("Running test 3...");
- (test3_1 === expectedResult3_1 ? logSuccess : logFailure)(
- "1940",
- test3_1,
- expectedResult3_1
- );
- (test3_2 === expectedResult3_2 ? logSuccess : logFailure)(
- "2000",
- test3_2,
- expectedResult3_2
- );
- (JSON.stringify(test3_3) === JSON.stringify(expectedResult3_3)
- ? logSuccess
- : logFailure)(
- `{
- Sunday: 3,
- Monday: 4,
- Tuesday: 3,
- Wednesday: 3,
- Thursday: 4,
- Friday: 3,
- Saturday: 4
- }`,
- JSON.stringify(test3_3),
- expectedResult3_3
- );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement