From 89ff0eda4efda13c9a69b67d7d05aac60ca3c87b Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Fri, 2 Dec 2022 12:51:53 -0700 Subject: [PATCH] Day 2 done, started working on improving build.zig --- build.zig | 44 +- inputs/day2.txt | 2500 +++++++++++++++++++++++++++++++++++++++++++++++ src/day1.zig | 9 +- src/day2.zig | 172 ++++ 4 files changed, 2698 insertions(+), 27 deletions(-) create mode 100644 inputs/day2.txt create mode 100644 src/day2.zig diff --git a/build.zig b/build.zig index f513fce..04934e3 100644 --- a/build.zig +++ b/build.zig @@ -11,26 +11,32 @@ pub fn build(b: *std.build.Builder) void { // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. const mode = b.standardReleaseOptions(); - const dayPath = "src/day1.zig"; - const exe = b.addExecutable("advent_of_code", dayPath); - exe.setTarget(target); - exe.setBuildMode(mode); - exe.install(); + const days = [_]u8{1, 2}; - const run_cmd = exe.run(); - run_cmd.step.dependOn(b.getInstallStep()); - if (b.args) |args| { - run_cmd.addArgs(args); + for (days) |day| { + const dayPath = b.fmt("src/day{}.zig", .{day}); + const dayName = b.fmt("day{}", .{day}); + + const exe = b.addExecutable(dayName, dayPath); + exe.setTarget(target); + exe.setBuildMode(mode); + exe.install(); + + const run_cmd = exe.run(); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| { + run_cmd.addArgs(args); + } + + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); + + const exe_tests = b.addTest(dayPath); + exe_tests.setTarget(target); + exe_tests.setBuildMode(mode); + + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&exe_tests.step); } - - const run_step = b.step("run", "Run the app"); - run_step.dependOn(&run_cmd.step); - - const exe_tests = b.addTest(dayPath); - exe_tests.setTarget(target); - exe_tests.setBuildMode(mode); - - const test_step = b.step("test", "Run unit tests"); - test_step.dependOn(&exe_tests.step); } diff --git a/inputs/day2.txt b/inputs/day2.txt new file mode 100644 index 0000000..2462951 --- /dev/null +++ b/inputs/day2.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 \ No newline at end of file diff --git a/src/day1.zig b/src/day1.zig index 3d3ab09..cd327a7 100644 --- a/src/day1.zig +++ b/src/day1.zig @@ -35,11 +35,4 @@ pub fn main() !void { } std.debug.print("Total calories of the top three elves: {}\n", .{sum}); -} - -test "simple test" { - var list = std.ArrayList(i32).init(std.testing.allocator); - defer list.deinit(); // try commenting this out and see if zig detects the memory leak! - try list.append(42); - try std.testing.expectEqual(@as(i32, 42), list.pop()); -} +} \ No newline at end of file diff --git a/src/day2.zig b/src/day2.zig new file mode 100644 index 0000000..8583173 --- /dev/null +++ b/src/day2.zig @@ -0,0 +1,172 @@ +const std = @import("std"); + +const Outcomes = enum(u16) { + Lost = 0, + Draw = 3, + Win = 6, + INVALID = 99, + + pub fn from_guide(value: u8) Outcomes{ + return switch(value) { + 'X' => Outcomes.Lost, + 'Y' => Outcomes.Draw, + 'Z' => Outcomes.Win, + else => Outcomes.INVALID, + }; + } +}; + +const RPSStates = enum(i8) { + Rock = 0, + Paper =1, + Scissors = 2, + INVALID = 99, + _, + + pub fn from_opponent(value: u8) RPSStates { + return switch(value) { + 'A' => RPSStates.Rock, + 'B' => RPSStates.Paper, + 'C' => RPSStates.Scissors, + else => RPSStates.INVALID + }; + } + + pub fn from_me(value: u8) RPSStates { + return switch(value) { + 'X' => RPSStates.Rock, + 'Y' => RPSStates.Paper, + 'Z' => RPSStates.Scissors, + else => RPSStates.INVALID + }; + } + + + pub fn get_move_needed(outcome_needed: Outcomes, opp_choice: RPSStates) RPSStates { + return switch(outcome_needed) { + .Lost => opp_choice.get_strong_to_move(), + .Draw => opp_choice, + .Win => opp_choice.get_weak_to_move(), + else => unreachable + }; + } + + pub fn outcome(self: RPSStates, opp_choice: RPSStates) Outcomes { + if (self == opp_choice) { + return Outcomes.Draw; + } + else { + if (self.get_strong_to_move() == opp_choice) { + return Outcomes.Win; + } + else { + return Outcomes.Lost; + } + } + } + + pub fn score_round(self: RPSStates, opp_choice: RPSStates) u16 { + var score: u16 = switch(self) { + .Rock => 1, + .Paper => 2, + .Scissors => 3, + else => unreachable + }; + + score += @enumToInt(self.outcome(opp_choice)); + + return score; + } + + pub fn get_weak_to_move(self: RPSStates) RPSStates { + return @intToEnum(RPSStates, @mod((@enumToInt(self) + 1), 3)); + } + + pub fn get_strong_to_move(self: RPSStates) RPSStates { + return @intToEnum(RPSStates, @mod((@enumToInt(self) - 1), 3)); + } +}; + +pub fn part1(opp_letter: u8, my_letter: u8) u16 { + const opp_choice = RPSStates.from_opponent(opp_letter); + const my_choice = RPSStates.from_me(my_letter); + + return my_choice.score_round(opp_choice); +} + +pub fn part2(opp_letter: u8, my_letter: u8) u16 { + const opp_choice = RPSStates.from_opponent(opp_letter); + + const win_cond = Outcomes.from_guide(my_letter); + const my_choice = RPSStates.get_move_needed(win_cond, opp_choice); + + return my_choice.score_round(opp_choice); +} + +pub fn main() !void { + var file = try std.fs.cwd().openFile("inputs/day2.txt", .{}); + defer file.close(); + + var buf_reader = std.io.bufferedReader(file.reader()); + var in_stream = buf_reader.reader(); + + var buf: [1024]u8 = undefined; + var score_part1: u16 = 0; + var score_part2: u16 = 0; + while (try in_stream.readUntilDelimiterOrEof(&buf, '\n')) |line| { + const opp_letter: u8 = line[0]; + const my_letter: u8 = line[2]; + + + score_part1 += part1(opp_letter, my_letter); + score_part2 += part2(opp_letter, my_letter); + } + + std.debug.print("PART1: My total score: {}\n", .{score_part1}); + std.debug.print("PART2: My total score: {}\n", .{score_part2}); +} + +test "Win Conditions" { + var opp = RPSStates.Paper; + var me = RPSStates.Rock; + + var score = me.score_round(opp); + + try std.testing.expect(score == 1); + + opp = RPSStates.Scissors; + me = RPSStates.Paper; + + score = me.score_round(opp); + + try std.testing.expect(score == 2); + + opp = RPSStates.Rock; + me = RPSStates.Scissors; + + score = me.score_round(opp); + + try std.testing.expect(score == 3); + + opp = RPSStates.Rock; + me = RPSStates.Paper; + + score = me.score_round(opp); + + try std.testing.expect(me.outcome(opp) == Outcomes.Win); + try std.testing.expect(score == 8); + + opp = RPSStates.Paper; + me = RPSStates.Scissors; + + score = me.score_round(opp); + + try std.testing.expect(score == 9); + + opp = RPSStates.Scissors; + me = RPSStates.Rock; + + score = me.score_round(opp); + + try std.testing.expect(score == 7); +} \ No newline at end of file