import scala.util.matching.Regex
def isBinary(s: String): Boolean = {
val binary: Regex = "^[01]+$".r
binary.matches(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
*/
def divisibleBy7(s: String): Boolean = {
var remainder = 0
for (c <- s) {
remainder = (remainder * 2 + (c - '0')) % 7
}
remainder == 0
}
@main def main(): Unit = {
val s = "00011100" // 28
if (!isBinary(s)) {
println("Not a binary string")
return
}
if (divisibleBy7(s)) {
println("Divisible by 7")
} else {
println("Not divisible by 7")
}
}
/*
run:
Divisible by 7
*/