Advent of Code Solutions
advent-of-code
aoc
1#!/usr/bin/env escript
2-mode(compile).
3
4% --- Part 1 Code
5part1(Input) -> io:format("Part 1: ~b~n", [code_interp_diff(Input, 0)]).
6
7interp_length([]) -> 0;
8interp_length([$\\, $\\ | Rest]) -> 1 + interp_length(Rest);
9interp_length([$\\, $" | Rest]) -> 1 + interp_length(Rest);
10interp_length([$\\, $x, _, _ | Rest]) -> 1 + interp_length(Rest);
11interp_length([_ | Rest]) -> 1 + interp_length(Rest).
12
13code_interp_diff([], Acc) ->
14 Acc;
15code_interp_diff([Line | Rest], Acc) ->
16 code_interp_diff(Rest, Acc + (string:length(Line) - (interp_length(Line) - 2))).
17
18% --- Part 2 Code
19part2(Input) -> io:format("Part 2: ~b~n", [escape_code_diff(Input, 0)]).
20
21escape_length([]) -> 0;
22escape_length([$\\ | Rest]) -> 2 + escape_length(Rest);
23escape_length([$" | Rest]) -> 2 + escape_length(Rest);
24escape_length([_Char | Rest]) -> 1 + escape_length(Rest).
25
26escape_code_diff([], Acc) ->
27 Acc;
28escape_code_diff([Line | Rest], Acc) ->
29 escape_code_diff(Rest, Acc + ((escape_length(Line) + 2) - string:length(Line))).
30
31% --- Read Input
32read_input() -> read_input("").
33read_input(Prev) ->
34 case io:get_line("") of
35 eof -> Prev;
36 {error, _} -> halt(1);
37 Data when Prev == "" -> read_input([Data]);
38 Data -> read_input(Prev ++ [Data])
39 end.
40
41main(Args) ->
42 Input = read_input(),
43 case Args of
44 ["1"] ->
45 part1(Input);
46 ["2"] ->
47 part2(Input);
48 _ ->
49 part1(Input),
50 part2(Input)
51 end.