37 lines
812 B
Plaintext
37 lines
812 B
Plaintext
import "./fmt" for Fmt
|
|
|
|
var repString = Fn.new { |s|
|
|
var reps = []
|
|
if (s.count < 2) return reps
|
|
for (c in s) if (c != "0" && c != "1") Fiber.abort("Argument is not a binary string.")
|
|
var size = s.count
|
|
for (len in 1..(size/2).floor) {
|
|
var t = s[0...len]
|
|
var n = (size/len).floor
|
|
var r = size % len
|
|
var u = t * n + t[0...r]
|
|
if (u == s) reps.add(t)
|
|
}
|
|
return reps
|
|
}
|
|
|
|
var strings = [
|
|
"1001110011",
|
|
"1110111011",
|
|
"0010010010",
|
|
"1010101010",
|
|
"1111111111",
|
|
"0100101101",
|
|
"0100100",
|
|
"101",
|
|
"11",
|
|
"00",
|
|
"1"
|
|
]
|
|
System.print("The (longest) rep-strings are:\n")
|
|
for (s in strings) {
|
|
var reps = repString.call(s)
|
|
var t = (reps.count > 0) ? reps[-1] : "Not a rep-string"
|
|
Fmt.print("$10s -> $s", s, t)
|
|
}
|