-
Notifications
You must be signed in to change notification settings - Fork 0
/
AoC_2023_01.jl
54 lines (42 loc) · 1.7 KB
/
AoC_2023_01.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
module AoC_2023_01
using AdventOfCode;
const AoC = AdventOfCode;
function get_digits_1(l::AbstractString)
first = findfirst(r"\d", l);
r = reverse(l);
last = findfirst(r"\d", r);
return parse(Int64, l[first]*r[last])
end
function get_digits_2(l::AbstractString)
idx_first = Inf;
idx_last = 0;
first = last = "0";
for (lkp, num) in [("one", "1"), ("two", "2"), ("three", "3"), ("four", "4"), ("five", "5"), ("six", "6"), ("seven", "7"), ("eight", "8"), ("nine", "9"), ("zero", "0"),
("1", "1"), ("2", "2"), ("3", "3"), ("4", "4"), ("5", "5"), ("6", "6"), ("7", "7"), ("8", "8"), ("9", "9"), ("0", "0")]
idx = findall(lkp, l)
(isempty(idx) || isnothing(idx)) && continue;
if idx[1][1] < idx_first
idx_first = idx[1][1];
first = num;
end
if idx[end][1] > idx_last
idx_last = idx[end][1];
last = num;
end
end
return parse(Int64, first*last)
end
solve_part_1(inputs) = sum(get_digits_1.(inputs));
solve_part_2(inputs) = sum(get_digits_2.(inputs));
function solve(bTestCase::Bool = false)::Tuple{Any, Any};
lines = @getinputs(bTestCase);
lines2 = bTestCase ? @getinputs(bTestCase, "_2") : lines;
part1 = solve_part_1(lines);
part2 = solve_part_2(lines2);
return (part1, part2);
end
# @time (part1, part2) = solve(true); # Test
@time (part1, part2) = solve();
println("\nPart 1 answer: $(part1)");
println("\nPart 2 answer: $(part2)");
end # module AoC_23_01