// Check if a string contains only '0' and '1'
function isBinary(s) {
const binary = /^[01]+$/;
return binary.test(s);
}
/*
In decimal: reading "123" means
remainder = remainder * 10 + digit
In binary: reading "1011" means
remainder = remainder * 2 + bit
*/
/*
0 (0*2 + 0) % 7 0
0 (0*2 + 0) % 7 0
0 (0*2 + 0) % 7 0
1 (0*2 + 1) % 7 1
1 (1*2 + 1) % 7 3
1 (3*2 + 1) % 7 0
0 (0*2 + 0) % 7 0
0 (0*2 + 0) % 7 0
*/
// Compute binary string modulo 7 without overflow
function divisibleBy7(s) {
let remainder = 0;
for (const c of s) {
remainder = (remainder * 2 + (c.charCodeAt(0) - '0'.charCodeAt(0))) % 7;
}
return remainder === 0;
}
function main() {
const s = "00011100"; // 28
if (!isBinary(s)) {
console.log("Not a binary string");
return;
}
if (divisibleBy7(s)) {
console.log("Divisible by 7");
} else {
console.log("Not divisible by 7");
}
}
main();
/*
run:
Divisible by 7
*/