From fe9b273cc83c4b6448c0e78c76b6dd2060522f14 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 4 Dec 2022 16:50:43 +0100 Subject: day03 --- day03.zig | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 day03.zig (limited to 'day03.zig') 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 }); +} -- cgit 1.4.1