|
| 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