Rep-string: Difference between revisions
Content deleted Content added
Line 3,001: | Line 3,001: | ||
=== Press any key to exit ===</pre> |
=== Press any key to exit ===</pre> |
||
=={{header|Picat}}== |
|||
<lang Picat>go => |
|||
Strings = [ |
|||
"1001110011", % 10011 |
|||
"1110111011", % 1110 |
|||
"0010010010", % 001 |
|||
"1010101010", % 1010 |
|||
"1111111111", % 11111 |
|||
"0100101101", % no solution |
|||
"0100100", % 010 |
|||
"101", % no solution |
|||
"11", % 1 |
|||
"00", % 0 |
|||
"1", % no solution |
|||
"", % no solution |
|||
"123123123123123", % 123123 |
|||
"12312312312312", % 123123 |
|||
"123123123123124", % no solution |
|||
"abcabcdabcabcdabc", % abcabcd |
|||
[1,2,3,4,1,2,3,4,1,2,3] % 1,2,3,4 |
|||
], |
|||
foreach(S in Strings) |
|||
printf("%w: ", S), |
|||
if maxrep(S,Substr,N) then |
|||
println([substr=Substr,n=N]) |
|||
else |
|||
println("no solution") |
|||
end |
|||
end, |
|||
nl. |
|||
% the largest repeating substring |
|||
maxrep(S,Substr,N) => |
|||
maxof(rep(S,Substr,N),N). |
|||
rep(S,Substr,N) => |
|||
between(1,S.length div 2, N), |
|||
Len = S.length, |
|||
Len2 = Len - (Len mod N), |
|||
Substr = slice(S,1,N), |
|||
% count the number of proper slices |
|||
SS = [1 : I in 1..N..Len2, slice(S,I,I+N-1) = Substr], |
|||
SS.length = Len div N, |
|||
% the last (truncated) slice (or []) must be a substring of Substr |
|||
Rest = slice(S,Len2+1,Len), |
|||
find(Substr,Rest,1,_). </lang> |
|||
{{out}} |
|||
<pre>1001110011: [substr = 10011,n = 5] |
|||
1110111011: [substr = 1110,n = 4] |
|||
0010010010: [substr = 001,n = 3] |
|||
1010101010: [substr = 1010,n = 4] |
|||
1111111111: [substr = 11111,n = 5] |
|||
0100101101: no solution |
|||
0100100: [substr = 010,n = 3] |
|||
101: no solution |
|||
11: [substr = 1,n = 1] |
|||
00: [substr = 0,n = 1] |
|||
1: no solution |
|||
[]: no solution |
|||
123123123123123: [substr = 123123,n = 6] |
|||
12312312312312: [substr = 123123,n = 6] |
|||
123123123123124: no solution |
|||
abcabcdabcabcdabc: [substr = abcabcd,n = 7] |
|||
[1,2,3,4,1,2,3,4,1,2,3]: [substr = [1,2,3,4],n = 4]</pre> |
|||