#!/usr/bin/env escript -mode(compile). % --- Part 1 Code part1(Input) -> io:format("Part 1: ~b~n", [code_interp_diff(Input, 0)]). interp_length([]) -> 0; interp_length([$\\, $\\ | Rest]) -> 1 + interp_length(Rest); interp_length([$\\, $" | Rest]) -> 1 + interp_length(Rest); interp_length([$\\, $x, _, _ | Rest]) -> 1 + interp_length(Rest); interp_length([_ | Rest]) -> 1 + interp_length(Rest). code_interp_diff([], Acc) -> Acc; code_interp_diff([Line | Rest], Acc) -> code_interp_diff(Rest, Acc + (string:length(Line) - (interp_length(Line) - 2))). % --- Part 2 Code part2(Input) -> io:format("Part 2: ~b~n", [escape_code_diff(Input, 0)]). escape_length([]) -> 0; escape_length([$\\ | Rest]) -> 2 + escape_length(Rest); escape_length([$" | Rest]) -> 2 + escape_length(Rest); escape_length([_Char | Rest]) -> 1 + escape_length(Rest). escape_code_diff([], Acc) -> Acc; escape_code_diff([Line | Rest], Acc) -> escape_code_diff(Rest, Acc + ((escape_length(Line) + 2) - string:length(Line))). % --- Read Input read_input() -> read_input(""). read_input(Prev) -> case io:get_line("") of eof -> Prev; {error, _} -> halt(1); Data when Prev == "" -> read_input([Data]); Data -> read_input(Prev ++ [Data]) end. main(Args) -> Input = read_input(), case Args of ["1"] -> part1(Input); ["2"] -> part2(Input); _ -> part1(Input), part2(Input) end.