Skip to content

Instantly share code, notes, and snippets.

@gron1987
Last active December 14, 2015 03:18
Show Gist options
  • Save gron1987/5019495 to your computer and use it in GitHub Desktop.
Save gron1987/5019495 to your computer and use it in GitHub Desktop.
Test1
-module(useless).
-export([polynom/1]).
-import(mochinum).
calculateSum([Head|Tail],Var,Sum,TailLen) ->
SumRes = case Tail of
[] -> Sum + Head;
[_] -> Sum + Head * Var;
_ -> Sum + Head * math:pow(Var,TailLen)
end,
calculateSum( Tail, Var, SumRes, TailLen - 1 );
calculateSum([],_,Sum,_) -> Sum.
createPolynom([Head|Tail],Var,ResultString,TailLen) ->
{Format,Args} = case Tail of
[] when Head > 0 ->
{"+~s",[toStr(Head)]};
[] ->
{"~s",[toStr(Head)]};
[_] when Head > 0 ->
{"+~s*~s",[toStr(Head),toStr(Var)]};
[_] ->
{"~s*~s",[toStr(Head),toStr(Var)]};
[_|_] when Head > 0 ->
{"+~s*(~s^~s)",[toStr(Head),toStr(Var),toStr(TailLen)]};
[_|_] ->
{"~s*(~s^~s)",[toStr(Head),toStr(Var),toStr(TailLen)]}
end,
createPolynom(Tail,Var, ResultString ++ io_lib:format(Format,Args), TailLen - 1);
createPolynom([],_,Str,_) -> Str.
toStr(Value) when erlang:is_integer(Value) -> erlang:integer_to_list( Value );
toStr(Value) when erlang:is_float(Value) -> mochinum:digits( Value ).
polynom(PolynomIndexes) ->
fun(Var) ->
PolynomTLength = length(PolynomIndexes)-1,
ReversePolynom = lists:reverse(PolynomIndexes),
PolynomStr = string:strip(createPolynom(ReversePolynom,Var,"",PolynomTLength),both, $+),
ResultString = PolynomStr ++ "=" ++ mochinum:digits( calculateSum(ReversePolynom,Var,0,PolynomTLength) ),
erlang:list_to_bitstring( ResultString )
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment