用 Elixir 计算 anagram
October 13, 2020
Anagram(易位构词)是把某个单词或词组的字母重新排列后得到的另一个单词或词组,通常每个原始字母都恰好用一次
例如:
- "restful" = "fluster"
- "funeral" = "real fun"
- "adultery" = "true lady"
- "customers" = "store scum"
- "forty five" = "over fifty"
用 mix new anagram 创建一个新项目,然后我们来写几个测试用例:
defmodule AnagramTest do
use ExUnit.Case
test "calculates anagram" do
assert Anagram.anagram?("restful", "fluster") == true
assert Anagram.anagram?("funeral", "realfun") == true
assert Anagram.anagram?("adultery", "truelady") == true
assert Anagram.anagram?("customers", "storescum") == true
assert Anagram.anagram?("fortyfive", "overfifty") == true
assert Anagram.anagram?("fiftyfive", "overfifty") == false
assert Anagram.anagram?("funeral", "real fun") == false
end
end
接下来我们要写代码:
defmodule Anagram do
def anagram?(a, b) do
charlist(a) == charlist(b)
end
def charlist(w) do
w |> String.trim() |> String.downcase() |> String.graphemes() |> Enum.sort()
end
end
运行测试 mix test:
Compiling 1 file (.ex)
Generated anagram app
.
Finished in 0.1 seconds
1 test, 0 failures
Randomized with seed 752850
完成,现在你有一个 anagram 计算器了!