This commit is contained in:
2022-10-04 11:32:17 +00:00
parent 6110e75650
commit f62c52d8a9
8 changed files with 325 additions and 15 deletions

View File

@@ -1,10 +0,0 @@
[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]

68
day17/day17.erl Normal file
View File

@@ -0,0 +1,68 @@
%% to compile: erlc day3A.erl
%% to run: erl -noshell -s day5 solve
%%
-module(day17).
-export ([solve/0, solve/1, solve/2]).
-compile ([export_all]).
solve() ->
solve(['1']),
solve(['2']),
init:stop().
solve(A) ->
solve(A, read_input()).
solve(['1'], D) ->
io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1, D)]);
solve(1, D) ->
solution1(D);
solve(['2'], D) ->
io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2, D)]);
solve(2, D) ->
solution2(D).
solution1({X,Y}) ->
Xs = find_x(X),
Ys = find_y(Y),
{T, X1, Y1} = lists:max([{Key, X1, proplists:get_value(Key,Ys)} || {Key, X1} <- Xs, lists:keysearch(Key, 1, Ys) /= false]),
y_max(T,Y1,0).
solution2({X,Y}) ->
Xs = find_x(X),
Ys = find_y(Y),
length(lists:usort([{X,Y} || {Ty, Y} <- Ys, {T,X} <- lists:filter(fun({T,X}) -> T == Ty end, Xs)])).
read_input() ->
{{124,174},{-123, -86}}.
%% {{20,30},{-10, -5}}.
find_x({Xmin, Xmax}) ->
[ {T, Xstart} || Xstart <- lists:seq(0,400), T <- lists:seq(1,1000), x(Xstart, T) >= Xmin, x(Xstart, T) =< Xmax ].
find_y({Ymin, Ymax}) ->
[ {T, Ystart} || Ystart <- lists:seq(-400,400), T <- lists:seq(1,1000), y(Ystart, T) >= Ymin, y(Ystart, T) =< Ymax ].
x(Xstart, T) ->
Last =
case (Xstart - T + 1) of
L when L < 0 -> 0;
L -> L
end,
(Xstart - Last + 1) * (Xstart + Last) div 2.
y(Ystart, T) ->
Last = (Ystart - T + 1),
(Ystart - Last + 1) * (Ystart + Last) div 2.
y_max(0, _, Ymax) -> Ymax;
y_max(T, Y, Ymax) ->
NewY = y(Y, T),
NewMax =
case NewY of
M when M > Ymax -> M;
_ -> Ymax
end,
y_max(T-1, Y, NewMax).

26
day17/diagram.txt Normal file
View File

@@ -0,0 +1,26 @@
1 2 3
4 0123456789012345678901234567890
3 .............#....#............
2 .......#..............#........
1 ...............................
0 S........................#.....
-1 ...............................
-2 ...............................
-3 ...........................#...
-4 ...............................
-5 ....................TTTTTTTTTTT
-6 ....................TTTTTTTTTTT
-7 ....................TTTTTTTT#TT
-8 ....................TTTTTTTTTTT
-9 ....................TTTTTTTTTTT
-10 ....................TTTTTTTTTTT
T X y
0 0 0 = 0
1 7 +6 = 7
2 13 +5 = 7 + 6
3 18 +4 = 7 + 6 + 5
4 22 +3 = 7 + 6 + 5 + 4
5 25 +2
6 27 +1
7 28 +0

1
day17/input.txt Normal file
View File

@@ -0,0 +1 @@
target area: x=124..174, y=-123..-86

130
day18/day18.erl Normal file
View File

@@ -0,0 +1,130 @@
-module(day18).
-export ([solve/0, solve/1]).
-compile ([export_all]).
solve() ->
solve(['1']),
solve(['2']),
init:stop().
solve(['1']) ->
io:format("The solution to ~p puzzle1 is: ~p~n", [?MODULE, solve(1)]);
solve(1) ->
solution1();
solve(['2']) ->
io:format("The solution to ~p puzzle2 is: ~p~n", [?MODULE, solve(2)]);
solve(2) ->
solution2().
solution1() ->
{ok, IO} = file:open("input.txt", 'read'),
Ans = maybe_reduce(read_line(IO), IO),
file:close(IO),
magnitude(Ans).
solution2() ->
{ok, IO} = file:open("input.txt", 'read'),
Numbers = read_all_lines(read_line(IO), IO, []),
file:close(IO),
io:format("total:~p lines: ~p~n", [length(Numbers), Numbers]),
max_magnitude(Numbers).
read_all_lines('eof', _IO, Acc) ->
Acc;
read_all_lines(Line, IO, Acc) ->
read_all_lines(read_line(IO), IO, [Line|Acc]).
read_line(IO) ->
case file:read_line(IO) of
{ok, Line} ->
{ok, Tokens, _} = erl_scan:string(Line ++ "."),
{ok, Term} = erl_parse:parse_term(Tokens),
Term;
'eof' -> 'eof'
end.
max_magnitude(Numbers) when is_list(Numbers) ->
lists:max([ max_magnitude(lists:split(I, Numbers)) || I <- lists:seq(1, length(Numbers))]);
max_magnitude({List1, List2}) ->
[H|T] = lists:reverse(List1),
max_magnitude(H, T ++ List2).
max_magnitude(Number, Rest) ->
lists:foldl(fun(N, MaxMag) ->
case magnitude(reduce([Number, N])) of
Mag when Mag > MaxMag -> Mag;
_ -> MaxMag
end
end, 0, Rest).
magnitude(A) when is_integer(A) -> A;
magnitude([A,B]) ->
(3 * magnitude(A)) + (2 * magnitude(B)).
maybe_reduce(A, IO) ->
case read_line(IO) of
'eof' -> A;
B ->
maybe_reduce(reduce([A,B]), IO)
end.
reduce(N) ->
case maybe_explode(N, 0) of
{true, New, _, _} ->
reduce(New);
false ->
case maybe_split(N) of
{true, New} ->
reduce(New);
false ->
N
end
end.
maybe_explode([A,B], Depth) when Depth >= 4, is_integer(A), is_integer(B) ->
{true, 0, A, B};
maybe_explode([A,B], Depth) ->
case maybe_explode(A, Depth+1) of
{true, New, AddA, AddB} ->
{true, [New, add_explode({b, AddB}, B)], AddA, 0};
false ->
case maybe_explode(B, Depth+1) of
{true, New, AddA, AddB} ->
{true, [add_explode({a, AddA}, A), New], 0, AddB};
false ->
false
end
end;
maybe_explode(N, _) when is_integer(N) ->
false.
add_explode({_, Add}, Num) when is_integer(Num) ->
Add + Num;
add_explode({b, Add}, [A,B]) ->
[add_explode({b, Add}, A), B];
add_explode({a, Add}, [A,B]) ->
[A, add_explode({a,Add}, B)].
maybe_split(N) when is_integer(N) ->
case N > 9 of
true ->
Left = N div 2,
Right = case Left*2 == N of true -> Left; false -> Left+1 end,
{true, [Left, Right]};
false ->
false
end;
maybe_split([A, B]) ->
case maybe_split(A) of
{true, NewA} ->
{true, [NewA, B]};
false ->
case maybe_split(B) of
{true, NewB} ->
{true, [A, NewB]};
false ->
false
end
end.

100
day18/input.txt Normal file
View File

@@ -0,0 +1,100 @@
[[[9,2],[[2,9],0]],[1,[[2,3],0]]]
[[[[2,0],2],[[6,4],[7,3]]],[0,[[3,0],[0,6]]]]
[[[[7,2],2],[9,[6,5]]],[[2,4],5]]
[[[[7,8],2],1],[[[5,4],[2,9]],[7,8]]]
[[[0,7],[1,[6,6]]],[[[0,7],9],4]]
[[[3,[9,6]],[5,1]],[[[0,1],6],[[7,6],0]]]
[[[3,0],[7,[4,0]]],[4,[[6,6],[5,3]]]]
[[[1,[4,8]],[2,[5,8]]],[[[3,6],[2,2]],[[3,8],[7,0]]]]
[9,[[[5,0],[0,3]],[2,[2,6]]]]
[[[3,[8,2]],[[8,0],5]],[[[7,6],[4,9]],[7,5]]]
[[7,[[4,1],9]],[5,1]]
[[[5,[7,5]],1],[8,[5,8]]]
[[[[0,2],7],[[1,4],[9,8]]],[[3,[0,3]],7]]
[[[[4,3],[7,4]],[6,[6,4]]],[8,0]]
[[[1,1],1],[[5,[2,7]],7]]
[[[5,4],5],[[7,[6,3]],[[8,4],6]]]
[[[7,9],[[4,4],[0,0]]],[[[8,6],6],[2,[6,4]]]]
[[[[4,7],[4,9]],3],[[[7,1],[8,6]],[9,[8,2]]]]
[6,[6,[2,9]]]
[[4,[[5,5],[5,0]]],[[[3,4],[9,5]],[8,6]]]
[2,[0,[2,5]]]
[[[4,[7,1]],[2,8]],[[7,0],[[1,6],1]]]
[[[3,4],[[7,8],[6,7]]],[[[6,2],[1,2]],5]]
[[[8,[0,8]],[[9,9],0]],[[[3,5],[4,2]],7]]
[[0,[[0,3],2]],[4,1]]
[[[[0,4],6],7],[[4,[9,1]],3]]
[[0,[[7,0],8]],[2,[8,[8,2]]]]
[[[[3,6],2],[9,4]],[6,[[7,9],[4,5]]]]
[[[[4,9],1],[[9,6],[8,8]]],[[7,[7,6]],[[8,3],[9,0]]]]
[2,0]
[[[[8,2],0],[3,5]],[[7,2],0]]
[[[[1,9],9],6],[9,[[9,3],[8,7]]]]
[[[9,[4,0]],[[7,1],[4,4]]],[[4,[2,3]],[8,7]]]
[[[[9,7],[5,6]],[4,[6,7]]],7]
[5,[[[8,2],8],[6,[7,9]]]]
[0,[[9,[0,1]],[[8,3],7]]]
[[[[4,5],[4,2]],[[5,2],[3,1]]],[[[3,1],[8,5]],8]]
[[0,4],[[2,[2,6]],[[1,1],3]]]
[[[0,8],[7,[5,8]]],7]
[[[7,2],[[6,6],[2,7]]],[[0,[9,3]],2]]
[[[[0,9],2],[[6,0],4]],3]
[[5,[[9,6],9]],[[6,[1,2]],[1,[6,2]]]]
[[[[3,9],5],[9,[7,2]]],[5,[[3,4],[0,6]]]]
[[2,[6,7]],[0,[[2,0],7]]]
[[2,[[5,4],[2,1]]],[2,[[8,7],[5,3]]]]
[[[[0,4],[2,5]],[1,2]],[5,[8,[0,3]]]]
[[[[9,2],[3,2]],[[2,9],4]],5]
[[[[8,9],5],1],[9,3]]
[[5,2],[3,[[8,5],2]]]
[[[0,1],[7,8]],[[[6,2],4],[[6,2],[9,5]]]]
[[[[9,6],5],2],2]
[[[[3,2],3],3],[[[0,1],1],[[8,4],8]]]
[[4,[2,[3,0]]],[[6,[7,0]],6]]
[[6,[[7,8],3]],[[[2,7],4],9]]
[0,2]
[[[9,1],[[3,7],[6,0]]],[[0,[4,1]],[[5,4],7]]]
[[[3,[9,4]],8],[[5,3],2]]
[[6,6],[[[0,5],[0,9]],[[5,5],4]]]
[[[[1,2],4],[[2,4],[8,0]]],[0,[[4,4],[5,8]]]]
[0,[[[9,0],3],[8,4]]]
[[4,5],[[[9,9],[3,5]],[8,[1,4]]]]
[[7,8],[[[3,1],[7,0]],[[4,7],[9,1]]]]
[[4,[2,[1,9]]],[[6,[6,1]],[[0,3],3]]]
[[[5,[0,9]],6],[[[3,4],[9,6]],[[4,0],[0,4]]]]
[[[1,5],[8,[2,8]]],[[5,[0,8]],[[0,7],[4,6]]]]
[[9,[0,2]],[[3,3],[3,1]]]
[[[[2,8],[5,9]],[2,[1,5]]],9]
[[3,[[8,9],[3,1]]],[[[9,0],7],[[0,4],3]]]
[[[[1,5],2],[5,[5,9]]],[5,[[0,1],[0,2]]]]
[6,[[[0,4],8],[[8,2],[5,5]]]]
[[[[7,7],5],[[8,2],7]],[2,5]]
[[[1,1],[[7,8],0]],3]
[[6,[[4,2],9]],[[[5,4],4],3]]
[[[[5,8],3],[[0,4],9]],[[[2,9],2],[3,4]]]
[[0,[4,8]],6]
[[[[9,5],[1,9]],[[3,7],[5,5]]],8]
[[1,9],6]
[[[4,[1,5]],3],0]
[[[2,[6,9]],5],[[5,7],[5,[7,1]]]]
[[[[3,1],[7,3]],[[1,0],[4,6]]],[[[4,9],[4,1]],[9,[2,0]]]]
[[[5,0],[[9,4],6]],[1,[[0,4],[9,9]]]]
[[[[9,8],3],[7,5]],[[[9,5],2],[9,9]]]
[[8,[[8,0],[2,3]]],[[[3,8],[2,6]],[[1,0],0]]]
[[[7,[7,1]],[[6,6],[2,9]]],[[5,[2,0]],[[3,9],[7,4]]]]
[1,[4,[[9,7],[1,3]]]]
[[0,3],[[[4,1],7],[[4,1],[3,0]]]]
[[0,[[7,7],6]],[[4,9],2]]
[[0,8],[4,[4,5]]]
[[[8,[0,5]],[[1,3],[0,5]]],[[2,6],[1,5]]]
[[[[7,6],8],[0,[2,7]]],8]
[8,[[[5,4],8],[[2,1],[7,5]]]]
[[[[7,3],[7,1]],0],[[[7,9],2],3]]
[[8,5],[6,6]]
[[[[5,2],8],7],[[[6,8],[1,0]],[[0,0],1]]]
[[[[1,0],1],6],[9,8]]
[[[[1,2],7],[1,[2,8]]],[[8,1],[[7,5],2]]]
[[0,6],[[2,8],[9,0]]]
[[[0,[7,7]],[2,[0,8]]],[[[7,4],4],[7,[4,0]]]]
[[[2,[9,3]],[[3,7],3]],[[[9,7],[5,6]],8]]
[[2,[[8,7],2]],[[8,[1,8]],[[7,2],1]]]

BIN
day5/day5

Binary file not shown.

View File

@@ -1,5 +0,0 @@
2199943210
3987894921
9856789892
8767896789
9899965678