diff options
author | Leah Neukirchen <leah@vuxu.org> | 2022-12-04 16:50:43 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2022-12-04 16:50:43 +0100 |
commit | fe9b273cc83c4b6448c0e78c76b6dd2060522f14 (patch) | |
tree | 5a8073eab36546eca582b07ca294324a093824f1 /day03.zig | |
parent | 1539d9a155be2f3e43a33f41befd00edc5c41b54 (diff) | |
download | adventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.tar.gz adventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.tar.xz adventofcode2022-fe9b273cc83c4b6448c0e78c76b6dd2060522f14.zip |
day03
Diffstat (limited to 'day03.zig')
-rw-r--r-- | day03.zig | 56 |
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 }); +} |