lev.exs 692 B

123456789101112131415161718192021222324252627282930
  1. defmodule Levenshtein do
  2. def first_letter_check(one_letter, two_letter) do
  3. case one_letter == two_letter do
  4. true -> 0
  5. false -> 1
  6. end
  7. end
  8. def distance(string_1, string_1), do: 0
  9. def distance(string, ''), do: :string.len(string)
  10. def distance('', string), do: :string.len(string)
  11. def distance([h1|rest1], [h2|rest2]) do
  12. cost = first_letter_check(h1, h2)
  13. :lists.min([
  14. distance(rest1, [h2|rest2]) + 1,
  15. distance([h1|rest1], rest2) + 1,
  16. distance(rest1, rest2) + cost
  17. ])
  18. end
  19. end
  20. [s | tail] = System.argv
  21. [t | _] = tail
  22. s = s |> to_charlist
  23. t = t |> to_charlist
  24. IO.puts Levenshtein.distance(s, t);