DEV Community

Lakshya Tyagi
Lakshya Tyagi

Posted on

6 1

JavaScript Code Daily Challenge #6

About

This is a series of JavaScript Code Daily Challenge. Each day I show a few solutions written in JavaScript. The questions are from coding practice/contest sites such as HackerRank, LeetCode, Codeforces, Atcoder and etc.

Between Two Sets
https://www.hackerrank.com/challenges/between-two-sets

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', function(inputStdin) {
    inputString += inputStdin;
});

process.stdin.on('end', function() {
    inputString = inputString.split('\n');

    main();
});

function readLine() {
    return inputString[currentLine++];
}
Enter fullscreen mode Exit fullscreen mode

Complete the 'getTotalX' function in comment.
The function is expected to return an INTEGER.

function getTotalX(a, b) {

}
Enter fullscreen mode Exit fullscreen mode
function main() {
    const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

    const firstMultipleInput = readLine().replace(/\s+$/g, '').split(' ');

    const n = parseInt(firstMultipleInput[0], 10);

    const m = parseInt(firstMultipleInput[1], 10);

    const arr = readLine().replace(/\s+$/g, '').split(' ').map(arrTemp => parseInt(arrTemp, 10));

    const brr = readLine().replace(/\s+$/g, '').split(' ').map(brrTemp => parseInt(brrTemp, 10));

    const total = getTotalX(arr, brr);

    ws.write(total + '\n');

    ws.end();
}
Enter fullscreen mode Exit fullscreen mode

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (5)

Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️ • Edited

Here's my (somewhat optimized) answer written in Lua:

Intuitively, I'd say this should run in O(n) time using O(1) memory.

local function gcd(a, b)
    return b == 0 and a or gcd(b, a%b)
end

local function lcm(a, b)
    return a * b / gcd(a, b)
end

local function fold(sequence, fn)
    local acc = sequence[1]
    for i=2,#sequence do
        acc = fn(acc, sequence[i])
    end
    return acc
end

local function getTotalX(A, B)
    local min = fold(A, lcm)
    local max = fold(B, gcd)

    local acc = 0
    for i=min,max,min do
        if (max % i) == 0 then
            acc = acc+1
        end
    end

    return acc
end
Enter fullscreen mode Exit fullscreen mode

EDIT: Here's the same algorithm but in Ruby

def getTotalX(a, b)
    min = a.inject(&:lcm)
    max = b.inject(&:gcd)

    (min..max).step(min).count{ |num| (max % num == 0)}
end
Enter fullscreen mode Exit fullscreen mode
Collapse
 
lakshyatyagi24 profile image
Lakshya Tyagi
function getTotalX(a, b) {
    let validCount = 0;

    for (let x = 1; x <= 100; x++) {
        if (a.every(int => (x % int == 0))) {
            if (b.every(int => (int % x == 0))) {
                validCount++;
            }
        }
    }

    return validCount;
}
Enter fullscreen mode Exit fullscreen mode
Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

Where'd you get the 100 from?

Collapse
 
lakshyatyagi24 profile image
Lakshya Tyagi

Open the link given in the question and check the constraints

Alt Text

Thread Thread
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

Ah, I see. Well, you can still choose a smaller number though.

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay