~pmikkelsen/aoc2022

3e345c4f3f329d1e586d97f11cd2183583114ffd — Peter Mikkelsen 1 year, 7 months ago bf7ed4e
day4
2 files changed, 1018 insertions(+), 4 deletions(-)

M aoc.pl
A input4.txt
M aoc.pl => aoc.pl +18 -4
@@ 6,6 6,7 @@
:- use_module(library(dcgs)).
:- use_module(library(dif)).
:- use_module(library(ordsets)).
:- use_module(library(charsio)).
:- use_module(library(debug)).
:- use_module(library(time)).
:- set_prolog_flag(double_quotes, chars).


@@ 22,6 23,7 @@ solution(Day, Part, Result) :-
solve(1, Part, R) --> parse_day1(P), { solve_day1(Part, P, R) }.
solve(2, Part, R) --> parse_day2(Part, P), { solve_day2(P, R) }.
solve(3, Part, R) --> parse_day3(Part, R).
solve(4, Part, R) --> parse_day4(Part, R).

% Time the stuff and test that I got the correct answer
% It will print the time for each solution, then a 0 for the first fail,


@@ 33,7 35,9 @@ test(results) :-
	solution(2, 1, 15422),
	solution(2, 2, 15442),
	solution(3, 1, 8240),
	solution(3, 2, 2587).
	solution(3, 2, 2587),
	solution(4, 1, 466),
	solution(4, 2, 865).

%% Parsers for each day



@@ 92,6 96,11 @@ day3_group(S) -->
	}.

% day4
parse_day4(Part, R) --> day4_range(Part, R0), !, parse_day4(Part, R1), {R is R0 + R1}.
parse_day4(_, 0) --> "".
day4_range(Part, R) -->
	integer(A), "-", integer(B), ",", integer(C), "-", integer(D), nl,
	{ day4_contains(Part,A,B,C,D) -> R = 1 ; R = 0 }.
% day5
% day6
% day7


@@ 129,10 138,10 @@ integer(N) -->
	digits(Ds),
	{ catch(number_chars(N, Ds), _, fail), ! }.

digits([D|Ds]) --> digit(D), digits(Ds).
digits([D]) --> digit(D).
digits([D|Ds]) --> digit(D), !, digits(Ds).
digits([]) --> "".

digit(D) --> [D], { member(D, "0123456789") }.
digit(D) --> [D], { char_type(D, decimal_digit) }.

input_file_name(Day) --> "input", integer(Day), ".txt".



@@ 173,6 182,11 @@ day2_win(scissors, paper).
day3_value(C, V) :- nth1(V, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", C).

% day4
day4_contains(1,A,B,C,D) :- [C,D] ins A..B.
day4_contains(1,A,B,C,D) :- [A,B] ins C..D.
day4_contains(2,A,B,C,_) :- C     in  A..B.
day4_contains(2,A,_,C,D) :- A     in  C..D.

% day5
% day6
% day7

A input4.txt => input4.txt +1000 -0
@@ 0,0 1,1000 @@
15-60,14-59
32-80,17-79
47-80,79-80
64-64,12-63
93-93,8-92
35-41,34-41
7-52,7-8
28-95,28-94
43-99,2-43
74-77,75-78
44-98,55-69
2-52,53-53
71-73,71-72
35-49,48-49
84-85,22-85
88-90,7-89
18-85,5-85
4-4,3-82
22-79,21-79
6-6,6-84
61-84,61-84
66-95,16-94
12-46,47-47
93-93,55-93
23-95,22-99
16-16,16-58
67-81,65-80
58-66,24-66
39-46,47-79
9-9,9-89
18-89,19-68
4-89,10-47
5-79,3-5
12-90,20-91
78-83,79-89
6-80,5-81
37-98,37-38
33-98,32-97
42-78,41-43
31-97,2-98
24-72,23-73
6-88,5-29
80-93,81-94
5-85,4-84
21-81,4-89
45-84,22-44
57-80,81-81
46-76,47-77
22-32,21-72
5-29,4-29
11-78,10-78
61-62,61-92
17-24,18-24
57-93,56-97
1-98,4-50
5-5,5-42
10-92,10-11
8-86,22-87
10-52,9-9
3-13,10-14
1-46,3-56
85-85,7-84
88-89,88-96
1-93,1-93
58-71,53-60
79-96,30-79
5-56,5-57
42-98,41-99
3-97,96-97
55-65,54-56
73-93,93-94
18-98,99-99
2-57,1-69
41-42,41-77
10-51,50-52
73-73,73-89
31-91,31-31
6-27,6-61
1-1,1-84
21-56,57-57
30-31,30-31
24-72,16-72
59-65,56-65
18-18,17-99
87-87,32-88
30-30,30-60
12-95,13-95
29-66,6-65
2-52,2-53
93-93,2-93
2-98,3-3
19-90,15-18
12-83,3-13
21-99,22-22
5-54,5-54
43-73,44-73
15-26,7-25
52-94,53-95
67-68,2-67
2-92,91-92
72-91,73-78
20-87,21-87
27-56,10-56
20-88,89-89
5-90,10-90
11-20,12-21
4-86,4-86
44-46,45-98
10-11,10-63
8-9,13-98
23-46,23-61
71-87,15-86
33-40,19-39
7-93,8-93
18-18,17-76
3-58,8-59
42-94,42-42
12-86,44-87
20-93,93-96
12-54,13-36
41-77,41-76
20-20,19-96
13-91,12-90
3-98,4-4
6-67,6-66
25-61,30-54
61-61,15-61
24-81,24-24
45-69,46-68
56-66,52-98
50-67,59-68
2-97,3-72
33-79,34-51
56-92,55-91
3-69,1-68
34-34,33-34
93-93,48-92
22-69,21-30
2-7,16-83
87-95,19-88
93-98,94-97
42-95,43-95
6-7,6-83
23-95,19-86
30-94,19-98
59-94,14-95
24-84,24-83
31-36,32-35
20-57,21-57
2-46,2-2
9-44,6-9
25-64,26-65
21-96,43-97
1-5,4-50
58-72,57-59
96-97,22-96
3-63,31-64
18-67,16-16
38-42,37-43
9-18,18-82
53-59,52-52
6-99,6-6
56-89,89-97
88-90,13-89
24-26,25-85
46-87,30-45
63-64,18-64
12-94,9-13
51-98,50-50
8-18,7-17
25-25,25-32
5-39,39-40
7-18,7-7
23-65,65-94
17-43,16-44
32-91,90-90
3-5,2-5
28-39,27-42
12-13,12-65
2-91,48-92
93-98,72-87
31-43,31-42
12-69,12-59
2-14,14-81
17-89,17-90
20-37,38-62
6-36,3-22
6-97,5-7
71-81,8-77
18-61,61-84
86-86,22-85
9-27,12-79
1-46,8-47
12-85,85-98
57-66,58-65
62-97,3-99
5-80,6-20
39-88,38-88
54-63,13-64
17-40,39-57
9-99,10-82
24-37,24-24
64-81,65-81
2-47,48-48
5-6,6-6
26-42,38-91
17-81,80-81
4-7,5-8
23-43,23-34
98-99,3-97
43-75,74-75
58-78,18-78
60-78,60-78
10-95,88-96
77-78,20-78
36-70,36-57
19-65,20-66
1-3,3-15
1-5,5-47
23-80,22-22
38-73,29-38
41-41,40-57
8-96,9-89
28-28,29-96
22-85,85-97
20-92,21-92
35-53,54-54
45-49,47-48
20-90,82-91
38-92,37-93
1-64,55-62
56-75,32-55
13-98,14-92
4-16,3-16
52-75,52-74
1-86,1-87
12-81,12-82
35-36,35-97
9-67,67-68
14-97,13-14
6-6,5-69
73-90,48-95
24-27,26-28
25-52,26-50
75-75,75-98
22-96,7-18
60-88,60-89
47-49,8-48
19-44,36-67
4-5,9-96
30-74,75-75
10-10,11-77
47-79,80-80
12-68,12-69
38-79,52-91
29-30,4-29
40-88,40-49
4-39,4-39
15-83,82-84
69-96,4-96
5-93,2-94
49-50,48-48
68-84,68-84
16-74,74-86
7-86,6-8
47-80,48-74
3-69,69-71
49-58,60-78
31-59,32-60
4-64,4-64
59-91,91-91
90-90,9-89
70-85,44-86
24-62,62-85
1-11,2-94
15-99,19-95
12-32,31-32
56-61,56-72
7-44,1-7
1-70,3-71
29-62,1-61
7-97,8-97
90-92,48-91
54-75,53-74
2-98,98-98
2-69,70-70
45-88,64-89
28-60,28-28
10-94,27-98
32-32,32-49
63-64,31-62
15-69,16-70
16-23,13-16
20-66,66-67
16-99,17-93
62-64,7-63
97-97,41-78
41-75,27-39
2-38,37-37
13-96,95-96
7-35,42-75
39-40,3-40
4-89,2-5
22-35,35-36
6-59,58-59
23-29,9-28
77-77,76-76
12-48,11-96
57-85,56-84
90-92,68-91
97-98,62-98
23-69,22-69
4-85,3-95
50-87,33-88
33-74,32-74
20-67,21-47
5-90,6-91
50-98,50-98
4-94,1-26
4-38,39-78
91-91,11-90
54-99,55-99
80-84,84-85
33-91,16-33
62-83,29-61
23-67,23-68
26-94,29-91
21-84,32-84
48-61,28-48
15-15,15-76
20-26,58-79
75-75,47-74
30-63,31-63
16-95,55-96
45-92,44-66
59-95,58-99
19-19,18-19
30-36,34-36
5-8,3-9
6-62,6-6
90-90,67-89
31-79,31-84
20-24,19-23
33-72,33-86
59-95,1-59
4-91,4-97
92-93,75-92
42-95,18-99
95-96,20-95
23-23,22-50
5-99,5-6
16-76,17-17
48-59,49-76
51-91,13-91
10-11,5-10
19-95,18-18
41-41,1-41
40-64,40-78
56-84,12-83
17-63,16-84
15-49,15-15
31-91,90-92
38-40,8-85
46-96,46-79
54-72,54-54
2-96,8-97
2-96,1-98
15-86,16-44
10-65,9-65
79-79,9-78
18-70,17-70
68-83,14-68
28-68,26-29
18-54,17-21
61-82,20-60
47-76,47-93
6-79,79-85
13-13,13-91
40-40,40-92
9-76,18-83
17-40,18-98
45-60,10-54
26-48,48-63
15-58,14-92
69-70,22-69
5-88,5-89
42-44,46-89
38-76,44-77
1-73,2-79
52-98,49-82
5-94,29-99
13-63,13-94
72-87,71-86
27-94,93-94
35-94,1-93
43-49,42-48
72-94,72-72
43-86,42-85
1-3,3-94
42-80,30-92
22-85,23-84
39-43,44-44
36-36,28-35
12-46,13-78
14-98,14-98
69-78,73-79
91-98,74-91
10-11,10-96
32-40,25-39
50-81,12-80
88-89,6-88
48-69,7-48
4-8,9-93
74-84,74-75
27-82,27-82
1-97,1-1
43-69,43-68
13-27,14-27
9-27,32-78
22-78,22-23
47-58,46-46
19-98,3-98
27-78,27-78
74-90,4-74
44-46,31-45
35-81,6-55
6-60,6-59
10-32,32-33
23-23,23-53
4-87,4-86
96-96,6-95
1-37,2-38
77-88,74-87
3-92,5-93
15-96,16-92
37-58,34-36
40-75,38-74
2-62,55-62
43-93,43-43
77-93,70-77
56-76,56-77
2-2,3-88
2-53,53-60
30-31,29-36
30-30,29-88
42-79,41-80
75-75,28-74
18-88,8-87
13-63,64-64
3-48,46-49
12-30,12-12
3-99,4-94
3-3,4-64
30-76,29-29
12-60,11-54
9-95,9-95
66-73,61-73
10-11,10-11
42-72,42-44
8-89,10-89
25-74,75-75
33-44,34-45
28-78,27-77
48-97,37-93
46-65,10-64
17-97,68-96
50-93,93-95
22-96,23-97
2-20,1-86
6-60,60-80
33-65,66-66
23-23,16-22
41-89,40-62
17-96,97-97
70-71,9-70
11-24,11-35
8-48,49-49
78-92,75-91
21-98,99-99
12-45,12-13
36-36,35-58
9-15,15-98
43-61,61-89
52-53,52-74
2-51,1-5
29-29,28-75
1-45,3-47
5-13,12-13
17-86,17-17
4-99,5-99
77-88,76-90
50-70,50-51
3-88,2-87
4-55,4-75
8-22,8-8
76-99,77-96
14-72,13-90
1-62,63-94
11-74,5-10
37-65,65-65
10-73,11-91
34-78,21-34
47-61,46-62
11-86,8-10
14-39,14-40
8-81,82-89
85-86,18-85
14-91,66-97
20-51,19-43
1-57,3-57
14-52,45-53
37-92,36-99
84-84,32-83
45-88,44-81
30-80,80-92
6-82,6-6
9-9,9-87
26-28,21-27
1-92,7-93
32-90,33-33
26-44,44-66
24-86,23-86
19-83,84-99
28-40,28-30
18-88,17-87
62-70,71-71
3-86,3-3
20-20,19-90
7-18,4-17
29-41,41-42
24-57,40-58
15-15,15-54
19-47,19-20
63-64,21-63
29-30,21-30
61-62,16-61
16-78,8-15
63-74,63-63
68-69,31-69
3-99,4-99
28-28,29-39
72-85,3-67
64-67,68-68
75-97,74-74
11-99,80-88
10-93,24-79
93-94,2-94
1-98,1-99
2-95,2-2
20-75,21-75
26-85,2-26
9-96,9-99
85-85,85-85
59-70,59-70
22-27,23-23
41-42,41-52
2-17,1-16
41-54,55-55
8-89,7-9
13-98,9-13
10-84,3-84
40-90,39-39
12-93,2-93
5-99,4-99
30-81,30-88
1-43,2-54
72-84,81-85
2-34,4-35
7-88,6-88
66-98,65-99
93-94,36-94
66-76,67-77
15-97,15-98
53-60,53-54
1-81,81-86
51-65,17-50
11-51,4-50
16-16,17-82
44-80,45-81
32-39,9-38
51-76,51-75
58-98,59-79
60-61,60-61
7-8,7-87
32-33,32-32
35-85,79-97
20-65,20-66
5-73,6-74
15-76,14-82
43-91,43-99
8-94,42-95
19-92,92-94
2-99,2-2
91-96,5-92
7-94,7-7
82-82,33-82
1-5,1-2
87-88,48-87
88-88,40-88
24-32,10-31
15-82,14-81
18-34,18-33
40-46,39-73
40-64,46-65
3-94,93-95
41-56,57-85
48-56,2-48
79-93,80-94
45-78,44-66
49-77,77-89
29-67,28-28
53-96,95-97
6-44,24-99
7-68,28-84
6-77,76-78
3-99,98-99
11-85,11-85
24-24,25-96
44-51,52-64
88-90,89-98
2-97,3-97
15-16,15-58
5-96,6-92
2-22,5-21
11-11,10-87
95-98,75-96
8-69,3-7
25-81,26-74
25-99,24-68
92-93,17-92
2-73,2-2
87-95,11-87
20-93,15-97
7-98,49-98
4-79,4-31
50-57,50-57
67-68,34-68
57-68,72-90
3-33,10-34
26-27,26-80
8-8,8-82
93-93,2-93
12-86,1-12
4-8,8-89
14-49,15-50
5-35,33-33
92-93,6-93
28-76,76-93
47-48,47-85
7-94,2-43
43-85,22-43
71-91,90-91
14-92,14-91
5-8,9-78
13-33,33-33
32-93,37-86
37-89,37-90
51-53,11-52
11-38,37-37
4-85,4-89
6-10,7-14
21-33,20-91
9-92,92-92
29-96,97-97
13-94,12-98
11-96,12-97
35-39,39-70
31-60,31-95
18-84,17-83
5-6,5-89
63-64,40-63
89-90,6-90
88-89,89-90
69-83,76-83
16-82,81-82
5-50,49-80
9-98,9-99
75-76,18-75
1-46,16-46
45-52,46-52
18-43,17-19
8-80,19-81
11-11,11-86
20-49,19-49
54-89,53-90
9-9,9-95
21-86,17-21
57-95,33-94
13-14,13-53
7-21,8-21
3-24,12-25
89-91,45-90
82-83,22-82
57-63,64-72
6-7,6-70
19-97,18-18
30-56,30-31
24-96,25-98
1-74,7-99
24-90,25-63
44-57,43-58
62-85,86-86
15-49,20-50
20-69,20-69
38-66,67-77
8-27,7-91
8-21,15-51
19-83,9-10
23-23,20-22
19-19,19-88
4-9,1-8
15-69,16-16
20-42,42-69
43-47,7-46
5-93,6-94
10-55,9-54
8-91,9-27
42-97,43-98
20-82,14-81
19-31,19-70
7-93,7-8
28-66,17-28
65-96,17-95
40-78,77-79
51-97,53-96
25-40,11-25
19-97,20-96
23-88,40-88
81-81,35-80
71-86,34-86
13-88,14-89
63-84,64-85
56-98,7-97
31-82,30-81
58-98,58-99
36-47,46-46
80-80,20-79
59-92,19-91
19-66,63-84
70-70,4-70
66-74,65-79
5-68,1-4
17-52,11-17
6-77,78-78
10-11,10-25
13-96,22-61
5-20,6-31
18-61,19-50
6-35,6-34
12-91,11-90
1-1,2-21
2-98,1-99
28-98,25-38
34-63,35-76
20-85,84-85
11-13,13-31
72-74,2-73
3-10,6-25
46-46,46-88
34-59,32-60
77-77,23-77
11-12,11-83
4-83,5-84
10-89,9-88
82-90,79-83
1-60,4-61
29-93,28-92
1-47,36-48
51-94,45-93
30-62,30-33
3-96,4-97
57-96,56-96
44-44,44-94
44-58,44-45
3-16,26-84
31-32,31-78
41-96,42-96
34-63,62-90
20-22,16-23
61-99,60-98
3-3,4-21
2-46,11-47
7-8,7-64
7-47,47-70
49-87,50-89
22-95,21-77
87-87,18-86
30-30,30-99
54-66,65-66
77-77,37-76
11-32,13-32
93-95,19-93
3-93,1-92
37-46,36-55
12-76,76-85
18-94,23-74
10-99,98-99
23-23,24-31
4-6,9-96
42-56,9-45
9-50,14-51
22-82,23-83
21-56,56-92
1-7,1-1
96-96,1-96
61-70,27-70
2-38,9-37
19-20,20-56
61-66,1-67
42-44,2-43
6-6,6-90
40-89,4-14
96-96,11-96
54-77,77-88
29-81,29-81
12-77,5-76
4-86,3-86
57-58,20-57
18-18,19-62
9-56,10-57
26-91,35-92
6-56,7-81
1-78,1-61
76-79,43-76
96-99,32-97
27-30,28-31
94-95,21-94
22-25,18-24
40-89,39-41
20-26,20-20
28-77,77-88
2-79,14-80
17-34,20-33
26-89,25-88
5-29,20-73
9-78,9-77
11-12,11-79
25-62,24-26
1-94,1-2
90-91,51-90
8-96,9-97
6-20,17-40
42-82,24-42
10-77,10-76
32-88,33-87
58-63,62-62
64-70,64-71
34-54,55-55
88-90,19-88
77-86,77-78
3-88,88-89
42-45,31-44
99-99,88-97
81-99,18-81
7-95,11-88
4-72,2-92
7-7,7-26
10-90,9-89
2-2,3-65
7-49,8-49
51-98,52-92
27-70,2-67
65-73,37-69
81-83,81-82
40-55,41-54
4-38,29-90
53-57,36-57
79-79,13-78
18-83,19-84
11-91,10-93
7-79,8-80
18-56,18-18
80-80,32-79
2-44,34-63
6-73,73-74
12-70,13-71
25-57,15-56
40-95,40-41
1-63,1-2
7-7,8-71
23-94,23-23
51-89,46-88
67-67,8-66
24-91,21-25
67-72,9-71
8-97,9-97
50-60,36-60
1-56,27-32
2-6,6-91
67-73,68-74
30-30,30-37
4-69,5-68
94-95,10-95
30-77,77-78
10-95,10-60
37-93,2-32
8-99,7-7
57-89,58-99
1-30,13-54
31-97,32-32
82-82,18-82
10-17,15-18
74-87,75-88
21-84,82-86
11-90,12-17
26-98,97-99
35-95,35-95
2-4,3-75
3-23,24-60
85-94,85-95
1-3,3-22
53-78,53-79
1-41,3-40
54-87,54-65
3-91,17-90
41-75,40-74
44-78,43-77
75-80,41-74
43-58,36-47
61-63,62-64
16-88,16-87
4-93,5-94
56-93,93-98
27-66,27-27
51-75,35-74
50-77,38-76
51-78,29-77
12-19,20-86
4-90,1-71
13-15,14-25
75-84,74-74
7-90,6-65
56-73,72-74
20-21,20-83
7-35,3-35
1-5,5-46
30-90,46-90
10-78,3-87
25-87,25-25
5-7,6-92
24-85,25-84
14-87,16-87
3-87,4-88
53-64,52-52
71-73,72-73
19-33,32-43
3-68,24-69
4-43,9-44
62-62,62-69
32-38,37-38
14-68,68-70
64-88,88-95
27-81,81-84
2-24,24-24
52-52,52-90
1-97,11-95
9-94,4-93
5-33,4-24
37-37,36-76
1-2,3-64
85-93,10-85
39-85,38-84
47-48,16-47
30-49,31-50
46-85,45-45
7-86,4-85
23-66,66-67
54-95,16-27
2-3,7-59
57-57,35-56
20-21,20-90
35-58,34-54
14-91,91-93
9-99,16-97
24-50,25-50
18-27,19-86
78-92,79-79
23-90,53-91
27-73,69-70
90-94,25-90
8-68,1-67
50-87,5-50
25-67,24-67
3-98,8-97
85-99,57-98
34-34,17-35
8-80,81-81
14-98,15-99
1-2,1-99
24-49,23-43
36-39,35-39
1-25,11-26
2-51,6-97
33-58,23-57
25-80,24-26
26-82,25-25
44-95,43-94
61-68,9-62
27-55,28-48
22-88,20-23