Skip to content

Commit b2fb9e5

Browse files
committed
finished day 3
1 parent 2131f05 commit b2fb9e5

File tree

3 files changed

+2002
-0
lines changed

3 files changed

+2002
-0
lines changed

2016/day3/day3

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/env escript
2+
%%! -sname day3
3+
4+
main([]) -> main(["input.txt"]);
5+
main([Filename]) ->
6+
compile:file("triangle.erl"),
7+
count_tris(p1_load_input(Filename), part1),
8+
count_tris(p2_load_input(Filename), part2).
9+
10+
count_tris(Tris, Part) ->
11+
{ok, Pid} = triangle:start_link(),
12+
{Time, Value} = timer:tc(
13+
fun() ->
14+
[ {triangle:is_triangle(Pid, Tri), Tri} || Tri <- Tris ]
15+
end),
16+
triangle:stop(Pid),
17+
TriCount = length(lists:filter(fun({IsTri, _}) -> IsTri end, Value)),
18+
io:format("Found ~p triangles for ~p in ~pms~n", [TriCount, Part, Time / 1000]).
19+
20+
p1_load_input(Filename) ->
21+
{ok, File} = file:open(Filename, [read]),
22+
lists:reverse(p1_load_input(File, [])).
23+
24+
p1_load_input(File, List) ->
25+
case file:read_line(File) of
26+
{ok, Line} -> NewList = [ p1_parse_line(Line) | List ],
27+
p1_load_input(File, NewList);
28+
eof -> List
29+
end.
30+
31+
get_tri(Line) -> [ X || {X, _} <- [ string:to_integer(S) || S <- string:tokens(Line, " ") ]].
32+
33+
p1_parse_line(Line) ->
34+
List = get_tri(Line),
35+
[ X, Y, Z ] = List,
36+
{ X, Y, Z}.
37+
38+
p2_load_input(Filename) ->
39+
{ok, File} = file:open(Filename, [read]),
40+
lists:reverse(p2_load_input(File, [])).
41+
42+
p2_load_input(File, List) ->
43+
% Read three lines
44+
L1 = file:read_line(File),
45+
L2 = file:read_line(File),
46+
L3 = file:read_line(File),
47+
case {L1, L2, L3} of
48+
{eof, eof, eof} -> List;
49+
{{ok, Line1}, {ok, Line2}, {ok, Line3}} ->
50+
NewList = p2_parse_lines(Line1, Line2, Line3) ++ List,
51+
p2_load_input(File, NewList)
52+
end.
53+
54+
p2_parse_lines(L1, L2, L3) ->
55+
[ T1a, T2a, T3a ] = get_tri(L1),
56+
[ T1b, T2b, T3b ] = get_tri(L2),
57+
[ T1c, T2c, T3c ] = get_tri(L3),
58+
[ {T1a, T1b, T1c}, {T2a, T2b, T2c}, {T3a, T3b, T3c} ].

0 commit comments

Comments
 (0)