47 lines
1.0 KiB
Elixir
47 lines
1.0 KiB
Elixir
defmodule Rot13 do
|
|
@moduledoc """
|
|
ROT13 encoding program. Takes user input and outputs encoded text.
|
|
"""
|
|
|
|
@spec sign(integer | float) :: -1 | 1
|
|
def sign(int) do
|
|
if int >= 0 do 1
|
|
else -1
|
|
end
|
|
end
|
|
|
|
@spec rotate(charlist) :: charlist
|
|
def rotate(string_chars) do
|
|
string_chars
|
|
|> Enum.map(
|
|
fn char ->
|
|
char_up = << char :: utf8 >>
|
|
|> String.upcase()
|
|
|> String.to_charlist()
|
|
|> Enum.at(0)
|
|
if ?A <= char_up and char_up <= ?Z do
|
|
<<
|
|
char + (-13 * trunc(sign(char_up - 77.5))) :: utf8
|
|
>>
|
|
else
|
|
<< char :: utf8 >>
|
|
end
|
|
end)
|
|
end
|
|
|
|
@spec start(any, any) :: {:ok, pid}
|
|
def start(_type, _args) do
|
|
IO.puts("Enter string to encode:")
|
|
IO.puts(
|
|
[
|
|
"Encoded string:\n",
|
|
IO.read(:line)
|
|
|> String.trim()
|
|
|> String.to_charlist()
|
|
|> rotate()
|
|
]
|
|
)
|
|
Task.start(fn -> :timer.sleep(1000) end)
|
|
end
|
|
end
|