Skip to content

Instantly share code, notes, and snippets.

@aikyo02
Last active May 18, 2017 06:49
Show Gist options
  • Save aikyo02/8152a2fb0e2630aee150a528323f7654 to your computer and use it in GitHub Desktop.
Save aikyo02/8152a2fb0e2630aee150a528323f7654 to your computer and use it in GitHub Desktop.
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