exercism/elixir/word-count/lib/word_count.ex

18 lines
457 B
Elixir

defmodule WordCount do
@doc """
Count the number of words in the sentence.
Words are compared case-insensitively.
"""
@spec count(String.t()) :: map
def count(sentence) do
sentence
|> String.split(~r/[\s,.:!?_]+/, trim: true)
|> Enum.reject(&String.match?(&1, ~r/[&@$%^]+/))
|> Enum.map(&String.trim(&1, "'"))
|> Enum.reduce(%{}, fn word, acc ->
Map.update(acc, String.downcase(word), 1, &(&1 + 1))
end)
end
end