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","interstelar","interstate") = "inters"
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", "interstelar", "interstate"},
{"interspecies", "interstellar", "interstate"},
{"throne", "throne"},
{"throne", "throne"},
{"throne", "dungeon"},
{"throne", "dungeon"},
Line 74: Line 74:
{{out}}
{{out}}
<pre>
<pre>
lcp(["interspecies" "interstelar" "interstate"]) = "inters"
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","interstelar","interstate"] -- prints "inters"
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","interstelar","interstate")),"inters"
<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,interstelar,interstate)
<pre>lcp(interspecies,interstellar,interstate)
ok lcp="inters"
ok lcp="inters"


Line 203: Line 203:
plan 7;
plan 7;


is lcp("interspecies","interstelar","interstate"), "inters";
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 interstelar interstate'),'inters');
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 interstelar interstate"
<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","interstelar","interstate") == "inters"
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","interstelar","interstate") == "inters"
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" "interstelar" "interstate") => "inters"
(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","interstelar","interstate"),"inters"
<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","interstelar","interstate")
<pre>test lcp("interspecies","interstellar","interstate")
ok lcp="inters"
ok lcp="inters"


Line 434: Line 434:
This REXX version makes use of the &nbsp; '''compare''' &nbsp; BIF.
This REXX version makes use of the &nbsp; '''compare''' &nbsp; 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', "interstelar", 'interstate')
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: interstelar
────────── 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","interstelar","interstate") === "inters")
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,interstelar,interstate","throne,throne","throne,dungeon","cheese",_
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,interstelar,interstate = inters
<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","interstelar","interstate"),Void,"inters",__LINE__);
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__);