Longest common prefix: Difference between revisions
Content added Content deleted
(→{{header|REXX}}: added version 2.) |
m (fix spelling of "interstellar" :)) |
||
Line 9: | Line 9: | ||
For a function, ''lcp'', accepting a list of strings, the following should hold true |
For a function, ''lcp'', accepting a list of strings, the following should hold true |
||
(the empty string, <math>\varepsilon</math>, is considered a prefix of all strings): |
(the empty string, <math>\varepsilon</math>, is considered a prefix of all strings): |
||
lcp("interspecies"," |
lcp("interspecies","interstellar","interstate") = "inters" |
||
lcp("throne","throne") = "throne" |
lcp("throne","throne") = "throne" |
||
lcp("throne","dungeon") = <math>\varepsilon</math> |
lcp("throne","dungeon") = <math>\varepsilon</math> |
||
Line 61: | Line 61: | ||
func main() { |
func main() { |
||
for _, l := range [][]string{ |
for _, l := range [][]string{ |
||
{"interspecies", " |
{"interspecies", "interstellar", "interstate"}, |
||
{"throne", "throne"}, |
{"throne", "throne"}, |
||
{"throne", "dungeon"}, |
{"throne", "dungeon"}, |
||
Line 74: | Line 74: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
lcp(["interspecies" " |
lcp(["interspecies" "interstellar" "interstate"]) = "inters" |
||
lcp(["throne" "throne"]) = "throne" |
lcp(["throne" "throne"]) = "throne" |
||
lcp(["throne" "dungeon"]) = "" |
lcp(["throne" "dungeon"]) = "" |
||
Line 94: | Line 94: | ||
main = do |
main = do |
||
print $ lcp ["interspecies"," |
print $ lcp ["interspecies","interstellar","interstate"] -- prints "inters" |
||
print $ lcp ["throne","throne"] -- prints "throne" |
print $ lcp ["throne","throne"] -- prints "throne" |
||
print $ lcp ["throne","dungeon"] -- prints "" |
print $ lcp ["throne","dungeon"] -- prints "" |
||
Line 129: | Line 129: | ||
==ooRexx== |
==ooRexx== |
||
{{trans|REXX}} |
{{trans|REXX}} |
||
<lang oorexx>Call assert lcp(.list~of("interspecies"," |
<lang oorexx>Call assert lcp(.list~of("interspecies","interstellar","interstate")),"inters" |
||
Call assert lcp(.list~of("throne","throne")),"throne" |
Call assert lcp(.list~of("throne","throne")),"throne" |
||
Call assert lcp(.list~of("throne","dungeon")),"" |
Call assert lcp(.list~of("throne","dungeon")),"" |
||
Line 166: | Line 166: | ||
Return left(arg(1),i-1)</lang> |
Return left(arg(1),i-1)</lang> |
||
{{out}} |
{{out}} |
||
<pre>lcp(interspecies, |
<pre>lcp(interspecies,interstellar,interstate) |
||
ok lcp="inters" |
ok lcp="inters" |
||
Line 203: | Line 203: | ||
plan 7; |
plan 7; |
||
is lcp("interspecies"," |
is lcp("interspecies","interstellar","interstate"), "inters"; |
||
is lcp("throne","throne"), "throne"; |
is lcp("throne","throne"), "throne"; |
||
is lcp("throne","dungeon"), ''; |
is lcp("throne","dungeon"), ''; |
||
Line 225: | Line 225: | ||
(subrg): |
(subrg): |
||
lcpt: Proc Options(main); |
lcpt: Proc Options(main); |
||
Call assert(lcp('interspecies |
Call assert(lcp('interspecies interstellar interstate'),'inters'); |
||
Call assert(lcp('throne throne'),'throne'); |
Call assert(lcp('throne throne'),'throne'); |
||
Call assert(lcp('throne dungeon'),''); |
Call assert(lcp('throne dungeon'),''); |
||
Line 276: | Line 276: | ||
End;</lang> |
End;</lang> |
||
{{out}} |
{{out}} |
||
<pre>"interspecies |
<pre>"interspecies interstellar interstate" |
||
ok lcp="inters" |
ok lcp="inters" |
||
Line 305: | Line 305: | ||
return os.path.commonprefix(s) |
return os.path.commonprefix(s) |
||
assert lcp("interspecies"," |
assert lcp("interspecies","interstellar","interstate") == "inters" |
||
assert lcp("throne","throne") == "throne" |
assert lcp("throne","throne") == "throne" |
||
assert lcp("throne","dungeon") == "" |
assert lcp("throne","dungeon") == "" |
||
Line 321: | Line 321: | ||
zip(*s))) |
zip(*s))) |
||
assert lcp("interspecies"," |
assert lcp("interspecies","interstellar","interstate") == "inters" |
||
assert lcp("throne","throne") == "throne" |
assert lcp("throne","throne") == "throne" |
||
assert lcp("throne","dungeon") == "" |
assert lcp("throne","dungeon") == "" |
||
Line 359: | Line 359: | ||
(require tests/eli-tester) |
(require tests/eli-tester) |
||
(test |
(test |
||
(lcp "interspecies" " |
(lcp "interspecies" "interstellar" "interstate") => "inters" |
||
(lcp "throne" "throne") => "throne" |
(lcp "throne" "throne") => "throne" |
||
(lcp "throne" "dungeon") => "" |
(lcp "throne" "dungeon") => "" |
||
Line 371: | Line 371: | ||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
===version 1=== |
===version 1=== |
||
<lang rexx>Call assert lcp("interspecies"," |
<lang rexx>Call assert lcp("interspecies","interstellar","interstate"),"inters" |
||
Call assert lcp("throne","throne"),"throne" |
Call assert lcp("throne","throne"),"throne" |
||
Call assert lcp("throne","dungeon"),"" |
Call assert lcp("throne","dungeon"),"" |
||
Line 410: | Line 410: | ||
Return left(arg(1),i-1)</lang> |
Return left(arg(1),i-1)</lang> |
||
{{out}} |
{{out}} |
||
<pre>test lcp("interspecies"," |
<pre>test lcp("interspecies","interstellar","interstate") |
||
ok lcp="inters" |
ok lcp="inters" |
||
Line 434: | Line 434: | ||
This REXX version makes use of the '''compare''' BIF. |
This REXX version makes use of the '''compare''' BIF. |
||
<lang rexx>/*REXX program computes the longest common prefix of any number of args.*/ |
<lang rexx>/*REXX program computes the longest common prefix of any number of args.*/ |
||
say lcp('interspecies', " |
say lcp('interspecies', "interstellar", 'interstate') |
||
say lcp('throne', "throne") |
say lcp('throne', "throne") |
||
say lcp('throne', "dungeon") |
say lcp('throne', "dungeon") |
||
Line 461: | Line 461: | ||
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ |
||
────────── argument 1: interspecies |
────────── argument 1: interspecies |
||
────────── argument 2: |
────────── argument 2: interstellar |
||
────────── argument 3: interstate |
────────── argument 3: interstate |
||
longest common prefix= inters |
longest common prefix= inters |
||
Line 495: | Line 495: | ||
<lang scala>class TestLCP extends FunSuite { |
<lang scala>class TestLCP extends FunSuite { |
||
test("shared start") { |
test("shared start") { |
||
assert(lcp("interspecies"," |
assert(lcp("interspecies","interstellar","interstate") === "inters") |
||
assert(lcp("throne","throne") === "throne") |
assert(lcp("throne","throne") === "throne") |
||
assert(lcp("throne","dungeon").isEmpty) |
assert(lcp("throne","dungeon").isEmpty) |
||
Line 555: | Line 555: | ||
'Calling the function for test cases. |
'Calling the function for test cases. |
||
test = Array("interspecies, |
test = Array("interspecies,interstellar,interstate","throne,throne","throne,dungeon","cheese",_ |
||
"","prefix,suffix") |
"","prefix,suffix") |
||
Line 564: | Line 564: | ||
{{out}} |
{{out}} |
||
<pre>Test case 0 interspecies, |
<pre>Test case 0 interspecies,interstellar,interstate = inters |
||
Test case 1 throne,throne = throne |
Test case 1 throne,throne = throne |
||
Test case 2 throne,dungeon = No Matching Prefix |
Test case 2 throne,dungeon = No Matching Prefix |
||
Line 582: | Line 582: | ||
}</lang> |
}</lang> |
||
<lang zkl>tester:=TheVault.Test.UnitTester.UnitTester(); |
<lang zkl>tester:=TheVault.Test.UnitTester.UnitTester(); |
||
tester.testRun(lcp.fp("interspecies"," |
tester.testRun(lcp.fp("interspecies","interstellar","interstate"),Void,"inters",__LINE__); |
||
tester.testRun(lcp.fp("throne","throne"),Void,"throne",__LINE__); |
tester.testRun(lcp.fp("throne","throne"),Void,"throne",__LINE__); |
||
tester.testRun(lcp.fp("throne","dungeon"),Void,"",__LINE__); |
tester.testRun(lcp.fp("throne","dungeon"),Void,"",__LINE__); |