home *** CD-ROM | disk | FTP | other *** search
- #
- # M E A N D E R I N G S T R I N G S
- #
-
- # This main procedure accepts specifications for meandering strings
- # from standard input with the alphabet separated from the length by
- # a colon.
-
- procedure main()
- local line, alpha, n
- while line := read() do {
- line ? if alpha := tab(upto(':')) then {
- move(1)
- if n := integer(tab(0)) then write(meander(alpha,n))
- else write("erroneous input")
- }
- else write("erroneous input")
- }
- end
-
- procedure meander(alpha,n)
- local result, t, i, c, k
- i := k := *alpha
- t := n-1
- result := repl(alpha[1],t)
- while c := alpha[i] do {
- if find(result[-t:0] || c,result)
- then i -:= 1
- else {result ||:= c; i := k}
- }
- return result
- end
-