Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(solut).
- -export([main/0]).
- pairs_is_equal(List,{P,Q}) ->
- PinL=lists:member(P,List),
- QinL=lists:member(Q,List),
- if (PinL andalso QinL) -> 0;
- PinL -> Q;
- QinL -> P;
- true -> 0
- end.
- main() ->
- {ok,[Count]}=io:fread("","~d"),
- {ok,[CountPairs]}=io:fread("","~d"),
- Set=sets:new(),
- main(CountPairs,Set).
- main(CountPairs,Set) when CountPairs ==0 ->
- parse_set(Set,sets:to_list(Set));
- main(CountPairs,Set) when CountPairs /=0 ->
- {ok,[P,Q]}=io:fread("","~d~d"),
- if(P=<Q) -> NewSet=sets:add_element({P,Q},Set),
- main(CountPairs-1,NewSet);
- P>Q -> NewSet=sets:add_element({Q,P},Set),
- main(CountPairs-1,NewSet)
- end.
- parse_set(Set,[{A,B}|Tail]) ->
- Acc=sets:add_element(B,sets:add_element(A,sets:new())),
- Data=sets:fold(fun(X,Acc)->
- Eq=pairs_is_equal([A,B],X),
- if Eq>0 -> sets:add_element(Eq,Acc);
- Eq=<0 -> Acc end end,Acc,Set),
- Accum=sets:add_element({A,B},sets:new()),
- PromData=sets:fold(fun(X,Accum)->
- Eq=pairs_is_equal([A,B],X),
- if Eq>0 -> sets:add_element(X,Accum);
- Eq=<0 -> Accum end end,Accum,Set),
- io:format("~p~n",[sets:to_list(Data)]),
- SizeSet=sets:size(Data),
- if SizeSet > 1 ->
- Cost=trunc(math:sqrt(SizeSet));
- SizeSet =< 1 ->
- Cost=1
- end,
- io:format("Subtracted List =~p~n",[sets:to_list(sets:subtract(Set,PromData))]),
- parse_set(sets:subtract(Set,PromData),Tail,Cost).
- parse_set(Set,[],Acc) -> Acc;
- parse_set(Set,[{A,B}|Tail],Accum) ->
- Acc=sets:add_element(B,sets:add_element(A,sets:new())),
- Data=sets:fold(fun(X,Acc)->
- Eq=pairs_is_equal([A,B],X),
- if Eq>0 -> sets:add_element(Eq,Acc);
- Eq=<0 -> Acc end end,Acc,Set),
- Accum=sets:add_element({A,B},sets:new()),
- PromData=sets:fold(fun(X,Accum)->
- Eq=pairs_is_equal([A,B],X),
- if Eq>0 -> sets:add_element(X,Accum);
- Eq=<0 -> Accum end end,Accum,Set),
- io:format("~p~n",[sets:to_list(Data)]),
- SizeSet=sets:size(Data),
- if SizeSet > 1 ->
- Cost=trunc(math:sqrt(SizeSet));
- SizeSet =< 1 ->
- Cost=1
- end,
- parse_set(sets:subtract(Set,PromData),Tail,Cost+Accum).
- %% if SizeSet>1 ->
- %% parse_set(Set,Tail,sets:add_element(Data,Accum));
- %% SizeSet =<1 -> parse_set(Set,Tail,sets:add_element(B,sets:add_element(A,Accum)))
- %% end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement