RosettaCodeData/Task/Rep-string/BCPL/rep-string.bcpl

51 lines
890 B
Plaintext

get "libhdr"
// Returns the length of the longest rep-string
// (0 if there are none)
let repstring(s) = valof
$( for i = s%0/2 to 1 by -1 do
$( for j = 1 to i
$( let k = i
while j+k <= s%0 do
$( unless s%(j+k)=s%j goto next
k := k + i
$)
$)
resultis i
next: loop
$)
resultis 0
$)
// Print first N characters of string
let writefirst(s, n) be
$( let x = s%0
s%0 := n
writes(s)
s%0 := x
$)
// Test string
let rep(s) be
$( let n = repstring(s)
writef("%S: ",s)
test n=0
do writes("none")
or writefirst(s,n)
wrch('*N')
$)
let start() be
$( rep("1001110011")
rep("1110111011")
rep("0010010010")
rep("1010101010")
rep("1111111111")
rep("0100101101")
rep("0100100")
rep("101")
rep("11")
rep("00")
rep("1")
$)