## DEV Community is a community of 550,319 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# JavaScript Code Daily Challenge #6

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();
});

return inputString[currentLine++];
}
``````

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

``````function getTotalX(a, b) {

}
``````
``````function main() {
const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

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

const n = parseInt(firstMultipleInput, 10);

const m = parseInt(firstMultipleInput, 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();
}
``````

## Discussion  DarkWiiPlayer

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
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
``````

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
`````` 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;
}
``````