diff --git a/rust/2/sampleinput.txt b/rust/2/sampleinput.txt index 726cbe3..94864bf 100644 --- a/rust/2/sampleinput.txt +++ b/rust/2/sampleinput.txt @@ -1,6 +1,4 @@ -A X draw = 1 + 3 = 4. Also my parsing just takes the 1st and 3rd characters of -the lines so I can type anything else after that and it'll work as an input -file kek +A X draw = 1 + 3 = 4 A Y win = 2 + 6 = 8 A Z loss = 3 + 0 = 3 <- not 9 B X loss = 1 + 0 = 1 diff --git a/zig/2/input.txt b/zig/2/input.txt new file mode 100644 index 0000000..c4b1829 --- /dev/null +++ b/zig/2/input.txt @@ -0,0 +1,2500 @@ +C X +C Y +C X +B X +B Z +A Z +C Y +C Z +B Z +C X +B Y +C Y +C Y +A Y +C Y +C Y +C Z +C X +B Z +C Y +A Y +A Y +C Z +B Y +A Y +C Z +C Y +A Y +A Y +B Y +C Y +C Z +C Y +B X +B Z +C Y +B Z +A X +C Z +A Y +B Y +C Y +C Y +B Z +B Y +A Z +C X +C X +C Y +C X +B Z +A Y +B X +B Z +C Z +C X +C X +B Z +A Y +B Y +C Y +C Y +A Y +C X +A Y +B Z +C Y +C Y +B Y +C Y +A Z +A Z +B X +A Y +C Y +A Y +C Y +C Y +C X +C Y +B Z +C Y +C Z +C X +B X +C Y +C Y +C X +C Z +A Y +C X +B Z +C X +A Y +B Y +C Y +A Y +A Y +A Y +B Y +C Y +A Y +A Y +C Z +C Y +B Y +C X +C Y +B Z +B Z +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C Y +B Y +B Z +A Y +B Y +A Y +A Y +C Y +B X +C Y +C X +A Y +C X +C X +C Y +C Y +B Z +C X +A Y +B Z +C Z +C X +A Y +B Z +C Y +B Y +A Y +A Y +C Y +B Y +C Y +C X +C Y +A Y +C Y +A Y +B Y +C X +C Y +C Y +B Z +B Z +A Y +C Y +C Y +C Y +C Y +A Y +C X +C Z +C X +A Y +A Y +A Y +C Y +B Z +B Z +C Y +C Y +B X +C Y +C Y +B Z +B X +B Y +C Y +C Y +C X +B Y +B Z +B Z +C Y +C Y +C X +C X +A Y +C Y +C Y +B X +B Z +B X +B Z +B Y +C X +B X +B Y +B Z +B Z +B X +B Z +B Y +C X +C Y +C X +C X +B Z +C Y +C Y +C Y +B Z +C Y +C X +C Y +C Y +A Z +C Y +A Y +C Y +A Z +A X +C Y +C Y +C Y +C Z +B Z +B Z +C Y +B Z +B Z +C X +C Y +A Y +A Y +C Y +A Y +C Y +C Y +B Y +A Y +C Y +B Z +A Y +B Z +C X +C Y +A Y +B Z +A Y +C X +C Y +B Y +C Y +A Z +B Z +B X +C Y +A Y +A Z +C X +A Y +B Z +A Y +B Y +C Y +C Y +B Z +B Z +C X +B Z +C X +C Z +C Y +C X +A Y +C X +A Y +A Y +B Z +B Z +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +B Y +A Y +C Z +C Y +A Y +A Y +B Z +C Y +C Y +C Y +B Z +C Y +C Y +A Y +A Y +C Y +C X +B Z +B Z +C X +C X +C Z +A Y +C Y +A Y +A Y +C X +A Z +B Y +A Y +C X +A Y +C X +C X +A Y +A Y +C X +B Y +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Y +A X +B Y +C Y +A Y +C Y +C Y +C Y +A Y +C Y +A Y +C Y +B Z +A Y +C X +C Y +A Y +C Y +A Y +A Y +A Y +B Z +C Y +B Z +A Y +C Y +A Y +C Y +C X +B Z +A Y +C X +B Z +B Y +C Y +C Z +C Y +B Y +B Y +A Y +A Y +C X +B Y +A Y +C Y +B X +C X +A Y +C Y +A Y +C Y +B Z +A Z +B Z +B Z +A Z +C Y +C Y +C X +B Y +C Y +A Y +C Y +C Y +B Y +B Z +C Y +C X +A Y +C X +C X +C Y +B Y +C Y +B Z +C Y +A Y +A Y +C Y +C X +C X +C X +C Y +C X +C Y +C Y +A Y +C Y +C X +C Y +C X +C X +C X +A Y +B Y +C Y +C Y +C Y +C Y +C Y +A Y +A X +B Z +C X +C Y +C Y +B Z +A Y +A Y +B X +B Z +C Y +C Y +B Z +A Y +A Y +A Y +C Y +C Y +A Y +A Y +C Y +C Y +C X +C X +C X +B Z +C Z +C X +A Z +C Y +C X +A Y +B Y +B Z +C X +C Y +C Y +C Z +C Y +C X +A Z +C Y +A X +B Y +C Y +C Y +C Y +C X +B Y +B Y +C X +B X +A Y +C Y +C Y +C Y +B X +C Y +A Y +C Y +C Y +B Z +C X +B X +C Z +C Y +A Y +B Y +B Z +C Z +C X +C X +A Y +A Y +B Z +A Y +C X +B Y +C Y +A Y +B X +A Y +A Y +C Z +C Y +C Z +B Z +A X +C Y +B Y +C Y +B Z +B Y +C Y +A Y +B Z +B Z +C X +B Z +C Y +B Z +B Z +C Y +C Y +B Z +C Z +C Y +B Z +C Y +B X +A Y +B Z +A Y +C Y +A Y +C Y +C Y +B Y +B Z +B Z +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +C Y +C X +A Y +C Y +C Y +A Y +C X +A Y +A Y +A Y +C Y +C Y +A Y +B Z +A Y +B Y +A Y +A Y +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Y +C Z +C Y +C Y +B Z +C Y +C Y +B Z +B Y +C Y +A Y +C X +C Y +C Z +C Z +C X +C X +C X +C Z +C Y +B Z +A Y +B Z +B Z +A Y +C Y +C Y +C Y +B X +C Y +A Y +A Z +B Y +B Y +A Y +B Z +A Y +B Y +C Z +C Y +C Y +C Y +B Z +B Z +B Z +C Y +C Y +A Y +C X +C X +A Y +C Y +C Y +C Y +C Y +C X +C Y +C Y +C Y +C X +A Z +B Y +C Y +A Y +A Y +B Z +A Z +C Y +C Y +C Y +C X +B X +B Y +C Y +A Y +A Z +B X +C Y +C Y +B Z +A Y +A Y +B Z +B Z +C Y +C Y +C X +B Y +B Z +C Y +B Y +C Y +A Y +C X +C X +B Z +A Y +C Y +B Z +C X +C Y +B Y +B Z +A Z +B Y +B Y +C X +C Y +A Z +C X +C X +A Y +A Y +C X +A Y +B Y +B Z +A Y +B Z +B X +C Y +C Y +C X +B Z +A Y +B Y +A Y +C Y +C Z +B Z +C Y +A Y +C Y +C Z +A Z +B Z +B X +C Y +C Y +B Y +C X +B Y +B Z +B Z +B X +B Y +C X +C Y +C X +C Y +A Y +A Y +C Y +A Y +C Y +C X +C Y +A Y +B Z +C X +C Y +B Z +C Y +C Y +B Y +B Z +A X +C Y +B Y +B Y +B Z +C Y +B Z +A Y +C Y +B Y +C Y +A Y +C Y +B Z +C Y +A Y +A Y +C Y +A Y +C Y +A Y +A Y +B Z +C X +C Y +B Z +C Y +A X +A Z +C Y +C X +C X +C Y +C Y +B Z +A Z +A Y +C Y +B Z +A Y +A Y +C Y +B Z +A Y +C X +A Y +A Y +C X +B Z +B X +A X +A Y +B Y +A X +B X +C X +C Y +A Y +C Y +A Y +A Y +C X +B Y +C X +B Y +C Y +C Y +A Y +B Z +A Z +B Y +C X +C Y +C Y +B Z +C Z +A Y +A Y +A Z +C Y +A Y +B Z +C Y +C Y +B Y +A Y +A Y +C Y +C X +C X +B Y +B Z +C Y +B Y +B Z +C Y +A Y +B Z +A Y +A Y +A Z +C X +B Z +C Y +B Z +A Y +C X +C Y +C Y +B X +B Z +A Y +A Y +A Y +A Y +A Y +C Y +A Y +A Y +C X +C Y +C Z +B Z +A Z +C Z +A Y +B Z +B Y +A Y +C Y +B Z +A Y +C Y +C Y +A Y +C Y +B Z +B Y +B Z +C Y +C Y +C Y +A Z +C X +B X +B Z +C Z +C Y +C Y +C Y +C X +A Y +C Y +A Y +A Y +B Z +A Y +C Y +C Y +A Y +C Y +A Z +B X +A Y +C Y +A Y +A Z +A Y +A Y +B Z +B Y +B Z +C Y +B Z +C X +A Y +C Y +A Y +A Y +A Y +B Z +B Z +C Y +B Z +B Y +C X +A Y +C Y +A Y +B Z +C X +B Y +C Y +B Z +C Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +B Y +C Y +C X +A Z +C Z +C Y +C Y +A Y +A Y +C X +C Y +C Y +C Y +C X +B Z +C X +C Y +A Y +A Y +B Z +A Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C X +B Z +A Y +B Y +C Y +C X +B Z +C Y +A Y +A Y +B Z +C Y +A Y +C Z +C X +B Z +C Y +A Z +B Z +A Y +A Y +C Y +B Z +B Z +A Y +C Y +B Y +C Y +A Y +A Y +B Y +B X +B Z +C Y +A Y +C Y +A Y +A Y +B Z +B Y +A Y +A Y +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +B Z +B Z +C Y +C Y +A Y +B X +C X +A Y +C Y +C Y +C Y +A Y +C X +B Z +A Y +C Z +B Y +B Y +C Z +A Y +C Z +C Y +C X +B Y +A Y +C X +C X +C Y +C X +C X +B Z +C Y +B Y +A Y +B Y +A Y +B Z +C X +C Y +C X +C Z +C X +B Z +C X +C Y +C Y +C Y +B Z +A Y +C Y +C Y +C Y +B Z +A Y +C X +C Y +C Y +C Y +C X +A Z +C Y +C Y +C X +B X +B Z +A Y +B Z +C Y +B Y +B Z +A Y +B Z +C Y +A Y +A X +C X +C X +C Y +A Y +B X +C Y +B X +B Z +C X +A Y +B X +C X +A Y +C Y +C Y +C Y +A Z +C Y +A Y +B Z +B Z +A Z +C Y +A Y +B Z +C Z +C X +C X +C X +A Y +A X +C Y +A Y +B Y +C Y +C X +C Y +C Y +A Y +B Z +C Y +B Z +A Y +C X +C Y +B Z +C Y +C Y +B Y +A Y +A Y +A Z +C Y +B Z +B Y +B Z +B Y +A Y +C Y +C Y +C X +C Y +C Y +B Z +C Y +C Y +C X +B Y +B Z +C Y +C Y +A Y +C Z +C Y +B Z +A Y +A X +A Y +C X +C Y +C Y +B Z +A Y +B X +C Z +C Z +C X +C Y +B Z +C Z +B Z +C Y +A Y +C Y +A Y +B X +C X +C Y +B Z +C Y +B Y +B X +B X +B Z +C Y +C Y +B Y +B Z +C Y +A Y +B Z +C Y +B Z +C Y +B Z +C Y +A Y +A Y +C Y +C Y +B Y +B Z +C Y +B Z +C X +B Z +C Y +B X +C X +B Z +A Y +C X +B Z +C Y +A Y +B Z +A X +B Z +B Z +B Z +C Y +C Y +C Y +C Y +A Y +A Y +B Z +B X +C X +C Y +B Y +A Y +A Y +B Z +C Y +A Y +A Y +C Y +C X +C Y +C X +C Y +C Y +C Y +B Z +C Y +C X +B Y +C Y +C Y +C Y +A Z +C X +C Y +A Y +C Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C X +A Y +C Y +A Z +A Y +B Z +A Y +C X +C Y +C Y +B X +B Z +C X +B X +C Z +C X +B Z +B Z +C Y +C X +B Z +B Z +B Z +C Y +C Y +A Y +C Y +B Y +B X +C Y +C Y +C Y +B X +C X +B X +C Y +A Y +C Y +C X +C Y +C Y +B X +B Z +A Z +B Z +A Y +B Z +C X +B Z +C Y +C Y +C Z +A Y +C Y +C Y +A Z +B Y +C Y +A X +A Y +B Y +C Y +B Z +C Y +C X +C Y +B Z +A Y +C X +C Y +C X +C Y +C Y +C Z +A Y +C Y +B Z +A Y +C Z +C Y +A Y +C Y +C Y +C Y +C Y +A Y +C Y +C Y +C Y +C Y +B Z +C X +A Y +A Y +C Y +B Y +C Y +C Y +A Z +C Y +B Y +C Y +B Z +C X +A Y +C Y +C Y +B Z +C Y +A Y +A Y +C Y +B Z +C Y +A Y +B Z +C Y +C Y +B Z +C X +B Z +B Z +C Y +C Y +A Y +C X +A Y +C Y +B Z +A Y +B Z +A Y +C X +C Y +B Z +B Y +B Z +A Y +B Z +C Y +B Z +C Y +B Y +A Y +B Z +B X +B Z +C Y +B Z +B Z +B Z +A Y +A Y +C Y +B Z +B Z +C X +B Z +C Z +A Y +B Z +B Z +C Y +B Z +B Z +C X +C Z +A Z +C Y +C Y +B X +C Z +C Y +A Y +B Z +C X +B Z +C Y +C Y +B Z +B Z +B Z +C X +C Y +C X +C X +A Y +B Z +B Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +C Y +B X +A Y +A Y +B Y +C Y +B Y +C Y +B Y +B Z +C Y +C Y +C X +B Y +A Y +B X +B Z +C X +A X +C Y +A Y +A Y +C X +B Y +A Y +B Z +C X +B Z +C Z +C X +C Y +C X +C Y +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C X +B Y +C Y +C Y +C Z +B Z +C Y +C Y +B Y +C Z +C X +B Z +C Y +C X +C Y +B Z +C Y +C Y +A Y +B Y +C X +C Y +C Y +C Y +B Y +B Y +C Z +B Z +C Y +B Z +A Z +C X +B X +C X +A Y +C Y +A Z +C X +C Y +A Y +A Y +B Y +A Y +C Y +B Y +C X +C X +C X +C X +C Y +C Y +A Y +B Z +C Y +A Z +C Y +A Y +B Z +B Z +C Y +A Z +C Y +C Y +C Y +B Z +C Y +C Y +A X +A Y +A Z +C Y +A Y +B X +A Y +B Z +B Y +B Z +B Y +C X +C X +A Y +B Z +B Y +C X +B X +B Y +A Y +C Y +C Y +C Y +B Z +C Y +A Y +B Z +C X +B Z +B Z +B X +B Y +C Y +C Y +C X +B Z +C Y +C Y +C Y +A Y +C Y +B Z +B Y +C Y +C X +C X +B X +B Z +A Z +C X +A Y +B Y +C Y +A Y +B Y +C Y +C Y +C Z +C Y +C X +A Y +C Y +C Y +B Z +C Y +C Y +C Y +C Y +A Y +B Z +B Z +C Y +C Y +C Y +C Y +C Y +B Z +C Y +C Y +C X +A Y +A Y +C Y +C X +A Y +B Z +A Y +C X +C Y +C Z +C Y +A Z +A Y +A Y +B Y +C Y +C Y +B Y +C Y +A Y +C X +B Z +C X +A Y +B Z +C X +A Y +C X +C X +A Z +A Y +B Y +A Y +B Y +A Z +C Y +C Y +C Y +B Z +C Y +A Y +B Z +B Y +C Y +B Y +C Z +A Y +B Y +C Y +B Y +A Y +B Z +C Y +C X +C Y +A Y +A Z +C Y +B Z +C Y +B Y +A Y +C X +A Z +C Z +C X +A Y +C X +C X +C Y +C Z +A Y +A Y +C Y +A Y +C Y +B Z +C X +A X +C X +C Y +C Y +C Y +C Y +B Z +B Z +B Z +C X +C Y +B Y +C Y +B Y +C Z +A X +B Y +C X +B Y +C X +B Y +C Y +B Z +C X +A Y +B Z +C X +A X +C Y +B Z +B Z +C X +B Z +B Z +C X +C Y +C Z +B Z +C Y +C Y +C Y +B X +A Y +B Y +B Z +B Z +C X +A Z +C Y +C Y +A Y +A X +A Y +C Y +B Y +C Y +A Y +C X +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +B Z +B Z +A Y +B Y +C Y +C Y +C X +B Z +A Y +C Y +B Z +C Y +A Y +C X +B X +C Z +A Y +C X +B Y +C X +B Z +A Y +C Y +C Y +C Y +B Z +B Z +A Z +C Z +A Y +B Z +C X +C Y +A Y +C Y +C Y +C X +B Z +C Z +C Y +B Z +A X +B Y +A Z +B X +C X +A Y +C Y +B Z +B Z +C Y +A Y +B Z +B Z +A Y +A Y +B Z +B Z +A X +B Z +C Y +C Z +C Y +C Y +B Z +C Y +A Z +A X +C X +B Y +B Z +C X +B Z +A X +A Y +A Y +B X +B Y +B Z +C X +C X +C X +C Y +C Y +B X +C Y +C Y +A Y +C X +A Y +B Z +A Y +C Y +B X +C X +C Y +A Y +C X +C Y +C Y +B Z +A Y +A Y +A Z +C Y +B Z +A Z +B X +A Z +C Y +B X +A Y +C Y +C Z +A Z +C X +A Y +B X +C Y +C Y +C X +C Z +A Y +A Y +C Y +B Z +C Y +C X +B X +A Y +B Y +B Z +B Z +C Y +C Y +A Y +B Z +B Z +C Y +C Z +C Y +C Y +C X +C X +A Y +B Z +A Y +B Z +B Z +C X +B X +C X +C Y +B X +B Z +C X +C X +C X +B Z +B Y +B Z +C Y +C Y +B Z +B Y +B Z +C Y +B Y +A Y +A Y +B Y +A Y +B Z +A Y +C X +A Y +C Z +B Y +C Y +C X +C X +C Y +C X +C Y +A Y +B Z +C X +C Y +C Y +C Y +C Y +C Y +B Y +A Y +B Z +C Y +A Z +C Y +B Z +C X +C Z +A Y +B Z +C X +C Y +B Z +C Y +A Y +C Y +C X +C X +C Y +A Y +B Y +A X +C Y +C Y +A Y +C Y +A X +C Y +B Y +C X +B Z +B Z +B Y +C Y +C Z +C X +B Z +B Z +B Y +C Z +A Y +C Y +C Y +B Y +C X +A Y +C Y +C Y +A Z +A Y +B Y +C Y +C Y +C X +B X +C Y +A Y +B Z +B Y +A Y +B Y +C Y +C X +C Y +C Y +C X +A Y +B Z +C X +C Z +B X +C Y +C X +C Y +C X +C Y +B Z +A Y +A Y +B Z +C Y +C Y +B Z +C Y +C X +B Z +C Y +B Z +C X +C Y +C X +A Y +C Y +A X +C Y +C X +A Y +C Y +A Y +C Y +A Y +C X +A Y +A Y +A Y +B Y +B Z +C Y +B Z +A Y +C Y +C X +B X +C Y +B Z +B X +B X +B Y +C Y +C X +C Y +C X +B Y +B Z +A Y +B Y +C Y +C Z +A Y +C Y +B Y +A Y +C X +C Y +A Y +C Y +A Z +C Z +C Y +B Z +C Y +C Y +B Y +A Y +C Z +A X +C Y +B Z +C Z +B X +C Y +C X +C X +B Z +B Z +B X +B Y +C Y +B Z +B Z +B Z +A Y +B Z +C Y +C Y +A Y +A X +C Z +A Y +C Z +C Y +C X +C Y +C X +B Z +C Y +A X +B Z +B Y +C Y +B Y +C Y +C Y +A Y +B Z +B Y +C Y +C X +C Y +C Y +B Z +A Y +B X +C Y +C Y +C Y +A Y +C Y +C Y +C X +C Z +C X +B Y +A Y +C Z +B Z +B Z +A Y +C Y +C X +B X +C X +B Z +A Y +C Y +C Y +B Z +A Y +B Y +C X +B Y +B Z +B Z +B Z +B X +B Y +B Z +C X +A Z +A Y +C Y +A Y +C Y +C Y +B Z +B Z +C X +B X +C Y +A Z +C Y +C X +C Y +B Y +C X +B Z +C Y +C X +B Z +A Y +A Y +C Y +A Y +A Z +C Y +A Z +A Y +C Y +C X +B X +C Y +C Y +C X +A Y +C X +C Y +B Z +B X +C Y +A Y +B X +C Y +B Y +C X +A Y +B Z +C Y +C Y +B Z +A Y +A Z +C Y +C Y +C X +A Y +B Z +B Z +B Y +B Z +A Y +C Y +A Y +B Y +A Y +C X +C Y +A Z +A Z +B Y +A Y +C Y +A X +C Y +C Y +B Z +C Y +C X +C Y +A Y +C Y +C Y +C Y +C Y +A X +C Y +B Y +C Y +A Y +C Y +C X +C X +C Z +B Z +A Y +B X +C Y +C Y +C Y +A Y +B Z +B Z +C Y +A Y +B Z +A Y +C X +C X +A Y +C Z +C Y +B Z +B Z +A Y +A Y +C Y +A Y +C Y +A Y +B Z +C X +C Y +C Y +A Y +C Y +A Y +A Z +B Y +C Y +C X +A Y +C X +A X +C Y +C Y +B Y +C Y +B Z +A Y +C X +B Z +A Y +C X +B Z +A Y +C Y +B Z +A Y +B Z +C X +C Y +C X +C Y +B Z +C Y +B Y +C Z +B Z +C Y +C Y +A X +C X +A Y +C Y +B Z +A Y +A Z +B Z +C Y +C Y +A Y +A Y +A Y +C X +C Y +A Z +C Y +C Z +A Y +A Y +C Y +C X +C X +C Z +C Y +C Z +B Z +A Y +B Z +B Z +C X +A Y +B Y +A Y +A Z +A Y +C Y +C Y +C Z +A Y +C Y +B Y +C X +C X +B X +C Y +A Y +C Z +A Y +B Z +B Y +C Y +A Y +A Y +C Y +C Y +C Y +C Y +C Y +C Y +C Y +A Y +B Y +A Y +B Y +B Y +C X +C X +C Y +A Y +C Y +C Y +C Z +C Y +C Y +B Y +C Y +B Y +A Y +C Y +B Z +C X +C Y +A Z +A Z diff --git a/zig/2/part1.zig b/zig/2/part1.zig new file mode 100644 index 0000000..c73483a --- /dev/null +++ b/zig/2/part1.zig @@ -0,0 +1,19 @@ +const std = @import("std"); + +// define wins lookup table + +pub fn main() !void { + var file = try std.fs.cwd().openFile("input.txt", .{}); + defer file.close(); + + var a = std.io.bufferedReader(file.reader()); + var readerStream = a.reader(); + + var buf: [32]u8 = undefined; + var score: i32 = 0; + while (try readerStream.readUntilDelimiterOrEof(&buf, '\n')) |line| { + // get score + } + + std.debug.print("{d}\n", .{score}); +} diff --git a/zig/3/input.txt b/zig/3/input.txt new file mode 100644 index 0000000..fca63f0 --- /dev/null +++ b/zig/3/input.txt @@ -0,0 +1,300 @@ +qFdBBvtHHfvRlfvsqldvqjPpQmnQmjnjjjTRTLGRNG +ZCWhhCsJCzSJzSbzgsmPTGNNPPNGjgLTLjgn +WJZsbJMwJcszJcScwhVltFwBFBlqddvFdHDfqq +crtTsGTtqFThGQGCrsjTwdNJwpRdnJJwffRClpSf +PWVBPVHLvHHVgvZWBzmPpnfRSJJRQnSRflRPSNSl +gmzBzDgzmZQWLDLLgVmDrqGhsscrqDMGhcqtqcFr +HsbcdVrsbVbcLfPqqQsqqtPj +mMBFzZRnmFMRBDnDFBGZDGdDqLjtdQtPtgfPfttgtqgq +BZvZZdJMBFdJhSvhbhchcHll +GNRSqRfcNTpfGCcqjfzBpDQPWBzgDpQsPWzW +rrSdnVHlbMdLdBDzgtBtBmQt +rbFwwnLFLFwlMLrFwFhMVLrGNSTfZTRhfTqjGJRRZTCNcf +QWTnQCnWNNWmTnSPQwmqDbcscbpcjPjVPbrjpq +vJhzZNlNNgdzgzJdlGzHHcHDpjsHqrvbVrbvrD +RzRdRlhLgtCwCWSLnN +SFTJFTTwTVVSJBnSTdvNNfWbZCZWNZCNNhBv +srLrcHDcsjtLcLLcrLctjlcvbDNhmWCvNhZWGZZhNvhZmb +rclgtMPrrSgVTgJCng +DbrhDzcDffbzNbZvZWSSqSTNSVWv +gCPltPmCPglFnPFwtGPhGPwTCTdZZWZVRvWqdRqVVdTdvR +hLBhlmlstcffBzrpfj +wFLLmhMfwZLDwmMNRhZwRLDvJgldbJHPdQvcQHHJQPgH +bjrVrTSSJdQHcVll +CGCSsCCBpspBrqbSttpbqWmWZRmfFRZhZMNNLFqFLm +zWGjjBHGjzzTWMjhtDDWtPPlJZPJpvqQrmZTqQQpmr +RFbVLcBVLRcRVcCsCCqvpCZqmplqQJmPrlvQ +FLNRRSSRgScSVLLLNdFdwjHjnftBtGMgMjzHgzjWjj +znVSqnqbqzSbzTHqDDZmlcFcnhDMnDmn +LtjsvdvLJdjfFwRRCCMlChwCpMcclCcZ +LgvjjfjFQVgNTgWq +SJRJRFFCMSsGRMMwtZJRCVTgqgTVgTBCVpjTjmmWlB +ccvnnpnDVqTcBVTV +vPHprdHdpnzHSMsSrMRZJGws +GddGrcGNHnGvnCHddvCSWqTSWsTwTWShbHlhhb +gDPzLRVZgQfpRRFQDDVFDfzhSzsTBqqqnqbhnWTSSlST +QVFfFgRQQgLtgffZRfpFPfntjrcrjCmtCdMMmjMdJJJNtm +jjmNcpGCNmDqqsBfnZnGGGRLsZ +lrmlVWlQQtWllgtbQVrWBnZsJgsRLfZLhZBBBffL +rWMVQtrFlbFlSSMHVSdHHNHdcdDcddzppzzm +bTpjpjcVTLmphbLppJwqzqwJLqqzzzgRLJ +sdHNbrvNHrqPvZZZPRww +bNQCrCNtNsSlhffhVhpVWFCW +lpNnpMMZZDbNbnBjcrbjvScFmbGj +wqhdqVqdscrjdLsv +HQftVqWCfhwqtCCjWwfqzzVPZRJQgMlggZMMMZTNMNTnNRTN +fvvGbFtVmtTwgtMT +WcCcClzPCCcczJJScPWWZzBDmwbhBBHSghgDDMTHMDBD +nWPljWzZWnbcbRsNFjFFdFdVjFsj +NQrcLNmQGRfGLHHLZgbbnpjZJJJndbgnlv +DWtThDWtzzhltWTwjbdpvjbgqjgg +VtSPFWtBPBFSFBWCStshWBmlRfHfMRcfQLQLLlmCrCcN +pbmwqJnqSJVwwDPCjZZzrZfD +QtssBTvNdNvNtQvQGpGhdjPjDjczZDfjhgPPDcgjgr +GltptQpMGNNpRWlWFVFHJFHLWH +ZLLsDGGVhZcQQLhrLshrVFwHnWqJnWMnJJJnqfWfGn +jMlPdTlPlgCgFpngFWFnJfpw +TlTNbdSSTSTmTjPMTCdBPjBMrLDczsZcNrDhRNDRQRLLRVVz +HDLpBqDVVTvwGDDNRT +PlVWjfhsPMMmWtlFNTrhrrvCCCTNNbvw +lsglfgVJmsfMjJfSqSzdZnLgqcnLnp +pfCDJWBpfDffpJLgQJzzVzNrgNgNgNhNzmVr +ZnnGZbGTPZnsnRFdTlbrwdrNzrrmmWwmwVwttH +GbPGRvTnZljWnpqSMMCjqJQSCf +ZgnFgwggznFrfrwfHhNMMr +pctLCLRhPHBLMLWfBL +JJcdJcQCCJmQJppmlgndnFslsVnsvghZ +WpMgTppWGSWWJmJDpJcJJhqm +zZzjZNHvNjPvNsbZLbRLzsPcqhVJSVttdwhwmdRhtdJRVd +sLbvvCZCPSSSbbPfNlQQTQGBllCTnMnWQn +fwbwswddwSbBfDBggMBPDPhHcPWDmhHhmWnWPC +FQFlzLCzQTlrTTzvltFqFrmhPHjnhhnnchcJWcRRmRRq +lpLzlFZzCltrTNlTztQLZfSMGBNdSBVwbBNVSMSbVs +FMmgbTFdgLSgFQdjrRPrQBPDdj +ZqqWRvsfGrrPvvPC +wZzwnqccRwRNNpRSMztSMMFbgzLTFS +qTwBPfTfqQDMDrssHdvtRHccHMjR +gWSZGWzGFhnFFgnhNsRHtRdsVjZcRjHs +jgplhpJJFgnDrrwfqprwDP +CWhMSRfWhVVnRSZnVVdsLQqQMzGqLBvGMQqczv +PHbpNwrjJplttvcclLlQzzDszc +NrJbJrFNNJNPrmwrtbjtNmCfSWfWhSZZfSWCsfShfFVR +VLhRPLGLRPRSStRRLwfGqfmDwbmqbqqDlD +rBSFvppnzTbwDwlDcFWm +MJrnJTMvMsrTsPtshRNPZdSLhL +BZBrRCrnCQBBnZfGqhGGMMRcthMhMG +TLjsCdDCPTvNssjdsPsDgsgqGcPHczchtHczWzPWzzlWhG +gsTpsdNbvNNjNSpsNDTsmCnSVQFmSFwZnQBnmnQQ +llbsNsWrmbrGbWCNtBjcCFBzQFZBCFjF +LdSpwgdqSgzwJdRdLMRHLjQQjHjFHctjHBDTZj +gSppgpSJMhpzwrhblfbhhlWlnW +DwhTvvsJZWsBnDzPpBLbFp +GHtNGRGNdzbMBBtmBt +NljlCSVSHdjGSQRGlCQSCswqfWzhZfTcfzcJvshJ +lmsGNFsDGqCbFQBbffjjwpzptw +hRQdvdrvrvSngWnvnHrTMfzfzRtftzwVTwwpzB +HnSSWrvLJvWJGFDsmFLPDFcQ +bwwpGphpLghpTvpWphvJlFLJqqltjSjVlSStSR +cmszZdDdBZzcNcDCDcNsmNMcqVjMJStFRJltVPVrlVPjVJll +HcdmcCzzzQcHNcsCdpnGnhwGgnRggHvbbR +CfMBbwBGbMbDCFrDvhFFDT +mjzRjjRdSmjPnzFZgnnrTT +cmSsVcHjLHTwMfLBpBpBwM +whqqfZzgHvhSzzVNVDbpDbmbVbNpJD +GcQFntGTCCcCTMCTGBlJsJsDDWpRbWBsJpNS +FnPcrGFFdddMnCnTqgqgqPHfLjLqgSzz +zMSzzjssFdGnszRtNftqqwFHbbZw +RRPLVrgrwHqBqgwt +rPWmLCTCQlCQQmmrWLrQShJshhzdhhJjcSjlzRds +lvgvCDfPqLHppqpCCDJncbntttbBtBBVHjwtrB +TdddszSQsWcngjzVbcVZ +hRWsTRTGQhNRGhRTFSWmlpgfqlvLmplPqvvGgv +LbWFLQdWWPwWSjSHPHRfppHHDRpggR +zmqqNNzlzmnzzNCmVCmtBzpfGsfpBgDgspprcfcfsrRB +qNNVNJtNmmmNzznVJzvCTDZWhvZZjZFbWQQhFhbZSw +DjdHqJVVhHVZjhDHPWtDtZLFBRBFmSRTFSbwmRRTffTTJf +NNznnGlgMQsnQzNclzpfSRSMRmfPMmFRwBwB +vzrcGcNcPPvHvHPt +wLCcmZwWTNtZNdMSMGSCnJGGMB +RFbHsPhVvFPRjlshhrnQnGjQGSdSqJfqnQBM +HhzVlFHhPwzScmSTgL +TNlBhDNvNBFpJgpPPpDQ +jjfCdCZZqsCZsbdqPgFGGMRzSFMqQMRS +jnWPtWssCtWcmZbbtstvnrrvhVBhTNNhBHlBlL +DZwNWPDzPVWbJngrQjrNnrQcMg +GRRfttLBhhvTvmLmFcFcgFFSnjWrnsrG +TLthBWtTRLHqhlLLfmhBqVPDJVdPwzJCPPZHwdDdVd +GGVhrVSMQwQqfVssVvnWFgvgWn +jtlcRBBtQRmpWsjzFCvzWnvF +QPcRbpppDmNDtPPblZMfhZdDwdMrqSSGrq +ZRrdtBdQvQsWnnfWFZsF +bJLcMzNDLbMgwfnGMWFv +lpvhmzNDmDmlNbzbmrVVPrHRCPHQBVCP +rZllQrsRWrlQswccMVbGbVbTdcQQ +NtJCntLSHCjznfLTcGGGqWMdWM +jCtzzSFthhSSSjPJrFDlvWrlDZRpwpRZ +mQmbLjbrLQjLmTtwwWBTTvWjtt +BHSqdHclHHNFlppNqWPwfwDvTfDPPtCw +ddSGMGHcdcMhMZnBbmbZmgGJJg +lvvBzvDnlzjfPnfjnQPlldRbVbRqbqqCgsqqVpQQgVqc +NNFtGNMtTNFmJNGNZtZMwVRTTcsCpVTbbgCbgRhscp +FGNGZMtNLWmmJWGFWJGLSNtPrPnBfDzzvjnDBzpnvDBLnv +fwvQRFQvQqwpwNJrwN +BstDnBjhjBhnshSptpJzWqNppbfr +CsDjCdZcBCDcjnfDHfhnfggZMGlgQVmgMTRmgVGMMl +MwlBVqVlsgnmzwJsvjhWZhGPvjvRRWzG +QNQpQpftHdHHCHGfSpCrQNdSrDRDhchhjvjcPrRRWrPvhZjv +LtLSCTSGfHGdGwswnqsggssTqV +qDDCHjzjznTvWshZQWfnZZ +PFFmmNMMtNMVFtczcFPJNrLhZwQZQsSvvSvWvGQQJQssss +tFzrrPPNNFlzVrpRTpblRDqjTpDC +DWDrrBdpmdpBrCgDthdtfcHsqJsCqscqwfsjzHcq +TNLNFNSTQNQTSnlMcczVJjVzsqLDDfJJ +TFPZQRvvlMSPPtRWDtmDRWrBGr +LWGVZdrvWdpLGWRsjPMsHmdHdHldlj +zJzznChzzzCSfTgMhCPDmlDCbmlsmjDDQj +nSTTJhJtnShNtzwhgNrGRRWZZRvMWMtVrqGp +PbPmtNmBbPlqBvqlDJBT +LpGVDzVpVZqqSTvq +pMnWGLRLRppnGpGndrGPtgDCjMPmbPgCQmPPNN +sqcZcbZZpcZspcCCRMmznWGWdLWhwDRGTTWggT +NjFSJgVHrvfVtrGzWdSznDwLSTLn +jFrBNVVjBFNvHrFHBlBFFpMslPgPcpMPmcQPPZCgpP +frddqsThtsTfTbPcvhsrbsRLpRBNRpmDpGmRGcRNLpGp +QWJHCJwWzlHZQZHQCJJRzRqnLDGRGpnGBRnNDN +CVwHCClJjQgWCZVZQgMwSdthjrqvrSPPhdbqtPhs +TvdphBBhhhCgdLNNJJJLWz +fVcsqRVrPcnJWgDnJN +JlqsRJtssZwqwVtPwltRPsHHbFTwTFbpjHhQjTQbvpTF +cQSnPDDQJGNzwnNpZb +RHDrssVRDHRgsRFHRlrVwzzpNGZlfZdppZdwGNZb +sHCHtDgtCjVVLFChqPMhBCMcSTqB +hdbQbqcCCQcqFbCbVdcWCQQlRMBtGlRHBtBMpHhpHThZMR +LLsSLLfgJPrgPnssnmlZtlZpHGHVGfZVtZpl +PvmvgmvvnzmrSsSLJDqDNzqFDQdDwzWWbV +HNNjnLbpLGHvWJDhdWWPpWDW +lVcSNgcSVclhRlPZPRCDCR +cqmSQrwwrrVSrtQFqVNmFwjQnvjHzBbLLGjfjzHTzvnH +QmvWVppPHQQvbbvmSHSpPzfzwnWMTZFFzwFMCzLnwT +jGBljlNNjgDtGDrNjjtjqqDRnMzRLnFzCFnMfRfMzCnttF +jqNrrGdJcdgLjqDqBrDQbbmhdQQmmpPbphmbVv +ZHQCggVHHRDWvbfjGptVtLvL +nnFwnwrDDMShnhFrFLLLpjvPlPGGtLGb +dcNSMhrrTDCBCsWgCTQW +HqDDLGtDdCnhfDnwnV +PmlJsJTPlbdBTzTnzhnnCCWWzV +lSPjMScggsScgjSMMbqHLFGrRLGHRZZtdrcG +ZVVtNNppdZSdLtCPqnHhqJJFtb +zgwwQBfwmGgSrDfgrrGBggzHCnbJbqbCJFnqhHBhnHHCqJ +rvrzfmlRrgDgmrzfggvwzvdjjcccLjMjVcVcsVLjVSZR +dppcLRHpphchhNhSddjzHzWQWQLtrMsrWQCWCsMZssCZ +JGfBfJJfBqvGVlVbDBwDBDBfZnrQsMQtssMttssDsQMWZncn +qPVwlgPBmjpPhcmS +zGPnzBgPzPnPlHZlDDHnZBNCvrtcjcjmMcFzNcNFmFdc +qQpfsLTTSspqTfJdmdCtMjdtjvJcmr +bfQqqSrswLLrfpLTqprfTnDVDVBBbgHPDHnhDPgDbV +JssTnsdFztZLdNJnNtTsLNZGqlbGFBqrGMHqHBcFBqMFMH +CCgSfgPSvSfhpShSRppCdfrlqGHGGcHmclmqbbqbqlPc +wvVSVjQSSQhRVvfQChvZZsdtJstjLNLZDJnLss +CmfNNNZNqDrnDjMhZM +gdczzGtdFcddtWQgGGMnVhnjJwnrJFDPTwMP +dlvcdzdHtzQSLRSfmhLSqv +ZpFFLcHFZZRRmJVZgD +PzhrtQntzcrjCRJtbtRgBsBRVR +zdzWfCzhQzlhWfWhlvpFNlpSqcMSHHMv +NrrMgMhNQhNjQrtqtPtwVtZpggPw +TfRLndnLFCRFTFbbRDHwpVqqBBwsHwZsfH +TJFRdLlRThrlcvZcvQ +scrwRVjbQvQBzsBC +gMfVqNnVmnCBQDTvdn +SMqhWqVlmWSmqMVRSJjjpcFrcLpJrR +HtSQHQntHsHMrtHnGfHQVVzLvSBSVvVVSFNJzzVN +cmPRmpqlpPmcgTlTpjJNjjVDvDRFNVVBFD +hlmCpmqmpgqpZTlcdQHFQfbHHZttwMQwtr +VpWgbgfwCjbftwVPPpGQFQhzTBQTBGPzqFTS +dbRbDcRrsnsRrLZmLRDZldDZqTNTGqqFFzGGhSTNTFTzNmNT +MlLdHlDDHrHclMMrCwgHCCwWwCbCCjjg +GGNLhfDMVcVrcGsT +jSJQFjHbwPFSvQSHwZFvHSHrqCCrrTsqBwNBrcBNsVTsqq +QjZSjZJZPvNRZJQPnSZbJZRWLfnmgDlmhdhWgWLdMdfmhM +CgGnzPNggCJtNTgTZTPZzZZvvcDcDDdqDFcJssJDHDqvHq +jhhrrLVlmLRRnRflfVbFHHHqdVsDqcvbHVDb +jWfWwrlmRRnQmPzZNGZPBNCQTB +NzDDhwNmhvtrGmNCvWRVbcRRVTcHHcVFTbwV +LgsPlLsQgQdJsLdldtpgFFTMbnFqTcMbHqFcPncq +dgsJsLLLggljrhtGNNtSjvGm +ptzSrZtzhsmmtPrhLFRFnjnnLMsnfLRL +HvwVDHwWWgGDGdHgqVDWDMnRnTjFNTNjfLJvRRRRRR +DwDgWgQbDDDHwBBBWdwQGVHhlhlZZSSmztfcppSBhzZcZp +CWmWRzlMJqWDWqCJbqDlCBBVLMQHVMGrfMVtQZrsLL +SnhPdFFPNZsBBdHtVQ +SSPcFFgnwnSpwvcSjwzCqRzTmJbpJCRBmbbD +wQbqGWWSqwrbGWWWGjbNMJPfgfnnDmPnPNLfjN +tJFztRZCvVRCztZFZRVgmMhmgNLfRfnmDPNPhm +BFCVZzpVFlHCdbQqcTcGlJbbSG +tttfLPZZQZTlZPHHPWgMVvBnjmvjnjgGBQ +FzcNDDDrNzprrrshprhFJtVGVnjtjGvnhvVnnjnjGM +RDqJNszDPfdqPtlT +QCJdMjCQbdBjSbTHDsbWDDwHTP +zlvlmqzqGfgdNzLldrHwwPGpWDrPGZWprr +gfVfRczVqcRzmdcSQMjQSQCSjQCQ +RhhCGhRBShjjRfpwppFTfFHZHZZD +qzdqzlnPPctPdmtPdTZbwQvvwqvHHvZpwZ +nVTVTcsWmWSRhhRVrGVB +GmshRMnzqRGsPNwMwcrrpcVV +CDCbFCLvCgfDSFLslgDpwpLtTwwcPtNNtTTprt +JvSFbSbbFllJlgDvlJbgdRhRdqzBGnzshZnRRRnHBZ +ShJhtcsvvvQbnnsccVTLVTppWqddpVnLWp +NdzPrPZgPMNNrmzpTzpTCjWfzCpzVL +dZgHmZRPPZRlZmrPDtDRccvbtQQbJbRS +wqjLjwhznhBLqLWGfvSlvcmlrJsqrtJTJJ +PwbpFPQDRCDrDJTrTmvs +gbZVFbZHgwHbCdpCRMnffNLhWnnzMdzLLW +RVVGSNTTRlNqHblBNB +JfwJMvLLZwLsMJwWMJfwLHBqzFlvzpBQcqzblFbBqblq +wMCZJsgJCCCnsMHrgLLjSPSVTgShtRjTPhRRmt +lmQSSWdMHHLWgWqD +ZZtVGGGJrJvGVCwfgHNLccmNFFcqtc +vrCGPhvrTPdRBnsRTmmp +dDMDDjzCQjwCCcDgjSLLLsLNlmpplN +FqrHFTFRLCLVFBmS +JhHJhHRThrfPZPvhnTZZbWdwdwDDWtDzJDtbMtCW +ghwDzJRDwHmPthncSPncLLsPcvnv +MWCrNTCHrMVjQQMQcSdnpTLnFFdTcnTc +qbWMfWfNrWVQWfbjVBbqMfwDtqzmhmRRzGhtHhHhRwZh +fmSmnjTjrlzGlTzJdH +BrhRRQMrgQvgFFhQQbwpFvGGdZqZJqpJqHVpJGJLHdLJ +ggbDwQMsvsMQrFMFcWSPSCPmSsPfnnmP +cmNVbMrrrjcHDRcvfW +wQGdFfSThFsLhhHWvDCWDCJRCCjd +LtpStGhqrrpnfnpp +bvcccTqbgvpGndJtgdsgNd +wDQwQhtQhQRmSmjsJndJdBBJBJnlLS +hwhmRrzFVjtwzDmrVFrvPCcCMVPPvfqpCCTVVb +jRrRNPNRWjPRWPRQNjQjThTCzBBzDCFBGzgDFGGQ +dnppLwmwCnvtlqltvtnTGBThGhdFZhgzDzGccD +MvnqpLlMqCqCHMjWPPHMSHSs +NNpNNvpvBdtTrMFFMhSSwzjzchzwhzwL +VVndHqflQZZZgHSLLhjzRSmZRhcR +glGgnqbQlngnWCGJpJprtrtFrdPPGs +WqwRjzGtRzZZRRGjWBJzjwmfMTHGGssTTDsrLmmmQLMD +SNdvSdFlSNNhSPFFcPFclbQQslHmfHTDsTQMLgDTmHQQ +CNcCFvpdnWpjWwJf +PVPnVHcnRncGZqbVzHVPnnLbSMjwrzWMjSwDtWwWtwWhwDWz +pTfsQCshCllpglWWSjBMSQSrMrjM +hvpvppggCpJTvTmshgfsmZRRHqbcLPHZmPLRnmPZ +LQbhVZZmZhZjBdbGmgHqnHTmvqgnnWHr +SzCfDFFNRfsSFFMFfvprvpWzqzgqTwHTvp +CDNDFJgMDSQhjVdPJLQG +plpdLdpjjrrHJJjLrrHLFdbzzCcvzgFgcwggzPMFvvcMhM +GRtSBQNsQlMPRzRlzw +ZSTtsmBlmjLLpnpH +hglGNVSdNSghzSgCBhDFLBMBtFMMFtHtbtLL +frQZccRcqGFmFHrJ +nvfGZwvTwGTfQwvfTwfgnCSlpdnzgzslppCsCV +snTSPbQnTTnQgbmsTJsLfZwjffhpLnGRjpGfjL +dcNWcNHHlNtWHHlCtltWNFNMLZwjpGfpmrZfrFprrRGpwZfp +HmdNWCmDMVvQPDgqJs +GGFtSngQLfnSnQffgPnRgFRGRwmRJvwbBbJDwjvTbjrwhJvJ +WHClslcNNWcqNWlCZdcHsVrThBwBjbhDTDBhrvDZJTwm +NWVqqcHHNpsNcNVdVlhCMlHQQMQQzLfzQPttFGPMLSLgtF diff --git a/zig/3/part1.zig b/zig/3/part1.zig new file mode 100644 index 0000000..c87c81d --- /dev/null +++ b/zig/3/part1.zig @@ -0,0 +1,57 @@ +const std = @import("std"); + +const lcConversion = 'a'; +const ucConversion = 'A' - 26; + +const charIndexer = struct { + pub const Key = u8; + pub const count: usize = 52; + pub fn indexOf(e: u8) usize { + return letterToIdx(e); + } + pub fn keyForIndex(i: usize) u8 { + return idxToLetter(i); + } +}; +const CharSet: type = std.enums.IndexedSet(charIndexer, std.enums.NoExtension); + +fn letterToIdx(char: u8) u8 { + return switch (char) { + 'a'...'z' => char - lcConversion, + 'A'...'Z' => char - ucConversion, + else => unreachable, + }; +} + +fn idxToLetter(i: usize) u8 { + const char = @intCast(u8, i); + return if (char < 26) char + lcConversion else char + ucConversion; +} + +pub fn main() !void { + var file = try std.fs.cwd().openFile("input.txt", .{}); + defer file.close(); + + var a = std.io.bufferedReader(file.reader()); + var readerStream = a.reader(); + + var buf: [200]u8 = undefined; + var score: i32 = 0; + while (try readerStream.readUntilDelimiterOrEof(&buf, '\n')) |line| { + var bagOne: CharSet = .{}; + var bagTwo: CharSet = .{}; + var i: u32 = 0; + while (i < line.len / 2) : (i += 1) { + bagOne.setPresent(line[i], true); + } + while (i < line.len) : (i += 1) { + bagTwo.setPresent(line[i], true); + } + bagOne.setIntersection(bagTwo); + if (bagOne.count() != 1) unreachable; // ensure only one element in common + var iter = bagOne.iterator(); + score += letterToIdx(iter.next().?) + 1; + } + + std.debug.print("{d}\n", .{score}); +} diff --git a/zig/3/part2.zig b/zig/3/part2.zig new file mode 100644 index 0000000..b13d221 --- /dev/null +++ b/zig/3/part2.zig @@ -0,0 +1,58 @@ +const std = @import("std"); + +const lcConversion = 'a'; +const ucConversion = 'A' - 26; + +const charIndexer = struct { + pub const Key = u8; + pub const count: usize = 52; + pub fn indexOf(e: u8) usize { + return letterToIdx(e); + } + pub fn keyForIndex(i: usize) u8 { + return idxToLetter(i); + } +}; +const CharSet: type = std.enums.IndexedSet(charIndexer, std.enums.NoExtension); + +fn letterToIdx(char: u8) u8 { + return switch (char) { + 'a'...'z' => char - lcConversion, + 'A'...'Z' => char - ucConversion, + else => unreachable, + }; +} + +fn idxToLetter(i: usize) u8 { + const char = @intCast(u8, i); + return if (char < 26) char + lcConversion else char + ucConversion; +} + +pub fn main() !void { + var file = try std.fs.cwd().openFile("input.txt", .{}); + defer file.close(); + + var a = std.io.bufferedReader(file.reader()); + var readerStream = a.reader(); + + var buf: [200]u8 = undefined; + var score: i32 = 0; + read: while (true) { + var bags = [_]CharSet{ .{}, .{}, .{} }; + for (bags) |*bag| { + const maybeLine = try readerStream.readUntilDelimiterOrEof(&buf, '\n'); + if (maybeLine) |line| { + for (line) |char| { + bag.setPresent(char, true); + } + } else break :read; + } + bags[0].setIntersection(bags[1]); + bags[0].setIntersection(bags[2]); + if (bags[0].count() != 1) unreachable; // ensure only one element in common + var iter = bags[0].iterator(); + score += letterToIdx(iter.next().?) + 1; + } + + std.debug.print("{d}\n", .{score}); +}