คำนวณ anagram ใน Elixir
13 ตุลาคม 2563
anagram คือคำหรือวลีที่เกิดจากการสลับตำแหน่งตัวอักษรของคำหรือวลีอื่น โดยปกติจะใช้ตัวอักษรเดิมทั้งหมดตัวละหนึ่งครั้งพอดี
ตัวอย่างเช่น:
- "restful" = "fluster"
- "funeral" = "real fun"
- "adultery" = "true lady"
- "customers" = "store scum"
- "forty five" = "over fifty"
สร้างโปรเจกต์ใหม่ด้วย mix new anagram แล้วมาเขียน test case กัน:
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 เป็นของตัวเอง!