Skip to content

Instantly share code, notes, and snippets.

@damrkul
Created December 6, 2014 05:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save damrkul/fbe3f90258d21a0e4296 to your computer and use it in GitHub Desktop.
Save damrkul/fbe3f90258d21a0e4296 to your computer and use it in GitHub Desktop.
defmodule Evenodd do
def start() do even_odd_sort([],[]) |> print_list end
defp print_list(list) do Enum.map list, &(IO.puts(&1)) end
defp even_odd_sort(odd,even) do
case getline do
{ :done, :done } -> make_new_list(even,odd)
{ line, :odd} -> even_odd_sort( [line] ++ odd, even)
{ line, :even} -> even_odd_sort( odd,[line] ++ even)
end
end
defp make_new_list(even,odd) do combineList(Enum.sort(even),Enum.sort(odd),:do_even) end
defp combineList([],odd,_) do odd end
defp combineList(even,[],_) do even end
defp combineList(even,[ head | tail ],:do_odd) do [head] ++ combineList(even,tail,:do_even) end
defp combineList([ head | tail ], odd,:do_even) do [head] ++ combineList(tail,odd,:do_odd) end
defp getline() do IO.read(:line) |> remove_new_line |> String.to_integer |> process_line end
defp remove_new_line(str), do: String.replace(str, ~r/\n/, "")
defp process_line(0) do {:done, :done } end
defp process_line(line) do
cond do
rem(line,2) != 0 && line != 0 -> {line, :odd}
true -> {line , :even }
end
end
end
Evenodd.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment