Skip to content

Instantly share code, notes, and snippets.

@nubbel
Last active December 20, 2015 10:30
Show Gist options
  • Save nubbel/6115409 to your computer and use it in GitHub Desktop.
Save nubbel/6115409 to your computer and use it in GitHub Desktop.
defmodule Teenager do
def hey(msg) do
msg |> interpret |> respond
end
defp interpret(""), do: :silence
defp interpret(msg) do
reversed = MyString.reverse msg
upcased = String.upcase reversed
do_interpret reversed, upcased
end
defp do_interpret(upcased, upcased), do: :shout
defp do_interpret("?" <> _, _), do: :question
defp do_interpret(_, _), do: :anything
defp respond(:anything), do: "Whatever."
defp respond(:shout), do: "Woah, chill out!"
defp respond(:question), do: "Sure."
defp respond(:silence), do: "Fine. Be that way."
end
# Because there is no String.reverse/1 yet.
defmodule MyString do
def reverse(string) when is_binary(string), do: do_reverse(String.next_grapheme(string), "")
defp do_reverse({char, rest}, reversed) do
do_reverse(String.next_grapheme(rest), char <> reversed)
end
defp do_reverse(:no_grapheme, reversed), do: reversed
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment