Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 4.40 KB | None | 0 0
  1. %%%-------------------------------------------------------------------
  2. %%% @author Utena
  3. %%% @copyright (C) 2016, <COMPANY>
  4. %%% @doc
  5. %%%
  6. %%% @end
  7. %%% Created : 02. Dec 2016 6:47 PM
  8. %%%-------------------------------------------------------------------
  9. -module(p2dirg).
  10. -author("Utena").
  11.  
  12. %% API
  13. -export([load_graph/1, print_graph/1, find_exit/3, run_path/3, do_stuff/1]).
  14.  
  15.  
  16. load_dict_line(L, Dict, Col) ->
  17.   load_dict_line(L, Dict, Col, 0).
  18.  
  19. load_dict_line([],Dict,_,_) ->
  20.   Dict;
  21. load_dict_line([H|Rest], Dict, Col, Row) ->
  22.   Dict2 = dict:store({Row,Col}, H, Dict),
  23.   load_dict_line(Rest, Dict2, Col, Row+1).
  24.  
  25.  
  26. process_graph_lines(L) ->
  27.   Dict = dict:new(),
  28.   process_graph_lines(L,0, Dict).
  29.  
  30. process_graph_lines([],_,Dict) ->
  31.   Dict;
  32. process_graph_lines([Line|Rest], Line_no, Dict) ->
  33.   Dict2 = load_dict_line(binary_to_list(Line), Dict, Line_no),
  34.   process_graph_lines(Rest, Line_no+1, Dict2).
  35.  
  36.  
  37. load_graph_dict(Filename) ->
  38.   case file:read_file(Filename) of
  39.     {ok, Data} ->
  40.       process_graph_lines(binary:split(Data, [<<"\r\n">>],[global]));
  41.     {error, _} ->
  42.       throw("error")
  43.   end.
  44.  
  45.  
  46. test_node(Row, Col, Dict, Graph, V1, Ind) ->
  47.   case dict:is_key({Row,Col}, Dict) of
  48.     true ->
  49.       case dict:fetch({Row, Col}, Dict) of
  50.         32 -> ok;
  51.         Val ->
  52.           V2 = digraph:add_vertex(Graph, Val),
  53.           digraph:add_edge(Graph, V1, V2, Ind)
  54.       end;
  55.     false ->
  56.       ok
  57.   end.
  58.  
  59.  
  60. make_g_node(L,D) ->
  61.   Graph = digraph:new(),
  62.   make_g_node(L, D, Graph).
  63.  
  64. make_g_node([], _, Graph) ->
  65.   Graph;
  66. make_g_node([H|Rest], Dict, Graph) ->
  67.   {Row, Col} = H,
  68.   case dict:fetch(H,Dict) of
  69.     32 -> ok;
  70.     Node ->
  71.       Vert = digraph:add_vertex(Graph, Node),
  72.       test_node(Row-1, Col, Dict, Graph, Vert, $L),
  73.       test_node(Row+1, Col, Dict, Graph, Vert, $R),
  74.       test_node(Row, Col-1, Dict, Graph, Vert, $U),
  75.       test_node(Row, Col+1, Dict, Graph, Vert, $D)
  76.   end,
  77.   make_g_node(Rest, Dict, Graph).
  78.  
  79. load_graph(Filename) ->
  80.   Dddd= load_graph_dict(Filename),
  81.   make_g_node(dict:fetch_keys(Dddd),Dddd).
  82.  
  83. print_vertex([],_) ->
  84.   ok;
  85. print_vertex([Head|Rest],Graph) ->
  86.   io:format("~w~n",[Head]),
  87.   io:format("~w~n",[digraph:out_edges(Graph,Head)]),
  88.   print_vertex(Rest,Graph).
  89.  
  90. print_graph(Graph) ->
  91.   print_vertex(digraph:vertices(Graph),Graph).
  92.  
  93. is_exit([],_,_,Node) ->
  94.   Node;
  95. is_exit([Head|Rest], Dir, Graph, Node) ->
  96.   case digraph:edge(Graph,Head) of
  97.     {_, _, Exit, Dir} -> Exit;
  98.     _ -> is_exit(Rest, Dir, Graph, Node)
  99.   end.
  100.  
  101. find_exit(Node, Dir, Graph) ->
  102.   is_exit(digraph:out_edges(Graph,Node),Dir, Graph, Node).
  103.  
  104.  
  105. do_path([],_,Node) ->
  106.   Node;
  107. do_path([Head|Rest],Graph, Node) ->
  108.   do_path(Rest, Graph, find_exit(Node, Head, Graph)).
  109.  
  110. run_path(Graph, Path, Start) ->
  111.   do_path(Path, Graph, Start).
  112.  
  113.  
  114. do_stuff(Graph) ->
  115.   [ run_path(Graph, "LURLLLLLDUULRDDDRLRDDDUDDUULLRLULRURLRRDULUUURDUURLRDRRURUURUDDRDLRRLDDDDLLDURLDUUUDRDDDLULLDDLRLRRRLDLDDDDDLUUUDLUULRDUDLDRRRUDUDDRULURULDRUDLDUUUDLUDURUURRUUDRLDURRULURRURUUDDLRLDDDDRDRLDDLURLRDDLUDRLLRURRURRRURURRLLRLDRDLULLUDLUDRURDLRDUUDDUUDRLUDDLRLUDLLURDRUDDLRURDULLLUDDURULDRLUDLUDLULRRUUDDLDRLLUULDDURLURRRRUUDRUDLLDRUDLRRDUDUUURRULLDLDDRLUURLDUDDRLDRLDULDDURDLUUDRRLDRLLLRRRDLLLLURDLLLUDRUULUULLRLRDLULRLURLURRRDRLLDLDRLLRLULRDDDLUDDLLLRRLLLUURLDRULLDURDLULUDLRLDLUDURLLLURUUUDRRRULRDURLLURRLDLRLDLDRRUUDRDDDDDRDUUDULUL", $5),
  116.   run_path(Graph, "RRURLURRULLUDUULUUURURULLDLRLRRULRUDUDDLLLRRRRLRUDUUUUDULUDRULDDUDLURLRRLLDLURLRDLDUULRDLLLDLLULLURLLURURULUDLDUDLUULDDLDRLRRUURRRLLRRLRULRRLDLDLRDULDLLDRRULRDRDUDUUUDUUDDRUUUDDLRDULLULDULUUUDDUULRLDLRLUUUUURDLULDLUUUULLLLRRRLDLLDLUDDULRULLRDURDRDRRRDDDLRDDULDLURLDLUDRRLDDDLULLRULDRULRURDURRUDUUULDRLRRUDDLULDLUULULRDRDULLLDULULDUDLDRLLLRLRURUDLUDDDURDUDDDULDRLUDRDRDRLRDDDDRLDRULLURUDRLLUDRLDDDLRLRDLDDUULRUDRLUULRULRLDLRLLULLUDULRLDRURDD", $3),
  117.   run_path(Graph, "UUUUUURRDLLRUDUDURLRDDDURRRRULRLRUURLLLUULRUDLLRUUDURURUDRDLDLDRDUDUDRLUUDUUUDDURRRDRUDDUURDLRDRLDRRULULLLUDRDLLUULURULRULDRDRRLURULLDURUURDDRDLLDDDDULDULUULLRULRLDURLDDLULRLRRRLLURRLDLLULLDULRULLDLRULDDLUDDDLDDURUUUURDLLRURDURDUUDRULDUULLUUULLULLURLRDRLLRULLLLRRRRULDRULLUURLDRLRRDLDDRLRDURDRRDDDRRUDRLUULLLULRDDLDRRLRUDLRRLDULULRRDDURULLRULDUDRLRUUUULURLRLRDDDUUDDULLULLDDUDRLRDDRDRLDUURLRUULUULDUDDURDDLLLURUULLRDLRRDRDDDUDDRDLRRDDUURDUULUDDDDUUDDLULLDRDDLULLUDLDDURRULDUDRRUURRDLRLLDDRRLUUUDDUUDUDDDDDDDLULURRUULURLLUURUDUDDULURDDLRDDRRULLLDRRDLURURLRRRDDLDUUDR", $C)
  118. ].
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement