summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrfeas <38209077+0xfea5@users.noreply.github.com>2025-08-27 14:42:06 +0300
committerOrfeas <38209077+0xfea5@users.noreply.github.com>2025-09-01 04:51:37 +0300
commit0d7d45995a34e3bfaefa7bb90eb4c1314acd027e (patch)
tree50d1eac6171855385f63a391dc0fd2e3113375c0
parentday01/: rewrite solution to be in line with the template (diff)
downloadaoc24-0d7d45995a34e3bfaefa7bb90eb4c1314acd027e.tar.gz
aoc24-0d7d45995a34e3bfaefa7bb90eb4c1314acd027e.zip
day02: done
-rw-r--r--day02/Makefile1
-rw-r--r--day02/input.txt1000
-rw-r--r--day02/solution.cpp81
-rw-r--r--day02/tests/test1.input6
-rw-r--r--day02/tests/test1.output2
5 files changed, 1090 insertions, 0 deletions
diff --git a/day02/Makefile b/day02/Makefile
new file mode 100644
index 0000000..2fa98c0
--- /dev/null
+++ b/day02/Makefile
@@ -0,0 +1 @@
include ../aoc.mk
diff --git a/day02/input.txt b/day02/input.txt
new file mode 100644
index 0000000..1d08619
--- /dev/null
+++ b/day02/input.txt
@@ -0,0 +1,1000 @@
171 73 74 76 78 80 77
278 81 84 87 87
337 40 43 46 50
412 13 15 17 18 19 21 27
54 5 2 4 5 6
653 54 56 58 59 56 54
726 29 31 34 35 33 35 35
860 62 61 63 64 68
989 90 91 94 93 98
1042 43 45 45 47
1181 84 86 87 90 90 91 90
1253 56 56 58 58
1330 33 35 36 36 40
141 3 4 7 10 12 12 17
1556 58 60 61 65 67
161 3 4 8 10 12 10
1736 38 40 44 47 47
1821 22 23 27 28 29 31 35
1932 34 37 40 44 45 48 54
2055 58 59 66 67 70 73
2130 33 39 40 42 39
2270 73 76 81 81
234 5 11 12 13 17
2477 79 82 87 88 95
2555 52 53 54 56 57
2679 76 78 79 76
2716 15 17 19 20 20
2871 70 73 74 76 80
2981 79 82 85 87 89 96
3026 23 26 23 25 28 30
3174 72 75 77 79 76 77 74
3256 53 56 59 62 63 62 62
3342 41 40 41 45
3440 39 40 38 41 43 44 49
3520 17 18 18 20 22 25
369 8 8 11 10
3785 84 84 87 89 90 93 93
3889 88 89 89 93
3935 34 37 40 43 43 49
4062 61 64 66 68 70 74 76
4153 50 53 54 55 59 60 57
4224 21 23 27 29 31 31
4355 53 56 59 63 66 70
4412 11 13 17 22
4578 77 82 85 87
4672 71 74 77 84 83
4772 69 72 78 81 82 82
4813 12 15 17 22 23 27
4982 79 85 88 93
5076 76 78 80 82 83 85
5191 91 93 95 93
5224 24 27 30 30
5320 20 23 26 27 30 31 35
5465 65 66 67 73
5567 67 65 68 71
564 4 1 3 4 7 8 6
5726 26 24 27 27
584 4 7 8 7 8 9 13
5939 39 40 41 38 41 46
6037 37 39 39 40 43
6174 74 77 77 80 81 83 80
6267 67 67 70 71 73 73
6383 83 86 87 87 90 94
6485 85 88 90 91 92 92 98
6528 28 30 34 37 40 43
6650 50 53 57 54
6731 31 34 36 37 39 43 43
6850 50 52 54 58 59 62 66
6944 44 47 49 53 58
7057 57 59 62 63 64 69 72
7173 73 76 82 85 86 83
7246 46 49 56 58 58
7335 35 36 42 46
748 8 14 15 18 19 25
7531 35 36 38 40 41 42
765 9 12 14 11
7739 43 46 48 49 52 54 54
7814 18 19 21 24 28
7911 15 17 18 23
8058 62 63 60 62
8178 82 80 81 82 85 88 85
8277 81 84 85 83 84 84
8340 44 41 44 45 46 49 53
8440 44 46 43 44 51
854 8 10 10 11 13 15 18
865 9 11 11 12 15 16 13
8716 20 23 23 25 25
8868 72 75 75 78 82
8961 65 65 67 70 77
9073 77 81 84 85 87
9115 19 21 22 26 27 28 26
9216 20 22 26 29 31 31
9376 80 84 86 89 93
9443 47 49 50 54 61
9560 64 66 73 74 76 79 81
9679 83 85 87 90 92 98 95
9733 37 39 40 45 45
9837 41 47 50 51 53 57
9950 54 59 62 65 72
10025 30 32 33 34 37
10164 71 73 75 78 77
10270 76 77 79 82 83 84 84
10325 31 32 34 37 39 42 46
10414 19 21 22 23 24 27 34
10558 64 63 64 67 68 69
10686 93 95 96 94 92
10715 20 19 21 21
10834 40 39 41 42 43 47
10948 54 56 54 57 62
11043 50 52 53 53 54 55
1119 16 19 19 17
11225 30 31 31 32 32
11372 77 78 78 80 82 83 87
11453 60 61 64 64 65 72
11576 82 84 88 89 91 92 93
11655 60 63 67 65
11743 50 52 55 58 62 64 64
11870 77 81 83 87
11916 21 23 27 29 32 38
12074 80 81 83 86 91 92
12140 47 50 51 57 54
12233 39 46 49 51 51
12353 60 66 67 70 73 74 78
12453 59 60 61 67 74
12566 63 60 58 56 57
12688 85 84 83 83
12757 54 51 50 49 45
12826 23 20 19 16 11
12978 75 74 75 73
13048 47 49 46 44 47
13117 15 16 14 11 11
13256 54 55 53 49
13355 54 52 55 49
13480 79 79 77 76
13521 20 17 14 12 12 15
13641 39 38 38 38
13751 49 47 44 44 40
13830 27 27 26 25 18
13937 35 31 28 25
14083 80 76 73 72 71 70 72
14190 87 84 81 79 75 75
14248 47 46 42 40 39 35
14331 29 25 24 21 16
14458 56 49 46 44 43 42
14543 41 39 32 29 30
14617 16 13 6 5 5
14747 46 43 40 37 32 31 27
14886 83 80 79 73 68
14984 85 82 79 78
15028 29 26 25 22 24
15151 52 50 47 44 44
15259 61 58 56 54 50
15321 22 20 18 11
15461 62 60 61 59 57 56 55
15594 97 98 96 93 96
15677 80 77 74 71 68 71 71
15788 91 89 90 86
15824 27 25 24 21 19 20 14
15959 60 60 59 56
16080 82 82 81 79 76 73 75
16123 25 25 23 23
16224 25 23 23 19
16396 97 95 94 94 87
16460 61 59 55 53 50
16588 89 85 83 85
16671 72 69 68 66 63 59 59
16792 95 91 88 84
16896 98 95 91 89 82
16935 37 36 33 30 24 23 22
17052 54 47 45 43 46
17182 85 80 79 79
17214 16 13 6 5 1
17355 58 53 52 51 50 48 41
17426 26 25 23 20 17 16 14
17595 95 92 91 94
17620 20 18 16 13 10 7 7
17729 29 28 26 22
17821 21 19 18 17 16 15 9
17916 16 13 11 14 11
18082 82 81 80 81 82
18152 52 51 50 52 49 46 46
18242 42 41 43 42 41 37
18342 42 41 43 38
18428 28 27 27 25 24
18510 10 8 8 5 3 6
18668 68 66 66 63 61 61
18732 32 30 30 27 25 21
18898 98 98 96 93 91 84
18942 42 39 35 34 31
19089 89 85 82 80 81
19153 53 50 48 45 44 40 40
19225 25 21 18 15 12 8
19368 68 64 63 57
19495 95 92 86 85
19594 94 93 91 88 81 80 83
19626 26 21 18 15 15
19724 24 22 17 13
19828 28 27 26 23 17 16 10
19943 39 37 34 33
20033 29 27 24 23 21 24
20130 26 24 21 19 19
20274 70 67 66 65 62 58
20357 53 50 48 45 38
20461 57 54 53 52 55 53
20538 34 36 33 32 29 27 29
20689 85 83 85 85
20737 33 34 32 28
20891 87 86 84 83 81 82 77
20990 86 84 84 83 82 80 79
21020 16 14 14 16
21198 94 91 91 89 88 87 87
21271 67 64 62 59 58 58 54
21361 57 57 54 53 47
21434 30 28 24 21
21534 30 26 24 27
21616 12 9 7 3 1 1
21775 71 67 64 62 59 56 52
21895 91 89 85 80
21931 27 24 19 16
22055 51 44 41 43
22151 47 40 38 38
22256 52 47 44 40
22360 56 53 51 50 43 37
22430 23 21 18 15 12
22551 44 41 38 35 36
22680 73 71 68 67 67
22748 41 40 39 38 36 33 29
22869 63 61 60 55
22971 66 67 65 63
23048 42 39 37 34 36 38
23192 85 84 85 83 83
23233 27 24 23 26 24 23 19
23316 11 13 12 5
23498 93 90 90 87 84
23518 12 12 11 9 7 4 6
23610 4 4 3 3
23715 9 9 8 5 1
23894 87 86 86 83 76
23960 54 50 48 47 44 42 40
24054 49 45 43 40 41
24183 78 75 73 69 66 66
24231 24 23 19 16 14 10
24389 84 81 77 74 68
24475 70 69 66 60 57 54
24591 84 79 76 78
24666 59 56 54 49 46 46
24728 23 21 14 10
24888 83 81 74 69
2499 12 14 17 20 21 18
25075 76 79 80 82 83 84 84
25115 16 18 20 22 26
25268 69 72 73 78
25375 76 78 76 78 79
25483 86 88 90 92 94 92 90
25555 56 58 60 58 58
25666 69 68 71 75
25758 60 59 60 65
25866 67 69 71 72 72 75 77
25939 42 43 45 47 47 46
26082 84 85 87 90 90 91 91
2611 2 2 4 8
26210 11 12 14 14 15 20
26320 22 25 29 31
26462 64 66 70 69
26567 69 73 75 78 78
26655 57 60 64 68
26714 17 19 20 24 26 31
2682 3 8 10 13
26920 23 26 29 36 34
27069 71 76 78 79 82 82
27131 33 35 38 43 47
27237 39 45 48 50 52 58
27317 15 16 19 20 23 25
27417 14 17 19 22 24 27 24
27546 44 47 49 52 55 56 56
27655 53 55 56 58 60 63 67
2777 5 6 8 11 12 18
27869 67 70 71 72 70 72 74
27988 85 87 86 85
28013 10 12 13 10 12 12
28158 56 57 58 56 60
28268 67 66 68 69 76
2839 7 9 10 12 14 14 15
28434 31 32 35 37 37 36
28526 23 24 25 28 28 30 30
28670 67 68 68 72
28785 82 84 84 85 91
28812 9 13 15 18 20
28956 54 57 61 60
29058 57 58 62 65 65
29160 58 62 64 67 71
29256 55 57 61 63 70
29330 29 36 38 40 41 43 44
29459 56 59 61 67 69 68
29532 30 35 37 40 41 41
29659 57 62 64 67 70 72 76
29765 62 65 68 75 77 82
2985 5 8 10 12 14 15
29959 59 61 64 66 67 70 68
30036 36 37 40 42 43 45 45
30174 74 76 77 81
30227 27 30 31 33 35 36 42
30374 74 76 75 77 79 80
30441 41 40 41 40
30582 82 83 84 82 84 86 86
30640 40 38 41 43 46 50
30718 18 21 20 25
30813 13 13 16 17
30947 47 49 49 47
31017 17 19 19 22 23 24 24
31143 43 45 45 49
3121 1 1 4 9
31343 43 47 49 51 52 55 56
31458 58 60 61 64 68 67
31516 16 19 20 23 27 27
31655 55 58 62 66
31723 23 24 26 28 31 35 42
31876 76 79 84 85 87
31982 82 84 91 89
32044 44 46 51 52 52
32166 66 69 76 77 79 83
32236 36 41 42 45 50
32317 21 23 24 27
32445 49 51 52 55 53
32523 27 29 31 31
32644 48 49 51 52 54 58
3276 10 12 15 20
32866 70 73 72 74
32934 38 41 43 41 40
33028 32 34 32 32
33116 20 23 24 27 29 28 32
33262 66 63 64 67 70 75
33318 22 23 23 26 28
3345 9 10 11 12 12 15 12
33515 19 19 22 24 24
33643 47 49 49 53
33761 65 67 67 73
33812 16 17 21 24 27 28 30
3391 5 8 12 10
34078 82 84 87 89 93 96 96
34170 74 76 78 81 85 88 92
34272 76 77 79 82 86 93
34357 61 62 69 70
34434 38 40 42 45 52 55 52
34554 58 60 65 68 68
34677 81 87 90 92 96
3472 6 11 12 19
34821 26 27 30 32 33
34943 48 50 51 49
35078 84 87 89 91 92 94 94
35142 49 51 54 57 60 63 67
35257 62 65 68 70 77
35385 92 89 90 91 93
35410 15 17 19 18 20 19
35533 40 38 41 42 45 47 47
35617 24 25 27 29 27 31
35783 88 86 87 89 94
35824 30 32 35 35 36 38 39
35978 83 84 84 85 87 88 85
36011 16 17 18 19 19 21 21
36186 91 94 94 98
36243 48 50 50 53 60
36368 74 78 81 82
36430 37 40 43 47 45
36526 33 37 39 39
36648 54 55 58 62 64 65 69
36746 51 53 57 62
36838 45 50 53 55 56
36929 34 40 41 42 43 45 44
3702 8 9 15 16 19 19
3714 9 14 17 18 20 23 27
37220 26 28 33 39
37368 65 64 63 61 62
37411 8 6 3 2 2
37531 30 29 28 25 23 22 18
37690 88 85 83 80 73
37726 24 22 21 19 21 18 17
37820 17 14 13 16 14 16
37910 9 8 10 8 6 3 3
38059 56 54 57 54 51 47
38199 96 95 92 93 92 91 85
38276 74 72 72 70 67
38367 65 63 61 58 58 57 59
38437 35 32 32 30 30
38586 84 81 80 80 79 78 74
38688 85 83 83 80 79 74
38789 87 84 81 77 76
38875 72 70 69 66 62 64
38948 46 45 44 43 39 39
39049 47 46 42 39 37 33
39172 70 68 64 62 57
39282 80 77 72 69 68 66 64
39362 60 58 56 54 49 47 50
39468 65 63 56 53 53
39535 32 31 24 20
39624 23 22 15 8
39756 57 56 55 54 51 50 49
39889 90 89 86 88
39927 30 28 26 24 21 19 19
40089 90 87 86 83 79
40162 65 62 60 57 56 49
40273 74 75 72 69 68 66
40372 74 77 76 73 74
40425 28 29 26 23 20 19 19
40586 87 88 87 85 82 78
40685 88 86 89 86 85 84 79
40717 20 19 18 18 16 15 14
40816 19 16 16 15 16
40992 93 93 91 91
41085 86 85 82 82 80 76
41158 60 60 59 56 51
41275 76 74 70 69 68
41379 82 78 77 76 73 75
41440 42 38 36 34 34
41528 29 27 25 21 20 16
41669 71 67 64 63 57
41739 41 38 36 29 27
41850 52 51 45 44 43 45
41988 90 87 85 78 78
42034 36 34 31 25 23 20 16
42193 94 89 86 84 83 76
42257 57 54 53 50 47 46 43
42386 86 85 83 85
42466 66 65 64 62 61 58 58
42591 91 89 87 84 80
42695 95 92 91 89 87 85 78
42727 27 24 23 26 24 21 20
42881 81 78 75 73 76 73 76
42911 11 12 9 9
43038 38 39 37 36 32
43150 50 47 50 49 42
43219 19 19 17 14 12 10
43319 19 16 13 13 15
4347 7 6 4 3 3 1 1
43525 25 25 24 22 20 16
43653 53 50 48 48 45 38
43728 28 24 22 21 18 17
43878 78 75 73 69 68 70
43997 97 96 93 92 88 88
44056 56 54 50 46
44188 88 87 83 81 80 79 72
44222 22 20 19 16 11 8 7
44342 42 41 40 34 33 35
44434 34 31 24 21 19 16 16
44525 25 18 17 13
44636 36 33 31 29 26 21 16
44756 52 49 47 45
44880 76 73 72 71 70 72
44957 53 52 49 49
45037 33 32 30 28 25 23 19
45197 93 90 88 87 80
45289 85 88 85 82 81 80
45326 22 21 22 24
45498 94 92 89 90 89 89
45540 36 35 33 32 29 31 27
45621 17 14 12 11 8 11 5
45757 53 53 50 49
45876 72 71 71 72
45965 61 58 55 55 55
46025 21 18 18 14
46134 30 30 29 26 23 17
46232 28 24 21 18 15
46398 94 93 91 90 86 89
46417 13 9 6 5 3 3
46579 75 74 70 68 64
46628 24 20 19 16 13 12 6
46772 68 66 63 62 59 53 52
46850 46 45 39 40
46998 94 92 89 83 83
47050 46 44 38 35 34 30
47134 30 24 22 16
47248 43 40 37 34 32
47357 50 47 45 43 46
47498 92 90 88 86 83 82 82
47581 75 72 70 69 68 64
47620 14 12 11 9 4
47722 17 18 17 16 14 13
47851 44 45 44 41 44
47953 46 45 48 48
48041 34 37 34 31 28 27 23
48157 50 47 46 45 44 47 41
48231 26 26 23 20 18
48392 87 86 86 83 84
48491 84 82 82 81 79 76 76
48559 54 54 51 50 49 47 43
48631 26 26 23 22 15
48761 54 52 48 45 43
48898 92 88 87 88
48986 80 79 75 72 70 69 69
49021 15 11 10 6
49187 82 78 75 69
49252 46 41 38 37
49382 77 71 68 69
49435 28 27 21 21
49583 78 77 71 69 67 65 61
49684 77 75 70 67 62
49764 64 62 58 56
49855 62 64 66 67 74 78
49955 48 47 44 43 43 44
50084 85 81 78 76 71
5011 5 9 12 14 14
50259 59 55 53 50 46
50319 25 26 29 29 32 34 38
50468 69 70 76 79 77
50577 72 71 70 67 67 67
50680 80 82 81 84 85 85
50737 35 37 39 42 45 47 45
50847 43 40 38 36 38 38
50993 86 83 81 79
51079 81 82 82 87
51194 90 89 87 81 78 76 71
51246 44 38 35 37
51328 35 36 37 43 40
51434 31 35 37 38 41 42 46
51584 77 71 68 65 66
51665 64 62 56 53 50
51738 45 46 49 53 55 57 57
51834 41 43 47 51
51926 24 21 22 20 13
52042 47 51 52 55 58 65
52152 51 48 45 40 38 38
52254 51 54 56 56 60
52327 26 29 30 31 35 37 37
52464 68 70 73 74 77 78 83
52564 62 61 59 55 48
52637 35 33 33 33
52732 33 33 34 35 37 37
52824 25 23 20 20 17 15 10
52961 64 62 60 63 57
53098 99 92 90 89 88 81
53121 21 23 25 23 25 28 31
53237 40 41 44 44 48
53346 49 50 49 46 43
53473 78 76 77 80 79
53556 52 51 50 50 48 41
53650 49 46 47 44 44
53759 63 70 71 73 76 79 84
53847 47 49 51 53 57 59 56
5398 7 7 5 1
54019 18 20 22 23 24 26 30
5414 8 8 10 12 16
54266 63 62 59 62 60
54325 28 25 26 29 32 35
54476 80 80 82 85 87 87
54569 69 70 71 73 73
54619 13 10 7 6 2
54726 25 31 33 33
54882 85 86 90 94
54996 99 98 94 97
55059 59 58 55 52 48 46 40
55179 83 84 86 93 94 98
55230 26 22 20 17 13
55335 36 39 37 40 43 43
55463 61 59 55 54 52
55549 44 40 38 37 37
55622 18 16 14 13 9 6
55766 73 76 77 77
55811 15 17 14 16 18 16
55982 81 80 78 77 76 72 74
56082 82 84 86 86 87 87
56158 54 52 50 49 43 42 41
56255 56 62 65 67 69 73
56332 35 33 33 31 28 31
56446 53 56 57 59 58
56569 67 60 57 56 53 49
56679 86 89 90 90 91 94 92
56773 71 70 67 70 73
56840 40 41 44 45 46 47 51
56935 42 45 48 55 56 61
57075 75 68 67 63
57125 25 27 30 36 40
5726 9 11 13 16 18 16 22
57363 63 62 65 65
57468 62 60 56 57
57524 20 18 17 14 16
57687 87 86 83 80 77 74 77
57781 76 78 77 75
57829 22 21 17 14 13 6
57918 16 23 26 27 31
58046 46 49 50 52 49
58147 40 37 37 34
58233 34 37 39 41 42 41 39
58339 38 36 39 41 42 42
58481 81 80 78 77 79 76 77
58551 55 57 57 56
58687 90 89 87 83 81 81
58773 70 67 65 63 60 57 53
58876 80 78 80 83 85 85
58957 57 61 63 64 67 71
59081 84 81 80 77 75 72 69
59130 29 30 33 35 42 49
5927 7 10 11 12 12 13 18
59321 21 23 25 26 30 30
59478 84 86 86 89 91 91
59515 20 22 23 24 28
59675 71 68 65 63 60
59751 52 46 43 41 38 37
59870 75 78 80 83 87 88 86
59950 43 40 38 36 34 33 28
60092 88 82 81 80 83
60147 47 44 46 42
60217 13 15 13 9
60315 15 13 11 11 11
60446 46 43 42 40 34 36
60579 81 77 74 70
6067 11 16 19 22 22
60762 62 61 57 56 59
60827 31 32 31 36
60965 69 68 71 73 76
61077 77 78 81 87
6118 5 6 9 10 10 16
61262 63 60 60 60
61391 91 87 85 82 80 80
61449 49 51 49 47 42
61562 58 57 55 54 52 48
61619 23 25 25 30
61726 29 33 36 39 39
61819 23 27 29 31 34 36 37
61946 46 46 44 40
62058 53 46 43 42
62127 34 35 36 37 34 37 39
62228 30 32 31 27
62355 56 53 52 52
62446 46 49 55 57 59 60 59
62564 64 62 60 59 56 51 46
62616 20 21 23 25 22
62726 22 19 15 16
62840 35 35 34 33 27
62995 89 87 85 83 82 84 80
63014 21 22 20 21 25
63159 59 56 54 55 52 51
63228 30 29 27 23
63354 60 64 66 68
63497 99 96 93 92 91 91 90
63514 15 16 16 14
63663 63 61 61 64
63712 12 16 17 19 20 23
63812 11 9 11 13 15
63962 69 76 77 79 79
64020 19 21 18 19 25
64177 73 72 70 69 62
64222 22 22 20 19 16 14
64351 55 56 59 57 61
64491 95 97 99 99
64542 41 42 45 46 49 56
64663 59 56 55 54 48 44
64767 68 66 64 64 62 58
64834 38 41 44 46 50 55
64982 79 81 83 85 86 83 81
65081 77 75 74 72 74 68
65141 42 40 35 34 30
65232 36 38 42 39
65320 24 27 27 30 31 33
65422 28 31 33 34 37 38
65534 33 33 36 39 42 45 47
65640 43 45 47 49 47
65745 39 36 31 24
65856 52 50 49 46 45 45
65975 78 80 77 76 75 73 76
66088 85 82 81 80 77 77 74
66196 90 88 86 84 83 77 73
66269 69 67 65 62
6634 4 6 7 11 18
66483 83 81 80 77 76 73 69
66576 70 67 66 64 60 58
66638 33 32 30 29 26 26
66736 36 37 40 40 43 44 41
66830 29 26 24 21 19 13 8
66922 18 15 14 14 15
67089 87 90 91 92 89 93
67166 62 58 57 56 53 52 47
67286 87 84 82 79 73
67370 66 62 61 58 55 55
67425 26 23 22 19 15 13
67558 60 67 68 69 71
67629 27 25 23 20 19 17 20
67730 29 35 38 41 43 40
67858 59 56 49 46 46
67933 33 35 36 38 41 42 45
68049 49 49 48 46 39
68151 45 44 41 43
68213 13 10 11 14 11
68330 29 27 27 29
68437 32 30 27 30 30
68515 10 5 3 2 1 1
68620 17 21 22 24 26 29
68751 54 53 46 45 42 44
68873 73 72 70 65
68941 43 46 49 54 57 60 67
69037 43 43 45 47 53
6912 2 4 6 7 7 9 13
69242 49 48 50 52 54 57 57
69327 26 28 31 32 34 34
69478 78 79 82 83 82 88
69584 80 77 77 73
69687 86 82 79 78 78
69735 32 30 29 25 23 19
69815 19 25 28 27
69964 66 67 71 74 76
70067 68 70 73 76 78 85
70189 89 92 92 93 96
70257 61 62 63 67 69 72 76
70371 70 74 77 78 80 79
70486 83 86 83 81 77
70566 66 64 63 62 62
70676 79 81 82 83 84 88
70759 62 63 64 66 69 72 72
70855 51 49 49 47 45
70921 21 20 22 24 26 29 33
71091 94 92 89 88 89
71149 51 52 56 59 64
71297 97 96 94 92 87 85 85
71342 39 39 38 37 34 33 27
71494 90 87 86 83 83 82 82
71554 50 47 40 40
71675 79 81 84 87 89 92 94
71730 37 35 37 39 40 41 46
71866 65 65 66 69 71 69
71997 94 91 90 90
72032 30 28 25 22 19 12
72176 72 71 69 67 64 67 68
72239 38 35 32 30 28
72341 38 37 36 34 33
72433 34 36 37 38 39 42
72539 36 34 31 28
72618 15 12 11 8
72768 65 62 59 57 56
72835 33 32 31 28 25 24 21
72918 15 14 12 11
73088 85 84 81 78 75
73188 86 83 82 81
73224 26 29 30 32 34 36 38
73326 25 23 21 19
73497 96 95 94 91
73567 66 64 62 59
73656 57 59 62 63 66 68 70
73730 32 34 35 36
73824 27 28 30 33
73975 73 71 70 68 65 62
74088 85 84 82 80 78 75
7417 9 12 14 16
74258 55 52 50 47 45
74338 40 42 43 46 49
74444 47 48 50 52 53 55 56
74542 40 38 35 32 29
74675 77 79 82 84 87 90 92
74724 23 21 18 16
74879 76 73 72 71 68
74984 85 86 87 90 91
75088 85 83 80 79
75171 73 74 77 79 81 84 86
75286 87 90 91 93 94 95 96
75319 16 13 10 7 4
75457 58 59 61 63 64 65
75522 25 28 31 34 35 38 41
75645 47 49 51 52 54 55 58
75739 36 34 33 31 28 25
75833 31 28 27 24 21 18
75931 33 34 37 38
76063 65 68 70 73 76
76124 25 26 27 28 29 30
7629 11 13 15 17 20 21 22
76376 73 72 69 67 65 64 63
7647 8 11 14 15 16
76543 41 38 35 34 31 30
76626 25 24 23 22
7677 9 11 14 15 18
76828 25 24 23 21 20 19 18
76981 82 84 87 89 90 92 95
77076 74 72 71 68 65
77124 23 21 18 16 14 13 12
77245 47 50 51 54 56 59
77351 54 55 56 58 60 62 63
77469 71 74 77 80 82 84
77591 89 87 85 84
77699 97 96 93 90 89 88 87
77774 75 78 79 80 81 83
77827 28 30 33 36 37 38
7799 10 11 14 15
78029 31 33 36 39 40 42 45
7819 10 13 16 19 20
78268 71 73 74 76 79 80 82
7832 4 7 9 10 12
78469 68 67 66 65 62 60 58
7858 9 10 12 15
78664 67 70 73 76 79 80
78757 59 62 63 65 67
7882 3 6 9 11
78923 21 20 18 16 14 13 12
79096 94 93 90 89 88
79178 75 73 72 71 69
79283 85 86 89 90 92 95
79321 19 18 17 14 13
79494 91 90 87 84 83 82
79569 70 73 74 76 79
79635 38 40 41 43 44 46 49
79740 42 44 45 46 47 48
7983 4 6 8 9 11
79948 46 43 42 40 38 36
80041 40 37 36 35
80138 36 35 33 31
80214 13 10 7 6 4 1
80320 19 18 17 14 12 10 9
80427 28 30 31 32 33 36
80591 90 88 86 85 83
80613 15 17 18 19 22
80730 33 36 38 41 44
80819 16 14 13 10 9 7 6
80972 69 66 63 60 59 56
81011 14 17 18 19 22 24
81118 16 14 12 10
81241 40 39 38 36 33 30
81342 45 47 49 50
81424 27 30 33 36 39 40 43
81585 83 81 79 78 75 74 71
81679 76 74 71 68
81776 75 72 70 68
81869 66 65 64 63 61
81936 33 31 29 27 26 24
82033 30 29 26 23
82186 87 88 90 92 93 95
82226 28 31 34 37 39 41 44
82345 44 43 42 41
82428 26 25 23 22 19 18 17
82565 63 61 60 57 55 52
82673 71 70 69 67
82769 72 73 75 78
82889 90 92 93 95
82945 42 39 36 35 33
83052 55 57 59 61 62 63
83170 67 64 62 61 60
83223 25 27 30 32 34 37
83310 13 14 15 16 19 21 23
83473 70 68 66 65 64 62 60
83564 66 67 69 70 71
83627 26 23 20 17 16
83773 74 75 77 80 81
83881 80 77 74 73
83984 82 79 78 77 76 74 71
84033 32 31 28 27 26
84126 23 21 19 18 16 13
84243 44 45 48 50 52
84330 28 25 23 22 19 17 14
84425 26 28 29 30 31 32 33
84539 40 41 43 44 45 48
8467 10 11 13 15 17
84751 49 47 46 45
84878 79 81 84 87 88
84916 18 19 22 24
85076 75 74 72 70 67
85194 91 88 85 84
85242 39 36 33 30 28 27
85353 50 48 45 44
85472 70 67 64 63 60 57 54
85589 86 84 81 79 77 76
85676 79 80 83 85 86 88
8571 3 4 5 6 9
85812 14 15 17 20 23 26 27
85932 34 36 39 42 43 45 46
86085 83 82 80 79 77 75 74
86192 89 88 85 83 80 79
86282 81 78 75 73
8632 3 5 7 9
86462 61 59 58 56 54
86539 40 41 44 47 48 50
86614 11 10 9 8 6
86761 62 65 68 70 71 74
86846 47 50 53 54 57 59
86974 72 71 69 68 67 66 63
87074 77 80 83 85 87 90 92
87145 42 41 38 36 33 30
87215 14 12 11 8 6
87392 90 87 86 85 83
87424 23 22 20 19 18 17
87527 28 31 32 33
87687 90 93 95 98
87745 48 49 50 53 54 55
87833 31 30 28 25 23 20 17
87935 37 38 40 41 44
88082 81 78 77 76 75 72 69
88120 23 24 27 29
88218 21 23 26 28 30
88330 28 25 22 21 18
88432 29 27 24 21 20
88559 61 64 67 70 73 74 77
88628 29 31 33 35 36 37
88710 12 15 17 19 21 23 24
88828 31 34 36 39
88983 80 77 76 73 70 69 68
89079 81 83 86 89
89163 65 68 71 73 76
89280 79 76 74 73
89373 71 68 65 63 61
89414 11 8 7 6
8957 9 11 12 13 16
89668 71 74 77 80 82 83
89737 35 33 32 31 29 28
89893 91 89 86 83 80 77
89912 13 15 17 20 22 23
9004 7 9 10 12 14
90155 52 50 49 46
90262 60 59 57 56 54 51 50
90382 79 77 76 73 70 69 67
90474 71 68 65 63 62 60 57
90574 77 78 81 82
90668 65 62 60 57
90721 19 17 16 13 10 8
90842 45 48 49 52 55
9098 10 12 14 16 19
91059 56 53 52 49 47
91159 56 54 53 50 49 48
91285 82 81 79 77 74
91373 70 67 66 65 64 62
91438 35 33 30 27
91541 42 45 46 47
91647 46 45 42 40
91720 23 24 25 27
91870 72 73 76 79 80 81
91960 62 63 64 67
92076 77 80 81 84 85 88 90
92143 41 38 36 33 32 30
92216 18 21 24 25
92345 42 40 39 37
92496 93 91 89 87 85 84 82
92521 24 25 28 31 33 35 37
92674 71 68 65 64 62 59
9274 5 8 9 11 13
92849 50 53 54 56 59
92999 97 95 93 92 90 88 85
93073 75 78 79 80
93110 13 15 17 20 23 26
93279 77 76 73 70 69 67 65
93318 16 13 10 7 5 4
93459 56 53 50 49
93576 79 81 82 85 87 90
93616 18 19 20 22 25 26 28
93771 68 67 64 63 60
93814 15 16 18 19
93924 22 20 17 15 12
94049 52 54 56 58
94143 41 40 38 35 32 31 29
94240 37 35 33 31 29 28 26
94368 70 72 75 76 79 81 84
94416 15 14 12 9 8
9451 3 4 5 8 11 14 15
94678 76 73 70 69 67 65
94782 80 78 76 73 72 69
94854 55 58 61 63 65 66 68
94996 93 90 88 86 85 84 82
95093 91 90 88 87
95183 81 79 78 76 73 71 68
95297 95 92 89 88
95378 79 82 84 86 87 90 93
95494 92 90 89 87 85 82 79
95536 38 41 42 43 44
95619 16 14 11 9 8
95759 58 55 53 52 49 46 43
95874 76 79 81 84 86 87
95950 47 44 41 40
96026 25 22 21 19
96117 19 20 21 22 25 27
96280 83 86 89 92 95
96336 38 40 41 42 43
96497 94 91 88 85
96511 14 16 17 20 22 23
96664 62 59 57 56 53 52
9672 3 4 6 8 11 12 15
96864 62 59 58 56
96988 89 92 94 96 97 98 99
97012 11 9 6 4
97168 66 65 62 59
97251 54 55 57 60 63
9736 7 9 10 13 15 16 18
97462 61 58 56 55 53
97541 38 36 34 32
97663 64 66 67 70 72 74 75
97751 52 54 55 57 59 61 63
97842 40 39 36 35
97957 59 60 61 62 63
98031 32 35 38 39 40
98185 87 90 93 94 95 98
98290 87 86 84 83 82
98352 50 48 46 44 41 40 37
98428 29 32 33 35
98534 37 40 41 42 43
98668 67 65 64 61
98732 30 28 27 24 21 19 16
98825 22 21 20 18
98968 66 64 62 61 60
99055 56 57 59 62 65 66
99113 14 17 18 20 23 24 25
99217 14 11 9 8 6
99332 30 27 26 25
99416 18 21 23 26 29 30
99534 37 38 39 40 43 45 47
99620 22 24 26 29 31 32 33
99757 56 53 50 47 44
99859 62 64 66 68
99968 70 73 75 77
100035 33 30 27 26 25 24 23
diff --git a/day02/solution.cpp b/day02/solution.cpp
new file mode 100644
index 0000000..e4f47b8
--- /dev/null
+++ b/day02/solution.cpp
@@ -0,0 +1,81 @@
1#include <numeric>
2#include <cassert>
3#include <print>
4#include <iostream>
5#include <vector>
6#include <ranges>
7#include <algorithm>
8#include <sstream>
9
10namespace ranges = std::ranges;
11namespace views = std::views;
12
13const auto parse_input() {
14 std::vector<std::vector<int>> result;
15 for (std::string s; std::getline(std::cin, s);) {
16 std::stringstream ss{s};
17 std::vector<int> row;
18 for (int l; ss >> l;) {
19 row.push_back(l);
20 }
21 result.push_back(row);
22 }
23 return result;
24}
25
26bool safe_report(const auto &report) {
27 assert(report.size() > 0);
28 std::vector<int> _diffs(report.size());
29 std::adjacent_difference(report.begin(), report.end(), _diffs.begin());
30
31 // The first diff is from 0 (zero) to the first layer, so we ignore it
32 const auto diffs = ranges::subrange(_diffs.begin() + 1, _diffs.end());
33 const bool ascending = std::count_if(diffs.begin(), diffs.end(), [](int d) {
34 return d > 0;
35 }) > (diffs.size() / 2);
36
37 const bool safe = ranges::all_of(diffs, [ascending](int d) {
38 const bool bounded = (1 <= std::abs(d) and std::abs(d) <= 3);
39 const bool monotonic = ((d > 0 and ascending) or (d < 0 and not ascending));
40 return monotonic and bounded;
41 });
42 return safe;
43}
44
45void part1(const auto &input) {
46 int answer{0};
47
48 for (const auto &report : input) {
49 if (safe_report(report)) {
50 ++answer;
51 }
52 }
53
54 std::println("{}", answer);
55}
56
57void part2(const auto &input) {
58 int answer{0};
59 for (const auto &report : input) {
60 if (ranges::any_of(views::iota(size_t(0), report.size()), [&report](size_t i) {
61 return safe_report(views::concat(report | views::take(i),
62 report | views::drop(i + 1)));
63 })) {
64 ++answer;
65 }
66 }
67 std::println("{}", answer);
68}
69
70int main() {
71 const auto input = parse_input();
72
73#ifndef NO_PART1
74 part1(input);
75#endif
76
77#ifndef NO_PART2
78 part2(input);
79#endif
80 return 0;
81}
diff --git a/day02/tests/test1.input b/day02/tests/test1.input
new file mode 100644
index 0000000..b49c10d
--- /dev/null
+++ b/day02/tests/test1.input
@@ -0,0 +1,6 @@
17 6 4 2 1
21 2 7 8 9
39 7 6 2 1
41 3 2 4 5
58 6 4 4 1
61 3 6 7 9
diff --git a/day02/tests/test1.output b/day02/tests/test1.output
new file mode 100644
index 0000000..da7f847
--- /dev/null
+++ b/day02/tests/test1.output
@@ -0,0 +1,2 @@
12
24