about summary refs log tree commit diff
path: root/day03.zig
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2022-12-04 16:50:43 +0100
committerLeah Neukirchen <leah@vuxu.org>2022-12-04 16:50:43 +0100
commitfe9b273cc83c4b6448c0e78c76b6dd2060522f14 (patch)
tree5a8073eab36546eca582b07ca294324a093824f1 /day03.zig
parent1539d9a155be2f3e43a33f41befd00edc5c41b54 (diff)
downloadadventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.tar.gz
adventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.tar.xz
adventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.zip
day03
Diffstat (limited to 'day03.zig')
-rw-r--r--day03.zig56
1 files changed, 56 insertions, 0 deletions
diff --git a/day03.zig b/day03.zig
new file mode 100644
index 0000000..ddd458b
--- /dev/null
+++ b/day03.zig
@@ -0,0 +1,56 @@
+const std = @import("std");
+const data = @embedFile("day03");
+
+fn priority(c: u8) i32 {
+    return switch (c) {
+        'a'...'z' => c - 'a' + 1,
+        'A'...'Z' => c - 'A' + 1 + 26,
+        else => unreachable,
+    };
+}
+
+pub fn main() !void {
+    var part1: i32 = 0;
+    var part2: i32 = 0;
+
+    var lines = std.mem.split(u8, data, "\n");
+
+    part1: while (lines.next()) |line| {
+        if (line.len == 0)
+            break;
+
+        var mid: usize = line.len / 2;
+        for (line[0..mid]) |c1| {
+            for (line[mid..line.len]) |c2| {
+                if (c1 == c2) {
+                    part1 += priority(c1);
+                    continue :part1;
+                }
+            }
+        }
+    }
+
+    lines = std.mem.split(u8, data, "\n");
+
+    part2: while (lines.next()) |line1| {
+        if (line1.len == 0)
+            break;
+        var line2 = lines.next().?;
+        var line3 = lines.next().?;
+
+        for (line1) |c1| {
+            for (line2) |c2| {
+                if (c1 == c2) {
+                    for (line3) |c3| {
+                        if (c1 == c3) {
+                            part2 += priority(c1);
+                            continue :part2;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    std.debug.print("{} {}\n", .{ part1, part2 });
+}