Advertisement
sek1pa

prison2_notfin

Jan 19th, 2018
491
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 2.38 KB | None | 0 0
  1. -module(solut).
  2. -export([main/0]).
  3.  
  4. pairs_is_equal(List,{P,Q}) ->
  5.     PinL=lists:member(P,List),
  6.     QinL=lists:member(Q,List),
  7.     if (PinL andalso QinL) -> 0;
  8.     PinL -> Q;
  9.        QinL -> P;
  10.        true -> 0
  11.     end.
  12. main() ->
  13.     {ok,[Count]}=io:fread("","~d"),
  14.     {ok,[CountPairs]}=io:fread("","~d"),
  15.     Set=sets:new(),
  16.     main(CountPairs,Set).
  17.  
  18. main(CountPairs,Set) when CountPairs ==0 ->
  19.     parse_set(Set,sets:to_list(Set));
  20. main(CountPairs,Set) when CountPairs /=0 ->
  21.     {ok,[P,Q]}=io:fread("","~d~d"),
  22.     if(P=<Q) ->   NewSet=sets:add_element({P,Q},Set),
  23.           main(CountPairs-1,NewSet);
  24.       P>Q -> NewSet=sets:add_element({Q,P},Set),
  25.           main(CountPairs-1,NewSet)
  26.     end.
  27.  
  28. parse_set(Set,[{A,B}|Tail]) ->
  29.     Acc=sets:add_element(B,sets:add_element(A,sets:new())),
  30.     Data=sets:fold(fun(X,Acc)->
  31.                Eq=pairs_is_equal([A,B],X),
  32.                if Eq>0 -> sets:add_element(Eq,Acc);
  33.                   Eq=<0 -> Acc end end,Acc,Set),
  34.     Accum=sets:add_element({A,B},sets:new()),
  35.     PromData=sets:fold(fun(X,Accum)->
  36.                Eq=pairs_is_equal([A,B],X),
  37.                if Eq>0 -> sets:add_element(X,Accum);
  38.                   Eq=<0 -> Accum end end,Accum,Set),
  39.     io:format("~p~n",[sets:to_list(Data)]),
  40.     SizeSet=sets:size(Data),
  41.     if SizeSet > 1 ->
  42.         Cost=trunc(math:sqrt(SizeSet));
  43.        SizeSet =< 1 ->
  44.         Cost=1
  45.     end,
  46.     io:format("Subtracted List =~p~n",[sets:to_list(sets:subtract(Set,PromData))]),
  47.     parse_set(sets:subtract(Set,PromData),Tail,Cost).
  48.  
  49. parse_set(Set,[],Acc) -> Acc;
  50. parse_set(Set,[{A,B}|Tail],Accum) ->
  51.     Acc=sets:add_element(B,sets:add_element(A,sets:new())),
  52.     Data=sets:fold(fun(X,Acc)->
  53.                Eq=pairs_is_equal([A,B],X),
  54.                if Eq>0 -> sets:add_element(Eq,Acc);
  55.                   Eq=<0 -> Acc end end,Acc,Set),
  56.     Accum=sets:add_element({A,B},sets:new()),
  57.     PromData=sets:fold(fun(X,Accum)->
  58.                Eq=pairs_is_equal([A,B],X),
  59.                if Eq>0 -> sets:add_element(X,Accum);
  60.                   Eq=<0 -> Accum end end,Accum,Set),
  61.     io:format("~p~n",[sets:to_list(Data)]),
  62.     SizeSet=sets:size(Data),
  63.     if SizeSet > 1 ->
  64.         Cost=trunc(math:sqrt(SizeSet));
  65.        SizeSet =< 1 ->
  66.         Cost=1
  67.     end,
  68.     parse_set(sets:subtract(Set,PromData),Tail,Cost+Accum).
  69. %%    if SizeSet>1 ->
  70. %%      parse_set(Set,Tail,sets:add_element(Data,Accum));
  71. %%       SizeSet =<1 -> parse_set(Set,Tail,sets:add_element(B,sets:add_element(A,Accum)))
  72. %%    end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement