Last active
May 18, 2017 06:49
-
-
Save aikyo02/8152a2fb0e2630aee150a528323f7654 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule CalculaMachine do | |
def calculate(encoded_string) do | |
_size, encoded_value = String.split(encoded_string, ":") | |
to_bit(encoded_string) | |
|> to_numerical_fomula() | |
|> calculate_formula() | |
|> encode() | |
end | |
defp to_bit(byte) do | |
:io.format("~.2B~n", [String.to_integer(byte, 16)]) | |
end | |
defp to_numerical_fomula(bit) do | |
decode(bit, "") | |
end | |
defp decode("00" <> bits, acc), do: decode(bits, "0" <> acc) | |
defp decode("01" <> bits, acc), do: decode(bits, "1" <> acc) | |
defp decode("100" <> bits, acc), do: decode(bits, "2" <> acc) | |
defp decode("1010" <> bits, acc), do: decode(bits, "3" <> acc) | |
defp decode("1011" <> bits, acc), do: decode(bits, "4" <> acc) | |
defp decode("1100" <> bits, acc), do: decode(bits, "5" <> acc) | |
defp decode("11010" <> bits, acc), do: decode(bits, "6" <> acc) | |
defp decode("11011" <> bits, acc), do: decode(bits, "7" <> acc) | |
defp decode("111000" <> bits, acc), do: decode(bits, "8" <> acc) | |
defp decode("111001" <> bits, acc), do: decode(bits, "9" <> acc) | |
defp decode("1110100" <> bits, acc), do: decode(bits, "+" <> acc) | |
defp decode("1110101" <> bits, acc), do: decode(bits, "-" <> acc) | |
defp decode("1110110" <> bits, acc), do: decode(bits, "*" <> acc) | |
defp decode("1110111" <> bits, acc), do: decode(bits, "/" <> acc) | |
defp decode(_, acc), do: String.reverse(acc) | |
defp calculate_formula(formula) do | |
Tree.build_tree(formula) | |
|> Tree.calculate | |
end | |
defp encode(calculate_result) do | |
end | |
end | |
defmodule Tree do | |
defstruct [:left, :right, :value] | |
def build_tree(formula) do | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment