Longest common prefix: Difference between revisions
Content added Content deleted
(Added solution for Action!) |
|||
Line 65: | Line 65: | ||
[prefix, suffix] -> |
[prefix, suffix] -> |
||
[foo, foobar] -> foo |
[foo, foobar] -> foo |
||
</pre> |
|||
=={{header|Action!}}== |
|||
<lang Action!>DEFINE PTR="CARD" |
|||
BYTE Func Equals(CHAR ARRAY a,b) |
|||
BYTE i |
|||
IF a(0)#b(0) THEN |
|||
RETURN (0) |
|||
FI |
|||
FOR i=1 TO a(0) |
|||
DO |
|||
IF a(i)#b(i) THEN |
|||
RETURN (0) |
|||
FI |
|||
OD |
|||
RETURN (1) |
|||
BYTE FUNC CommonLength(PTR ARRAY texts BYTE count) |
|||
CHAR ARRAY t |
|||
BYTE i,len |
|||
IF count=0 THEN |
|||
RETURN (0) |
|||
FI |
|||
len=255 |
|||
FOR i=0 TO count-1 |
|||
DO |
|||
t=texts(i) |
|||
IF t(0)<len THEN |
|||
len=t(0) |
|||
FI |
|||
OD |
|||
RETURN (len) |
|||
PROC Prefix(PTR ARRAY texts BYTE count CHAR ARRAY res) |
|||
CHAR ARRAY t(100) |
|||
BYTE i,len,found |
|||
IF count=1 THEN |
|||
SCopy(res,texts(0)) |
|||
RETURN |
|||
FI |
|||
len=CommonLength(texts,count) |
|||
WHILE len>0 |
|||
DO |
|||
SCopyS(res,texts(0),1,len) |
|||
found=1 |
|||
FOR i=1 TO count-1 |
|||
DO |
|||
SCopyS(t,texts(i),1,len) |
|||
IF Equals(res,t)#1 THEN |
|||
found=0 EXIT |
|||
FI |
|||
OD |
|||
IF found THEN |
|||
RETURN |
|||
FI |
|||
len==-1 |
|||
OD |
|||
res(0)=0 |
|||
RETURN |
|||
PROC Test(PTR ARRAY texts BYTE count) |
|||
BYTE i |
|||
CHAR ARRAY res(100) |
|||
Prefix(texts,count,res) |
|||
Print("lcp(") |
|||
IF count>0 THEN |
|||
FOR i=0 TO count-1 |
|||
DO |
|||
PrintF("""%S""",texts(i)) |
|||
IF i<count-1 THEN |
|||
Print(",") |
|||
FI |
|||
OD |
|||
FI |
|||
PrintF(")=""%S""%E",res) |
|||
RETURN |
|||
PROC Main() |
|||
CHAR ARRAY |
|||
t1="interspecies", t2="interstellar", t3="interstate", |
|||
t4="throne", t5="throne", t6="dungeon", t7="", |
|||
t8="prefix", t9="suffix", t10="foo", t11="foobar" |
|||
PTR ARRAY texts(20) |
|||
texts(0)=t1 texts(1)=t2 texts(2)=t3 |
|||
Test(texts,3) |
|||
texts(0)=t4 texts(1)=t5 |
|||
Test(texts,2) |
|||
texts(0)=t4 texts(1)=t6 |
|||
Test(texts,2) |
|||
texts(0)=t4 texts(1)=t7 texts(2)=t5 |
|||
Test(texts,3) |
|||
texts(0)=t7 |
|||
Test(texts,1) |
|||
Test(texts,0) |
|||
texts(0)=t8 texts(1)=t9 |
|||
Test(texts,2) |
|||
texts(0)=t10 texts(1)=t11 |
|||
Test(texts,2) |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Longest_common_prefix.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
lcp("interspecies","interstellar","interstate")="inters" |
|||
lcp("throne","throne")="throne" |
|||
lcp("throne","dungeon")="" |
|||
lcp("throne","","throne")="" |
|||
lcp("")="" |
|||
lcp()="" |
|||
lcp("prefix","suffix")="" |
|||
lcp("foo","foobar")="foo" |
|||
</pre> |
</pre> |
||