const calculateClapsFromZero = (n) => {
if (n <= 0) return 0;
let res = 0;
for (const i of [3, 6, 9]) {
let count = 0;
let factor = 1;
while (factor <= n) {
const h = Math.floor(n / (factor * 10));
const cur = Math.floor((n / factor) % 10);
const l = n % factor;
count += h * factor;
if (cur > i) count += factor;
else if (cur === i) count += l + 1;
factor *= 10;
}
res += count;
}
return res;
};
// Solution 1: BigO(logN)
const totalClaps = (numbers) => {
const arr = numbers.trim().split(" ");
if (arr.length != 2) return 0;
const a = parseInt(arr[0]);
const b = parseInt(arr[1]);
if (a > b) return 0;
return calculateClapsFromZero(b) - calculateClapsFromZero(a - 1);
};
console.log(totalClaps("999999 10000000")); // Expected: 19200006
console.log(totalClaps("1 10")); // Expected: 3
console.log(totalClaps("3 6")); // Expected: 2
console.log(totalClaps("8 8")); // Expected: 0
console.log(totalClaps("33 33")); // Expected: 2
console.log(totalClaps("333 333")); // Expected: 3
console.log(totalClaps("30 40")); // Expected: 13
console.log(totalClaps("1 100")); // Expected: 60
console.log(totalClaps("100 100")); // Expected: 0
console.log(totalClaps("300 309")); // Expected: 13
console.log(totalClaps("200 300")); // Expected: 61
console.log(totalClaps("200 300 0")); // Expected: 0 - Wrong input format
console.log(totalClaps("300 20")); // Expected: 0 - Wrong input format (a > b)