Longest common suffix: Difference between revisions
Content added Content deleted
(Ada version) |
Not a robot (talk | contribs) (Add Cowgol) |
||
Line 794: | Line 794: | ||
[`suffix` ] -> `suffix` |
[`suffix` ] -> `suffix` |
||
[`` ] -> ``</pre> |
[`` ] -> ``</pre> |
||
=={{header|Cowgol}}== |
|||
<lang cowgol>include "cowgol.coh"; |
|||
include "strings.coh"; |
|||
sub lcs(arr: [[uint8]], len: intptr): (s: [uint8]) is |
|||
if len == 0 then |
|||
s := ""; |
|||
return; |
|||
elseif len == 1 then |
|||
s := [arr]; |
|||
return; |
|||
end if; |
|||
s := [arr]; |
|||
var slen := StrLen(s); |
|||
s := s + slen; |
|||
arr := @next arr; |
|||
len := len - 1; |
|||
while len > 0 and slen > 0 loop |
|||
var c := [arr]; |
|||
var clen := StrLen(c); |
|||
c := c + clen; |
|||
if clen > slen then |
|||
clen := slen; |
|||
end if; |
|||
while clen > 0 and [c] == [s] loop |
|||
c := @prev c; |
|||
s := @prev s; |
|||
clen := clen - 1; |
|||
end loop; |
|||
slen := StrLen(s); |
|||
s := s + slen; |
|||
arr := @next arr; |
|||
len := len - 1; |
|||
end loop; |
|||
s := s - slen + 1; |
|||
end sub; |
|||
sub test(arr: [[uint8]], len: intptr) is |
|||
var s := arr; |
|||
var l := len; |
|||
print_char('['); |
|||
while l > 0 loop |
|||
print_char('"'); |
|||
print([s]); |
|||
print_char('"'); |
|||
s := @next s; |
|||
l := l - 1; |
|||
if l > 0 then |
|||
print(", "); |
|||
end if; |
|||
end loop; |
|||
print("] -> `"); |
|||
print(lcs(arr, len)); |
|||
print("`\n"); |
|||
end sub; |
|||
var test1: [uint8][] := {"baabababc", "baabc", "bbbabc"}; |
|||
var test2: [uint8][] := {"baabababc", "baabc", "bbbazc"}; |
|||
var test3: [uint8][] := |
|||
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", |
|||
"Friday", "Saturday"}; |
|||
var test4: [uint8][] := {"longest", "common", "suffix"}; |
|||
var test5: [uint8][] := {""}; |
|||
var test6: [uint8][] := {}; |
|||
test(&test1[0], @sizeof test1); |
|||
test(&test2[0], @sizeof test2); |
|||
test(&test3[0], @sizeof test3); |
|||
test(&test4[0], @sizeof test4); |
|||
test(&test5[0], @sizeof test5); |
|||
test(&test6[0], @sizeof test6);</lang> |
|||
{{out}} |
|||
<pre>["baabababc", "baabc", "bbbabc"] -> `abc` |
|||
["baabababc", "baabc", "bbbazc"] -> `c` |
|||
["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] -> `day` |
|||
["longest", "common", "suffix"] -> `` |
|||
[""] -> `` |
|||
[] -> ``</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |