Longest common prefix: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add CLU) |
(Replace Ruby version with Elixir) |
||
Line 1,371: | Line 1,371: | ||
=={{header|Elixir}}== |
=={{header|Elixir}}== |
||
<lang elixir> |
|||
{{trans|Ruby}} |
|||
defmodule LCP do |
|||
@data [ |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
min = Enum.min(strs) |
|||
⚫ | |||
max = Enum.max(strs) |
|||
⚫ | |||
index = Enum.find_index(0..String.length(min), fn i -> String.at(min,i) != String.at(max,i) end) |
|||
⚫ | |||
if index, do: String.slice(min, 0, index), else: min |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
] |
|||
def main do |
|||
⚫ | |||
⚫ | |||
end) |
|||
end |
end |
||
⚫ | |||
defp lcpstr([]), do: "" |
|||
data = [ |
|||
⚫ | |||
⚫ | |||
strs |> Enum.map(&String.to_charlist/1) |> lcp() |> IO.chardata_to_string() |
|||
⚫ | |||
end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
defp lcp(strs), do: Enum.reduce(strs, &lcp/2) |
|||
⚫ | |||
⚫ | |||
defp lcp(xs, ys), do: lcp(xs, ys, []) |
|||
⚫ | |||
⚫ | |||
defp lcp([x | xs], [x | ys], pre), do: lcp(xs, ys, [x | pre]) |
|||
] |
|||
defp lcp(_, _, pre), do: Enum.reverse(pre) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
["interspecies", "interstellar", "interstate"] -> "inters" |
|||
["throne", "throne"] -> "throne" |
|||
["throne", "dungeon"] -> "" |
|||
["throne", "", "throne"] -> "" |
|||
["cheese"] -> "cheese" |
|||
[""] -> "" |
|||
[] -> "" |
|||
["prefix", "suffix"] -> "" |
|||
["foo", "foobar"] -> "foo" |
|||
</pre> |
</pre> |
||