aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrfeas <38209077+0xfea5@users.noreply.github.com>2023-12-03 07:14:20 +0200
committerOrfeas <38209077+0xfea5@users.noreply.github.com>2025-10-28 23:20:45 +0200
commitcf6612350766ab6fc196cfbc860853fb18dae4ec (patch)
treed31dfaeb7d8776788b9f3b48fd1a3b808934fd6b
parentupdate init.sh (diff)
downloadaoc23-cf6612350766ab6fc196cfbc860853fb18dae4ec.tar.gz
aoc23-cf6612350766ab6fc196cfbc860853fb18dae4ec.zip
day2 + example files
-rw-r--r--day01/example1.txt4
-rw-r--r--day01/example2.txt7
-rw-r--r--day02/example.txt5
-rw-r--r--day02/input.txt100
-rw-r--r--day02/solution.zig161
-rwxr-xr-xinit.sh1
6 files changed, 278 insertions, 0 deletions
diff --git a/day01/example1.txt b/day01/example1.txt
new file mode 100644
index 0000000..7bbc69a
--- /dev/null
+++ b/day01/example1.txt
@@ -0,0 +1,4 @@
11abc2
2pqr3stu8vwx
3a1b2c3d4e5f
4treb7uchet
diff --git a/day01/example2.txt b/day01/example2.txt
new file mode 100644
index 0000000..41aa89c
--- /dev/null
+++ b/day01/example2.txt
@@ -0,0 +1,7 @@
1two1nine
2eightwothree
3abcone2threexyz
4xtwone3four
54nineeightseven2
6zoneight234
77pqrstsixteen
diff --git a/day02/example.txt b/day02/example.txt
new file mode 100644
index 0000000..295c36d
--- /dev/null
+++ b/day02/example.txt
@@ -0,0 +1,5 @@
1Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
2Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
3Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
4Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
5Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
diff --git a/day02/input.txt b/day02/input.txt
new file mode 100644
index 0000000..3cf08f7
--- /dev/null
+++ b/day02/input.txt
@@ -0,0 +1,100 @@
1Game 1: 4 red, 5 blue, 9 green; 7 green, 7 blue, 3 red; 16 red, 7 blue, 3 green; 11 green, 11 blue, 6 red; 12 red, 14 blue
2Game 2: 12 blue, 11 green, 3 red; 6 blue, 5 green, 7 red; 5 red, 11 blue; 2 blue, 8 green
3Game 3: 8 blue, 5 green, 2 red; 5 blue, 5 green, 7 red; 7 blue, 1 green, 7 red; 8 green, 14 blue, 7 red; 8 green, 14 blue; 8 blue, 2 green, 8 red
4Game 4: 3 red, 14 blue, 15 green; 1 red, 11 green, 14 blue; 14 green, 17 blue
5Game 5: 11 green, 2 red, 10 blue; 16 green, 8 blue; 2 blue, 6 green, 1 red; 14 blue, 2 red, 16 green; 3 blue, 18 green; 1 red, 10 blue, 3 green
6Game 6: 2 green, 5 red, 17 blue; 12 green, 13 blue, 6 red; 8 red, 9 blue, 7 green
7Game 7: 2 blue, 18 green; 4 green, 1 red, 1 blue; 4 blue, 19 green
8Game 8: 6 green, 7 blue; 9 green, 6 blue; 7 blue, 1 red, 3 green
9Game 9: 4 blue, 12 green, 3 red; 4 green, 3 blue, 3 red; 3 green, 2 red, 3 blue; 1 green, 2 red, 3 blue; 15 red, 10 green, 4 blue; 3 blue, 1 red, 6 green
10Game 10: 11 blue, 6 green, 6 red; 15 green, 1 blue; 1 red, 6 blue, 4 green
11Game 11: 9 blue, 1 red, 6 green; 6 red, 1 green; 10 blue, 3 green, 6 red
12Game 12: 1 blue, 10 red, 1 green; 4 blue, 4 red; 8 red, 3 blue, 1 green; 3 red, 2 green
13Game 13: 3 red, 11 green, 18 blue; 11 green, 1 red, 3 blue; 12 blue, 5 red, 2 green; 16 blue, 8 red, 5 green; 8 red, 12 blue, 19 green; 17 blue, 4 green, 6 red
14Game 14: 8 red, 4 blue; 1 green, 2 blue, 13 red; 1 green, 1 blue, 17 red; 1 green, 13 red
15Game 15: 4 red, 3 blue, 6 green; 4 blue, 3 red, 3 green; 3 green, 6 red, 3 blue; 6 red, 5 blue, 2 green; 6 green, 1 blue; 4 green, 3 red, 2 blue
16Game 16: 11 green; 3 green, 1 blue, 1 red; 12 green, 3 blue, 1 red; 1 red, 1 green; 1 red, 3 blue; 2 green, 1 blue, 1 red
17Game 17: 12 red, 14 blue, 10 green; 2 red, 6 green, 6 blue; 10 blue, 2 green, 3 red; 1 red, 13 blue, 2 green; 9 green, 16 red, 9 blue
18Game 18: 15 red, 8 blue; 16 red, 12 blue; 5 blue, 4 green, 6 red; 8 red, 4 green, 3 blue; 7 red, 5 blue, 2 green; 1 blue, 2 green, 14 red
19Game 19: 3 red, 13 blue, 2 green; 8 red, 14 blue; 9 blue, 3 green; 9 blue, 1 green, 7 red; 8 red, 1 green; 8 red, 14 blue, 2 green
20Game 20: 6 green, 10 blue, 5 red; 8 green, 9 blue, 7 red; 2 red, 2 green, 7 blue; 7 red, 16 green, 12 blue; 15 green, 3 red; 12 green, 3 red, 6 blue
21Game 21: 2 green, 7 blue; 7 blue, 6 red; 6 blue, 2 red, 1 green; 11 blue, 1 red, 3 green
22Game 22: 5 red, 1 blue; 1 green, 2 red; 1 blue, 1 green, 5 red; 1 green, 2 blue, 4 red; 1 green, 3 red, 1 blue; 5 red, 3 blue, 1 green
23Game 23: 12 green, 7 red; 4 blue, 15 red, 2 green; 2 green, 16 red, 2 blue; 5 red, 10 green, 1 blue; 1 red, 4 green, 7 blue; 9 blue, 4 green, 12 red
24Game 24: 7 blue, 11 red, 4 green; 6 blue, 3 green; 1 blue, 14 red, 1 green; 2 blue, 4 green, 15 red; 7 red, 4 blue; 7 red, 2 blue, 3 green
25Game 25: 6 green, 10 red, 12 blue; 3 red, 16 blue; 10 blue, 10 red, 1 green; 3 red, 2 green, 13 blue; 2 green, 11 blue, 6 red
26Game 26: 6 red, 4 blue, 10 green; 3 blue, 1 green, 4 red; 5 blue; 11 blue, 9 green, 7 red
27Game 27: 1 red, 14 green, 9 blue; 13 green, 8 blue, 8 red; 7 red, 8 green, 6 blue; 7 blue, 3 red, 4 green; 18 green, 3 red
28Game 28: 2 red, 1 blue, 1 green; 1 blue; 1 red, 6 green, 2 blue; 5 green, 1 blue; 6 green; 2 green, 5 blue, 2 red
29Game 29: 2 blue, 2 green, 7 red; 3 red, 5 blue; 7 green, 14 blue, 3 red
30Game 30: 5 red, 11 green, 8 blue; 1 blue, 1 red, 15 green; 18 green, 12 blue; 5 red, 6 blue, 16 green; 12 blue, 1 red, 5 green
31Game 31: 1 blue, 7 red, 2 green; 8 green, 1 blue; 3 blue, 13 green, 2 red; 3 blue, 7 red
32Game 32: 10 green, 7 blue, 4 red; 18 green, 4 blue, 7 red; 5 blue, 6 red; 5 red, 5 blue, 1 green; 12 blue, 5 green, 8 red; 1 red, 6 green, 13 blue
33Game 33: 1 green, 2 red, 18 blue; 12 blue, 8 green; 8 green, 1 red, 16 blue; 10 green, 14 blue; 1 red, 3 blue, 8 green
34Game 34: 4 red, 4 blue; 10 blue, 8 red; 2 green, 5 blue, 20 red
35Game 35: 6 blue, 1 green, 4 red; 1 red, 2 blue, 2 green; 12 blue, 2 red; 11 blue, 1 green, 1 red; 2 blue; 2 red, 10 blue, 3 green
36Game 36: 2 green, 9 blue, 11 red; 5 blue, 11 red; 1 green, 1 red, 9 blue; 8 blue, 2 green; 11 red, 4 blue, 1 green; 7 blue, 2 green, 5 red
37Game 37: 10 blue, 5 green, 6 red; 5 red, 13 green, 10 blue; 1 green, 7 blue, 4 red; 10 green, 4 blue, 14 red; 13 green, 9 red, 1 blue
38Game 38: 5 blue, 4 green, 4 red; 4 blue, 11 green; 4 green, 3 red; 6 green, 7 blue; 6 blue, 1 red, 2 green
39Game 39: 8 blue, 1 green, 19 red; 15 red, 2 green, 7 blue; 1 green, 6 blue, 8 red; 16 red, 3 blue, 1 green
40Game 40: 4 green, 1 blue; 1 red, 2 blue, 3 green; 4 green, 1 blue, 2 red; 2 green, 1 blue, 2 red; 2 green
41Game 41: 3 red, 4 blue; 2 blue, 16 green; 2 red, 5 blue, 11 green; 13 green, 3 red, 6 blue; 3 blue, 19 green, 3 red; 5 green, 1 red, 3 blue
42Game 42: 6 green; 13 green, 1 blue; 1 blue, 5 green, 1 red; 1 blue, 6 green, 1 red; 2 red, 2 green, 1 blue
43Game 43: 8 green, 11 blue; 11 green, 12 blue; 1 blue, 5 red, 7 green; 1 blue, 11 green; 3 blue, 1 green
44Game 44: 3 green, 18 red, 16 blue; 2 blue, 2 green, 14 red; 13 red, 4 green, 17 blue; 3 red, 9 blue, 8 green; 11 red, 1 blue; 5 blue, 3 red, 7 green
45Game 45: 11 blue, 2 red; 8 green, 5 blue, 1 red; 14 blue, 5 green; 14 blue, 8 green; 10 blue, 11 green; 5 green, 1 red, 17 blue
46Game 46: 3 red, 3 blue, 1 green; 2 green, 7 red, 4 blue; 2 red, 1 green, 2 blue; 9 red, 1 green
47Game 47: 3 blue, 4 red, 2 green; 9 blue, 12 green, 11 red; 8 green, 19 red, 7 blue
48Game 48: 1 green, 9 red; 7 green, 16 red, 1 blue; 2 blue, 2 red, 5 green; 19 red, 3 blue, 2 green
49Game 49: 2 green, 17 blue, 18 red; 4 blue, 19 red, 11 green; 1 green, 5 blue, 15 red; 10 green, 6 red, 1 blue
50Game 50: 4 green, 8 blue, 6 red; 1 red, 6 blue, 4 green; 6 red, 5 green, 10 blue; 7 blue, 6 red
51Game 51: 2 green, 1 blue, 5 red; 13 blue, 10 green; 6 green, 1 red, 7 blue; 4 red, 3 green, 8 blue; 3 red, 9 blue, 4 green; 2 red, 12 blue, 8 green
52Game 52: 1 blue, 4 green, 6 red; 6 green, 6 red, 10 blue; 4 green, 3 red, 5 blue; 3 blue, 2 green, 4 red; 6 green, 5 blue, 9 red; 9 red, 5 green, 8 blue
53Game 53: 2 green, 6 blue, 6 red; 1 blue, 5 green, 13 red; 7 red, 5 blue, 1 green
54Game 54: 5 green, 6 blue, 2 red; 1 blue, 3 green; 6 green; 1 red, 2 blue, 5 green; 5 blue, 5 green
55Game 55: 9 blue, 15 green; 4 red, 1 green; 7 blue, 9 red, 11 green
56Game 56: 7 red, 2 blue, 4 green; 2 blue, 6 red, 6 green; 8 red, 7 green; 6 green, 2 red; 3 blue, 2 green, 7 red
57Game 57: 1 blue, 1 green, 1 red; 6 red, 2 green, 3 blue; 1 green; 3 blue, 8 red, 2 green
58Game 58: 14 blue, 5 red, 14 green; 5 blue, 7 green, 7 red; 19 blue, 10 red, 14 green; 7 green, 5 blue, 10 red; 2 red, 12 green, 2 blue
59Game 59: 1 red, 1 green, 1 blue; 10 blue; 3 blue, 1 green, 1 red
60Game 60: 6 blue, 6 green; 5 blue; 4 blue, 3 green; 10 green, 1 red, 4 blue
61Game 61: 2 green, 3 blue; 3 red, 3 blue; 2 red, 4 green
62Game 62: 3 red, 6 green, 2 blue; 6 red, 5 blue, 2 green; 13 green, 9 blue
63Game 63: 9 blue, 1 green; 14 blue, 12 red; 1 green, 6 red, 14 blue; 1 green, 2 red, 14 blue; 7 red, 18 blue, 1 green; 14 red, 2 blue
64Game 64: 4 blue, 16 red, 4 green; 9 red, 4 green, 3 blue; 2 red, 2 blue, 6 green; 2 blue, 2 green, 12 red
65Game 65: 2 red, 2 blue; 4 red, 9 green, 5 blue; 1 blue; 3 green, 1 red; 1 green, 2 blue, 8 red; 1 blue, 8 green, 3 red
66Game 66: 1 red, 3 green, 4 blue; 3 green, 5 red, 14 blue; 1 blue, 3 red, 2 green; 4 blue, 1 green, 2 red; 8 red, 2 green, 13 blue
67Game 67: 1 green, 1 red, 4 blue; 2 blue, 2 green, 1 red; 3 blue, 2 green, 1 red
68Game 68: 1 red, 2 blue; 5 green, 2 red, 2 blue; 7 red, 7 green, 2 blue
69Game 69: 15 red, 12 green, 1 blue; 3 green, 3 blue, 6 red; 9 blue, 16 green; 11 blue, 18 green, 7 red
70Game 70: 4 blue, 1 green, 6 red; 11 red, 3 green, 4 blue; 3 blue, 1 red, 1 green; 1 green, 11 red; 3 red, 4 blue, 1 green; 3 red, 4 blue, 2 green
71Game 71: 11 blue, 1 red; 10 blue, 10 green; 4 green, 11 blue; 5 green, 1 red, 6 blue; 6 green, 2 blue; 4 blue, 3 green
72Game 72: 1 red, 7 blue; 3 red, 3 green, 7 blue; 3 red, 3 green, 10 blue; 5 green, 7 blue
73Game 73: 2 blue, 1 red; 6 blue, 8 red, 18 green; 4 blue, 18 green, 1 red; 1 red, 5 blue, 2 green; 18 green, 8 red, 8 blue
74Game 74: 19 green, 9 blue, 14 red; 11 green, 8 blue, 14 red; 2 green, 17 blue, 14 red; 12 green, 12 blue, 7 red; 6 red, 5 blue, 10 green; 4 blue, 19 green, 15 red
75Game 75: 12 red, 3 green, 4 blue; 7 red, 6 green, 2 blue; 7 green, 3 red, 7 blue; 16 red, 3 green; 10 blue, 6 red, 3 green
76Game 76: 1 red, 11 blue, 4 green; 11 green, 3 blue, 3 red; 2 red, 14 green, 7 blue; 3 red, 6 blue, 9 green; 9 blue, 14 green; 1 red, 9 green, 3 blue
77Game 77: 10 blue, 2 red, 5 green; 5 green, 3 red, 12 blue; 3 green, 8 red, 4 blue; 5 blue, 12 red, 7 green; 18 blue, 7 red; 8 green, 8 blue, 13 red
78Game 78: 9 red, 11 green, 4 blue; 4 blue, 14 green; 2 red, 11 green, 6 blue; 2 blue, 5 red, 13 green; 6 red, 2 green
79Game 79: 2 green, 3 blue, 1 red; 6 green, 2 blue; 1 blue, 4 green
80Game 80: 2 green, 4 red; 1 green, 6 blue, 2 red; 8 blue, 3 red; 6 blue, 1 green; 6 red, 2 blue; 2 green, 2 blue
81Game 81: 5 red, 3 blue, 6 green; 3 blue, 17 green, 5 red; 3 red, 2 blue, 14 green; 1 blue, 2 red, 8 green
82Game 82: 16 green, 10 blue; 6 blue, 4 green, 2 red; 3 blue, 1 red, 16 green; 1 red, 7 green, 11 blue
83Game 83: 8 green, 7 blue; 1 blue, 6 green; 6 blue, 1 red, 3 green; 8 green, 1 red; 1 green, 5 blue
84Game 84: 9 blue, 6 red; 5 red, 7 green, 3 blue; 4 blue, 13 green, 2 red; 10 red, 11 green, 6 blue
85Game 85: 4 red, 10 blue; 8 green, 1 blue, 1 red; 9 blue, 6 green; 1 red, 4 green; 3 green, 8 blue
86Game 86: 7 blue, 9 green; 7 blue, 1 red, 4 green; 4 green, 13 blue
87Game 87: 12 red, 9 green, 2 blue; 8 green, 7 red; 11 red, 11 green; 4 blue, 8 green
88Game 88: 8 blue, 7 green, 7 red; 5 blue, 9 green; 3 red, 7 green, 6 blue; 1 green, 7 blue, 7 red
89Game 89: 7 green, 9 red, 7 blue; 1 green, 18 red; 3 red, 2 blue, 2 green; 15 red, 4 green, 6 blue
90Game 90: 4 blue, 5 red, 4 green; 4 green, 6 blue, 3 red; 4 green, 6 blue, 2 red; 8 blue, 4 red, 4 green; 3 blue, 2 red
91Game 91: 7 green, 5 red, 2 blue; 12 green, 2 blue, 6 red; 6 green, 1 blue; 1 green, 1 blue; 13 green, 1 red, 3 blue; 5 red, 1 blue, 4 green
92Game 92: 2 green; 1 red, 2 blue, 2 green; 2 red, 2 green, 2 blue; 2 blue, 7 red
93Game 93: 8 red, 5 blue; 10 red, 4 blue; 3 red, 2 blue; 7 blue, 10 red, 1 green; 6 blue; 10 blue
94Game 94: 2 blue, 4 green; 8 green, 9 blue; 2 green, 3 blue; 3 blue, 5 green; 9 blue, 1 red, 3 green; 6 blue, 6 green, 1 red
95Game 95: 3 blue, 13 red, 10 green; 4 green, 17 blue, 12 red; 12 red, 10 green, 16 blue; 15 red, 14 green, 2 blue; 12 red, 1 blue, 15 green; 10 green, 13 blue, 19 red
96Game 96: 5 green, 9 blue, 16 red; 17 red, 11 green, 9 blue; 10 blue, 13 green, 9 red; 10 blue, 7 red, 13 green; 3 red, 4 blue, 5 green
97Game 97: 6 blue, 4 green, 6 red; 4 red, 13 green, 2 blue; 15 green, 2 red; 2 green, 2 red
98Game 98: 10 blue, 13 red; 10 blue, 16 red, 4 green; 6 blue, 4 green, 14 red; 4 green, 1 blue, 11 red; 4 red, 4 green
99Game 99: 1 red, 4 blue; 5 red, 8 blue; 3 blue, 1 green; 2 red, 6 blue; 8 blue, 2 green, 3 red
100Game 100: 5 green, 1 red; 4 blue, 8 red, 4 green; 1 blue, 3 red, 15 green; 1 blue, 15 green, 1 red; 2 red, 13 green
diff --git a/day02/solution.zig b/day02/solution.zig
new file mode 100644
index 0000000..5e8d6f6
--- /dev/null
+++ b/day02/solution.zig
@@ -0,0 +1,161 @@
1const std = @import("std");
2const print = std.debug.print;
3const assert = std.debug.assert;
4const ArrayList = std.ArrayList;
5const mem = std.mem;
6
7const fin = mem.trim(u8, @embedFile("./input.txt"), &std.ascii.whitespace);
8var gpa = std.heap.GeneralPurposeAllocator(.{}){};
9const allocator = gpa.allocator();
10
11const Color = enum {
12 red,
13 green,
14 blue,
15};
16
17const Ball = struct {
18 color: Color,
19 num: u64,
20};
21
22const Set = struct {
23 red: u64,
24 green: u64,
25 blue: u64,
26};
27
28const Game = struct {
29 var curGameID: u64 = 1;
30 id: u64,
31 sets: ArrayList(Set),
32
33 fn init(self: *@This()) !void {
34 self.id = curGameID;
35 self.sets = ArrayList(Set).init(allocator);
36 curGameID += 1;
37 }
38
39 fn deinit(self: *@This()) void {
40 self.sets.deinit();
41 }
42};
43
44pub fn parseBall(text: []const u8) Ball {
45 const trimmed = mem.trim(u8, text, &std.ascii.whitespace);
46 var splitBalls = mem.splitScalar(u8, trimmed, ' ');
47
48 const nballs = std.fmt.parseInt(u64, splitBalls.next() orelse unreachable, 10) catch unreachable;
49 var color: Color = undefined;
50 color = blk: {
51 const s = splitBalls.next() orelse unreachable;
52
53 if (mem.eql(u8, s, "red")) {
54 break :blk .red;
55 }
56
57 if (mem.eql(u8, s, "green")) {
58 break :blk .green;
59 }
60
61 if (mem.eql(u8, s, "blue")) {
62 break :blk .blue;
63 }
64
65 unreachable;
66 };
67
68 return Ball{
69 .color = color,
70 .num = nballs,
71 };
72}
73
74pub fn parseSet(text: []const u8) Set {
75 const trimmed = mem.trim(u8, text, &std.ascii.whitespace);
76 var splitBalls = mem.splitScalar(u8, trimmed, ',');
77 var r: u64 = 0;
78 var g: u64 = 0;
79 var b: u64 = 0;
80
81 while (splitBalls.next()) |ball| {
82 const parsed_ball = parseBall(ball);
83 switch (parsed_ball.color) {
84 .red => r += parsed_ball.num,
85 .green => g += parsed_ball.num,
86 .blue => b += parsed_ball.num,
87 }
88 }
89
90 return Set{
91 .red = r,
92 .green = g,
93 .blue = b,
94 };
95}
96
97pub fn parseGame(text: []const u8) !Game {
98 const trimmed = mem.trim(u8, text, &std.ascii.whitespace);
99 var splitSets = mem.splitScalar(u8, trimmed, ';');
100 var game: Game = undefined;
101 try game.init();
102
103 while (splitSets.next()) |set| {
104 try game.sets.append(parseSet(set));
105 }
106
107 return game;
108}
109
110pub fn part1(input: ArrayList(Game)) void {
111 var ans: u64 = 0;
112
113 outer: for (input.items) |game| {
114 for (game.sets.items) |set| {
115 if (set.red > 12 or set.green > 13 or set.blue > 14) {
116 continue :outer;
117 }
118 }
119 ans += game.id;
120 }
121
122 print("{d}\n", .{ans});
123}
124
125pub fn part2(input: ArrayList(Game)) void {
126 var ans: u64 = 0;
127
128 for (input.items) |game| {
129 var max = Set{
130 .red = 0,
131 .blue = 0,
132 .green = 0,
133 };
134
135 for (game.sets.items) |set| {
136 max.red = @max(max.red, set.red);
137 max.green = @max(max.green, set.green);
138 max.blue = @max(max.blue, set.blue);
139 }
140 ans += max.red * max.green * max.blue;
141 }
142
143 print("{d}\n", .{ans});
144}
145
146pub fn main() !void {
147 var splitLines = mem.splitScalar(u8, fin, '\n');
148 var games = ArrayList(Game).init(allocator);
149 defer games.deinit();
150
151 while (splitLines.next()) |line| {
152 var splitGame = mem.splitScalar(u8, line, ':');
153 _ = splitGame.next();
154
155 const game = try parseGame(splitGame.next() orelse unreachable);
156 try games.append(game);
157 }
158
159 part1(games);
160 part2(games);
161}
diff --git a/init.sh b/init.sh
index ac58dc3..5239b81 100755
--- a/init.sh
+++ b/init.sh
@@ -18,6 +18,7 @@ echo \
18 'const std = @import("std"); 18 'const std = @import("std");
19const print = std.debug.print; 19const print = std.debug.print;
20const assert = std.debug.assert; 20const assert = std.debug.assert;
21const mem = std.mem;
21const input = @embedFile("./input.txt"); 22const input = @embedFile("./input.txt");
22 23
23pub fn main() !void { 24pub fn main() !void {