diff --git a/day12-hard/build.zig b/day12-hard/build.zig new file mode 100644 index 0000000..cf2f380 --- /dev/null +++ b/day12-hard/build.zig @@ -0,0 +1,70 @@ +const std = @import("std"); + +// Although this function looks imperative, note that its job is to +// declaratively construct a build graph that will be executed by an external +// runner. +pub fn build(b: *std.Build) void { + // Standard target options allows the person running `zig build` to choose + // what target to build for. Here we do not override the defaults, which + // means any target is allowed, and the default is native. Other options + // for restricting supported target set are available. + const target = b.standardTargetOptions(.{}); + + // Standard optimization options allow the person running `zig build` to select + // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not + // set a preferred release mode, allowing the user to decide how to optimize. + const optimize = b.standardOptimizeOption(.{}); + + const exe = b.addExecutable(.{ + .name = "day12-hard", + // In this case the main source file is merely a path, however, in more + // complicated build scripts, this could be a generated file. + .root_source_file = .{ .path = "src/main.zig" }, + .target = target, + .optimize = optimize, + }); + + // This declares intent for the executable to be installed into the + // standard location when the user invokes the "install" step (the default + // step when running `zig build`). + b.installArtifact(exe); + + // This *creates* a Run step in the build graph, to be executed when another + // step is evaluated that depends on it. The next line below will establish + // such a dependency. + const run_cmd = b.addRunArtifact(exe); + + // By making the run step depend on the install step, it will be run from the + // installation directory rather than directly from within the cache directory. + // This is not necessary, however, if the application depends on other installed + // files, this ensures they will be present and in the expected location. + run_cmd.step.dependOn(b.getInstallStep()); + + // This allows the user to pass arguments to the application in the build + // command itself, like this: `zig build run -- arg1 arg2 etc` + if (b.args) |args| { + run_cmd.addArgs(args); + } + + // This creates a build step. It will be visible in the `zig build --help` menu, + // and can be selected like this: `zig build run` + // This will evaluate the `run` step rather than the default, which is "install". + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); + + // Creates a step for unit testing. This only builds the test executable + // but does not run it. + const unit_tests = b.addTest(.{ + .root_source_file = .{ .path = "src/main.zig" }, + .target = target, + .optimize = optimize, + }); + + const run_unit_tests = b.addRunArtifact(unit_tests); + + // Similar to creating the run step earlier, this exposes a `test` step to + // the `zig build --help` menu, providing a way for the user to request + // running the unit tests. + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&run_unit_tests.step); +} diff --git a/day12-hard/hard.in b/day12-hard/hard.in new file mode 100644 index 0000000..b3f4975 --- /dev/null +++ b/day12-hard/hard.in @@ -0,0 +1,1000 @@ +??????#??? 7,1 +?#####???????#.. 5,1,1,1 +#?#???##??#.?#?#?#? 3,3,1,7 +???.?#?????? 1,5,1 +?.????????#??? 1,2,2 +???#?##?????.#?? 1,8,2 +##..#?????## 2,1,3 +?###??????..??. 8,1 +?.???.???? 1,1,1 +.????.??#?#? 1,5 +?#??.#??.?. 2,3 +??#?##????#???..? 8,1,2,1 +.#?.?#??#??.?#?#?.? 1,7,5,1 +??.??#.??? 1,1,2 +??###??##?????.#? 10,1 +???#??###?..#?.?#..# 9,1,1,1 +#?.?###?#?#.?.#.?.#? 1,8,1,1,1,1 +..?.???#??##???##.?? 1,10 +??##.?????#?? 3,1,2 +????#?#????#?????.? 1,1,1,8 +???.?.#??.? 2,1,1 +##?##????? 5,1,1 +.?????.???? 3,1,1 +?#???.#?.????.? 3,2,1,1,1 +?#??##?#?..???#?.?? 8,1,1,2 +.??.?.#??????#????. 1,1,11 +?.??#????. 1,5 +?.???#?.???? 1,1,3 +???#???.??.? 4,1 +??.#???????...??.? 1,4,1,1,1,1 +?#?.??#.?? 3,3,1 +??#?#?.????#??#.. 1,1,2,1,5 +?#?..??##???##???? 2,11 +?##?????#?????? 3,1,3,1,1 +.?.?.?##??.??# 1,4,1 +??#?..???? 1,3 +?#.???#?????#?#??? 2,1,2,4,2,1 +#?????..#?#?.????. 3,1,1,1,1,1 +?#??.???###?. 3,6 +??????.#.?????. 1,1,1,4 +.?##?##???? 6,1 +??#??#????? 1,1,2 +?.?.??#????# 1,1,2,1 +.#?????#.? 1,1,2 +??.#?.?..#?????? 2,1,1,2,1 +????##.?#.?????.?##? 1,2,2,3,1,2 +?#.?#??#???...?# 2,1,2,1,1 +?#????.??.#????? 4,1,3,1 +??#???#??#####????? 4,13 +..#?.?.##??##..? 1,1,6,1 +.??????.??.?#??#?? 1,1,1,2,4,1 +??????#.??#???. 5,4 +.????.#??.?#???#?#? 1,3,7 +?#.???#???.?????? 2,1,1,2,4 +??.?.?#??? 1,2,1 +?##?#???#?????? 4,6,2 +??????#??#? 1,6 +?#?#?????####??#?. 12,1 +?.???#?#?????.#? 10,1 +#?????..??.#?? 1,1,2,3 +???????.#????? 3,2,4,1 +#?#.?#?#?##????.#.? 3,8,1 +??#?##??####.?.#.?? 12,1,1,1 +.?????.#?.??????# 1,1,2,3,1 +.###.##?.?#??.?? 3,2,2,2 +..???##???##?? 1,2,4 +??????#???????##? 4,1,1,1,4 +#??.?.??????? 1,1,1,6 +?????#?#???????## 3,5,1,3 +#??????.???? 1,3,1,1 +.?#???.#.?..# 3,1,1,1 +??#???#?.?. 5,1 +??#???.#??. 3,2 +#??.?#.??..##?? 1,2,1,3 +#.??.#?.#??.#?????? 1,1,2,2,5,1 +????.#.?#? 2,1,2 +?##?????##?????# 3,2,8 +???#??#????????? 6,4 +???#???.?.#? 4,1,2 +?????????#?#????# 4,6,1 +?#????????#?##?? 2,2,7 +.???.?###???? 1,1,7 +?##.???.?#?#?????? 2,2,5,4 +???..??#??????? 1,1,5,1,2 +.?#.#?#??#.??.. 2,3,2,1 +#??#???#????##???.? 4,4,1,2,1,1 +??##??????? 3,4 +??.#.??.#??##???#. 1,1,1,1,6 +?????#.?.. 1,1,1 +?.????##.??#? 1,4,1,2 +?.##??.?????? 1,4,2 +????.??#??.? 2,4 +.#?###???.????#.???# 6,1,1,1,1,1 +.??#???##?????###? 1,1,5,7 +???#?????????????? 1,2,1,4,1 +?.?#?#??.?.#???? 5,3 +??????#.???#??? 4,1,1,2,2 +#?????.????##?.????? 1,4,2,3,5 +.#??.????.. 2,2,1 +.??##?##??? 4,3,1 +???????.?#? 4,1,1 +??????##????.??? 12,2 +??#?#????? 2,1,1 +.?????#??#.?.??###?# 3,1,1,1,5 +?????#?##?#?? 1,1,5 +??#???????#???#?#.?? 16,1 +????#?#?#??.???##??? 8,6 +???#..#?????? 2,6 +???.?????#?#???. 1,1,5,1,2 +????.##?.?# 1,3,2 +?#???????#????????? 1,1,4,3,1 +?????#????.???# 1,4 +?#??????????#??? 1,5,4 +????.?#?.???#??# 2,2,3,2 +#?#??##.??? 7,2 +??????#???#?##? 3,3,5 +#?.???????.? 1,6,1 +?#?#???.??????#? 5,1,4 +#????#.?????? 1,1,1,6 +.?#???.#??? 4,2 +????.??.??.?? 2,2,1,1 +??????#?????#? 1,5,1 +.?#?#??#??????# 8,2,1 +???##?...?.????###? 2,3,1,6 +?#???#?#.??????#?? 1,1,1,2,4 +?????.?#.???#?#??? 2,1,2,1,4,1 +..??????#.???.. 5,2 +?.????##?? 1,2,2 +??.#?????####.# 1,2,1,4,1 +????#????.??.?.???? 6,1,1,1,1 +?#?.???#???????##. 1,4,1,1,2 +??????????#?????.??? 1,9 +..???????..??. 1,4,1 +?..??????#..?? 1,6,2 +???#??????.?.? 3,1,1,1 +?#?###??#?? 7,2 +??.?#?.?#??#??. 1,2,7 +??.???????. 4,1 +??#??#???#? 1,1,2 +.??#????## 1,7 +#???#??.?.# 5,1 +.??#????????#???? 2,2,3 +?????.??#?. 1,3 +??#?##?.??.????????? 1,1,3,1,2,5 +?#??.?#???## 2,2,3 +.#?.???????#.??? 1,3,2,1,1 +#?#.????.? 1,1,3 +?#??#??#??###?????? 13,1,2 +..???####.????.? 1,5,1,1 +.?#.????????.??#? 1,1,4,2 +?.???.?.?? 1,1,1 +?#???????.??#??? 3,1,1,3 +?.??.??.??##?? 1,2,2 +##?#??##???? 4,2,1 +??????#???????? 2,1,5 +???.???#.??#????.#? 1,1,2,1,4,1 +?#?.#...#???? 1,1,2,1 +??????..??##??? 3,2,5 +?#??#??#??? 1,1,3 +.?.????.?#?. 1,1,2,1 +.##.???????..#? 2,7,2 +?????##.?????. 1,4,5 +?#????#??.?#.##.?? 2,1,3,1,2,2 +???.?..#?.? 2,2 +#.??.???????.??? 1,2,2,1,1 +..?###??????#?????? 7,1,2 +???#.??????.?? 4,2,1 +#?????###.#?..??. 4,3,2,2 +??#??#???? 1,1,4 +???#??##????.#??? 4,2,1,1 +?.##????????? 4,1,1 +??#???.#????###?? 4,3,5 +??#??.????#.??#?# 4,1,2,1,1 +????????#.#???### 2,1,3,2,4 +???????#??#???# 1,4,1,1 +?#????##?# 3,4 +????????.#?? 1,1,1,2 +?#??#.??#?#.? 1,1,5,1 +#????.?#??.##?????. 3,2,7 +?????..?##? 4,4 +?..#?????????##?.??? 1,7,1,2,3 +#???.#???...? 4,1,1,1 +???###??.# 5,1 +.#?##???#? 1,2,2 +#??????#?.??.?#.??? 1,2,2,2,2,2 +???##?????????#??? 5,2,1,2,2 +???.????###?##??#. 1,1,6,1 +.???#?.?..?? 3,1,1 +#???#??#??..??###? 2,1,4,4 +.?.?#.????.? 1,1,1,1 +..???.#?##.? 2,4 +#?#..?#..?????????.? 1,1,1,3,5,1 +?.????#.?# 1,4,2 +??..??.??.????.# 2,2,2,1,1 +?#.#?.?#?? 1,1,1 +???#??#.?.? 4,1 +..??##?..????..? 4,4,1 +?##?.?????#.??# 2,6,1 +????.?#???... 1,5 +??#.?.?.?????##???# 1,1,1,8 +???#.??##???#???#??? 1,1,11 +??#?????#?.?.#?? 9,3 +?#??#??????#??.?? 2,1,2,3,1 +?#?###.???? 5,1 +??#..?.??. 1,1,1 +.#.??###?????##? 1,4,5 +#?#??.???.??? 1,1,3,1 +????????.#? 7,2 +##?#????????#? 2,4,1,2 +#???#?.?????####### 2,2,11 +.?????#?.? 1,3 +??.?.#??.??????.?? 1,1,2,4,1,1 +?????.##?#. 1,4 +??#??.??#??#?.#??#? 4,1,5,1,1 +????#??#?..??# 6,2 +.???????#?#??????#? 2,8,2 +#?.??##??.?#?? 2,3,1 +?.????????????##? 1,3,1,6 +????##???? 1,3 +????.##????? 1,5 +?.?..???#. 1,1,4 +#????#??.?????? 1,1,1,1,6 +?#.???##??. 1,3 +?????.?.???? 3,1,1 +???.??..???? 2,1 +??????..???.???? 3,2 +????#.??#????#??? 5,3,3,1 +?.???#??.???? 2,1 +??#?#??.?????.? 4,5 +#.?.??.?????????.? 1,3,1 +?#???????? 1,3,2 +?#???#???#???. 1,4,5 +?.????????.# 6,1 +??????#?.??#???? 1,1,3,4,1 +??#?????#?.? 1,2,1,2 +?.?#?#.??# 1,3,3 +???????#??? 1,1,2 +???.???##??.??.?#??? 1,1,5,1,3,1 +??##??#?#??#??? 2,2,2,3 +?##?..#.?.?# 3,1,1,1 +.#?#?.?.?????.? 3,4 +.?##?????#???#?.?. 2,1,1,1,2,1 +.?#?##???.#??? 7,2 +?????#..#. 3,1,1 +.?.?.????#? 1,1,2 +?##.?#???#. 2,6 +??.??????#?###??. 1,2,2,5 +#???????#???????? 1,11,1 +???.????#.. 3,4 +?.?.???#?..#?.? 1,1,1,2,1 +???#???????.?#? 4,3,3 +???????#?.?# 3,3,1 +.?????#?#?#??#.????# 1,1,1,6,2,1 +???????.##?#??#?#??? 1,1,11 +?##?????.?????? 7,1,2 +??????????????.? 1,1,2,4,1 +??.##?????.?#.?? 4,1,1 +?..?.??..???? 1,3 +?????#????#.?. 1,6 +#.??????????????#? 1,12,2 +.?.???.???? 2,1 +????.?#??.??? 1,1,1,2 +??.????#???????. 1,8 +...#????????#????. 1,10 +.??#?..##? 4,3 +????#?.??.?#?????? 1,3,1,1,1,1 +????#.???.#? 1,1,1,1 +.???.??#???. 1,4 +??#?##?????.? 2,7 +??#????#??.?. 1,3,1 +#?????#.??????#?? 1,1,2,1,4 +??????#.?#..???#? 2,3,1,2,1 +?.???.??#. 2,1 +???#?##??????#.?? 6,1 +?#???????#???..?? 3,4,1,1 +?##?.#.??? 3,1,2 +?#???#?#?#.??..?# 9,2,2 +????????#?# 1,2,5 +????..???###?? 1,7 +?#???.#??.?#?? 5,1,2 +.????###?? 1,4 +?#?..???#?#???#?# 2,1,7,1 +?#??.##????# 2,4,1 +.?#.#?#?.?..#????? 2,1,1,1,2,1 +???????.###? 1,2,2,3 +?.#???????##??#...?? 3,6 +??#?##?##????#?.???? 4,7,2 +?????????.???.?? 1,4,1,1,1 +.#????.??#?.#?? 5,1,1,1 +?#?#???.?#??#??###. 1,2,10 +?????#?.??# 4,1 +?#?????.????.?#???# 3,2,1,1,5 +.???????#?##?? 3,6 +?.???#???? 1,1,4 +??????????? 1,2,1 +?##????????#? 6,1,2 +?#?.?#???? 3,2,1 +?##?###????????? 9,3 +?????.??#?##?? 2,8 +??#?#?#?????.? 10,1 +??.?..?#?#???##? 1,1,1,1,4 +.??#????#??#?.?.. 10,1 +?????#?#??#??#?##? 3,13 +.??????#.???????.? 3,1 +?#??.?..?. 3,1 +#..?????????? 1,4,2,1 +??#??????##.? 4,1,2,1 +???##?#.#? 5,2 +?##??#.???.????#?? 6,1,1,1,2,1 +#??#????..???? 8,1 +.#?##?.???#?#?? 4,5 +.#????#.?#???. 6,1 +.#.??#?????#??#?? 1,3,10 +??????##?#??????#? 1,11,1 +???##.?..???#???? 3,3 +???.?#??##??#?? 1,2,3,1,1 +#??.?#????.?# 3,2,3,1 +?#?.???????#?. 3,1,5 +###?#??????.???? 5,1,1,2 +?.#????.?##?? 1,1,4 +?????.?#.???????#?# 2,1,2,8,1 +??.??##???#.???# 1,4,2,2 +?#??????#?????? 2,2,2,1 +?????.???? 1,4 +????#..??#? 2,1,1 +#???.?#.?# 4,2,1 +...?...#??##? 1,5 +.?????##??##???? 2,3,7 +.##??#.??? 2,1,3 +???#????##???? 1,10 +?.???#?#???# 1,1,7 +#..???..???? 1,1,1,2 +?#?????#??? 1,1,4 +???.?????? 2,1 +..??.?#?????.??? 2,3,2 +????#?#?#???.? 1,7 +.??#??#???##? 6,3 +.??#?.??.???????? 1,1,2,1,4 +?.?##??..#??.??? 4,2 +??.???????#?#. 1,1,5 +???????????##???# 1,1,1,9 +#.??.?#????##?#? 1,1,2,4,1 +????.???#?.??#??## 1,1,2,1,5 +?.#???#??? 5,1 +???#??#????..? 5,1 +??.?#??.?#?# 2,1,3 +?.#???#???.???#.? 1,4,4 +..##.#???#??? 2,6 +??#??.??.?#.?#?.?# 2,1,2,1,1,2 +????#?.#??.#??#. 5,2,2,1 +????###??#??#?#????? 14,1 +???.???#?? 2,1,4 +?.????????????.??? 1,1,5,1,3 +??#??#??#???..? 7,1 +?#??###..?#?#..?? 7,3 +#??????.????? 5,2,2 +.??#?#??????#.?.?? 12,1,1 +???#??#??#.?#?###??? 1,1,1,1,8 +??.#??#?###?#?##. 2,1,10 +?????#????.#??#?#?# 7,1,8 +?##?????.???#??#? 2,7 +??#????#?.? 3,2,1 +.?#????????.??# 2,3,1,1 +??#??????? 1,5,1 +??#?#???####????#### 4,12 +..??.?#?#.?#? 1,4,2 +?????.???##??..#? 1,1,1,4,2 +?.#?#????#????#??? 5,10 +????????#????.?? 1,8,1,1 +??##???#.?? 3,1,2 +#???????.#? 1,6,1 +#??#??#???##?.#?#. 9,3,1,1 +?#??#??.#?#.#?? 6,1,1,1,1 +?????????.#??#?? 5,2,3 +?.???#.#?##?.?? 1,1,1,2,1 +??#.??.?#?? 1,1,2 +????????????#. 2,2,1 +..????.#??. 1,1,2 +?????.?#?#... 1,1,4 +.?#??????.?????## 3,1,1,1,2 +..?###??#?..??? 7,1 +?#??????????????#??? 7,1,2,2,1 +#?#??#??#?#?##.?.# 6,1,1,2,1 +???..#??#??.#?????? 5,3,1 +??...#????#??##?#?? 1,1,11 +????##??###?#?????.? 3,10 +???????##???.??????? 11,1,2,2 +????#??..#?.?? 4,1,2,1 +?##????????# 5,3,1 +???#.###...??##.?#?# 3,3,1,2,1,1 +?.???#?#??#???.??? 1,10,1 +?????##?.? 1,5,1 +???#?#?#.???# 4,1,1,1 +.???#???.??? 1,4,3 +?.???.???#??? 1,5,1 +??????###???#???.#? 14,1 +..???????#??#?##? 2,1,2,6 +???#?..??? 4,2 +.?.#??????##? 1,3,1,2 +?#??#??###?#?? 2,6,1,1 +?????#???? 5,2 +??#.?.?.#.??.?????? 3,1,1,1,2,1 +?????#.?#??? 1,3,4 +..??.#????#??? 2,2,2 +.?#?#.?#?#??#?#?? 2,1,10 +?#??..??#?. 1,1,4 +?.??#??#??# 1,1,5 +?.??#?????????. 7,1,1 +???.???#??? 1,6 +???????#.?? 2,3,2 +.#?.???????????.? 2,1,3,1,1 +???????????????#?# 1,1,2,5,3 +.#.??.?????????.??? 1,1,1,7,3 +..##?.??????????#.? 3,6,1,1,1 +#?#??????#..??? 1,2,1,1,2 +##???.?#?##??. 3,1,6 +..??#?????#?.. 6,2 +.??????#.?????# 1,3,1,4,1 +.??#?????#????????? 7,1,1,1,1,1 +#??#???.???#?. 1,1,1,3 +..??.??????..? 2,3 +.???#?.?.????#?????? 4,5 +??...????#???#?? 2,1,5 +?.??#???.??# 3,1,1,1 +#.?#??#?#??#?# 1,1,7,1 +.???????##?#??#?# 4,1,4,3 +??????????? 2,1 +#?.????#???..? 1,2 +.#..###??###??##? 1,8,2 +????#?#???.##?? 1,4,1,3 +????????.##??? 7,5 +????.?????????# 1,2,4,1,1 +???..#?#??.???? 1,1,4,1,1 +??.?#??..???? 1,1,1,3 +#?#???#??#??? 7,2,1 +???????#???????? 3,6,4 +??#????##??#? 3,2,3 +?###??#?##????????? 15,1 +?#???..?#.. 2,1,1 +?#?????.?? 1,1,1 +#?????#?????#?#???? 1,1,9,1,1 +?#??????#?#???????? 13,1 +??##??#?...?#####??? 8,8 +.??????????#??#????? 1,1,1,2,1,5 +??#??.?#??##???#? 3,6,1 +??###????.???? 8,1,1 +.??#.?.#????????? 1,1,1,10 +????#.?.??#???.? 4,1,6 +?????.?#???#? 4,2,2 +..???.??.#???#??? 1,1,8 +.???#???#?#???? 4,4,3 +#?.#?..???#? 1,2,1,1 +??#??????#? 1,4 +??..?#.#??#? 1,2,1,1 +???...?#??#?#?? 1,9 +#?.???..?.??. 1,1,1,1 +??.??.###?? 1,4 +?#???.?????????? 4,9 +??#???..????.. 1,4 +#???..???.??#.???? 1,1,1,1,2,3 +?????.?..????? 1,3 +?????##???#???#.?. 7,5 +????????#?#????####? 1,17 +?##?#??##.?#????###? 9,9 +.?????#??#???##?#??. 7,6 +?#?#??.??? 3,2 +.?..?.??..##.?. 1,1,1,2,1 +.??.?????# 1,2,1 +???#??????#???... 3,3 +.?????????##???.??. 1,5 +?#.?#???.#?.?????? 1,2,2,1,1,1 +????????.??#.##?#??? 1,1,3,3,7 +??????#####? 1,1,6 +????#?.?.???. 4,1 +??#.?????...???? 2,3,3 +.???#????. 2,1 +.??????#?#????. 4,4 +#.???#??????#?? 1,1,2,6 +.??#??.??### 2,1,3 +?.?????..?.??#.??? 2,3 +??#??##.#?#??#??# 5,1,1,1,2 +?#??...?.. 2,1 +?#????.?##?????? 4,9 +????????###?#????#?# 1,15,1 +?????#?.??#????.# 2,3,1,3,1 +#????..?#.?#??.# 1,1,2,3,1 +?###?###.?????? 3,3,6 +?..#?#???.???? 1,6,1 +?.?..??##??###?#? 1,10 +.???..?#.#?###?#??# 1,1,1,1,8 +.??????.????. 3,1 +?#.???...#?##?#..? 1,1,6 +?????#????.???????#? 1,6,2,4 +??????????#????? 1,4,3,1,1 +???##?.????#?. 3,2 +????..?..??. 1,1,1,1 +?#???????. 1,4,1 +.???#??##????..??. 1,2,6,1 +.??????.?. 2,1,1 +?.#?.??.??# 1,2,1 +?###?#?##??? 8,2 +??#????.#??? 1,5,1,1 +##.?????.??#? 2,1,1,2 +??#?.?????#? 3,1,2 +???.?.?##? 2,1,3 +#???????????.?. 1,1,1,4,1 +????.??##?.???#. 3,4,1,1 +??.???##?? 1,1,5 +?.??#??..#? 3,2 +.?..#.##????? 1,1,6 +???.????????#??.? 1,6,1,1,1 +???#??.?#?#? 1,2,1,3 +?#???.?.?? 3,1,1 +?.?.???##???#??#?? 1,1,10 +?#???#?##?##. 1,7 +??#??????#.????.?#? 9,1,2 +???##????##????.??#? 6,6,3 +??#???????#???.??.# 3,1,5,1,1 +.????????#?? 2,5 +.#?..#.##?#??##??. 1,1,2,1,3,1 +?##..?.#????? 2,5 +.?.#.##???.? 1,5 +?.????????###?##. 6,6 +?????##?#. 1,1,4 +.??.????#.. 1,1 +????...?##??#?##?.? 1,1,10 +.???.##???????##?.?? 1,11,1 +.??#????#.????.??. 7,3,1 +.??.??#?###???##??? 2,11 +???#???#?#??#?? 8,3 +??#?#???#???#?????. 2,2,1,2,3 +?#?#?.?#??#??? 4,1,1,1 +.?##?####?##.???? 3,4,2,2 +???#??.?.??## 5,1,4 +.??.??#??? 2,1,1 +?????##..??? 1,4,2 +??????..#?#?.? 1,4 +???.?#???##..? 1,1,7,1 +??.??????.??? 1,3,1,1 +????.??.???? 4,1,2,1 +????.?????? 1,1,4 +???????...??????? 1,3 +??#??##?##?###??.. 5,7 +??##..#?... 2,2 +?????.??..? 5,2,1 +?#????????#???#????. 4,12 +???##?????..?????# 9,2,1 +??#?.??#???.# 1,2,5,1 +????..??#? 3,1 +#?.#?#???#??? 1,1,1,3 +.#????#?#.???## 4,1,1,1,2 +?????.???#?. 3,1 +?##?.???.?? 4,1,1 +?#?#????????#?.??? 4,1,2,1,2 +?????.???#??#??## 4,1,2,5 +?.?#???..?.##... 4,2 +.?????#.?#????#???? 6,4,4 +???##?###????#?. 8,3 +?#??????.?????#??.. 3,2,8 +?????##????# 9,1 +??????#..#??? 3,2,2,1 +..???.??#?.?????? 1,1,3,6 +???#???##.#? 5,2,2 +???.??.??????????? 2,1,1,2,1,1 +.????????#??.???#? 2,1,4,5 +?????.??.? 3,1 +??.???????. 1,1,2 +?##?#??#??#?? 4,1,1 +.??????#??? 1,5 +?????...?#?# 1,2,4 +?????.#??. 5,2 +#.??#???##???#??##?? 1,16 +??#??#?.?#.?#?? 5,1,3 +???#??.?.#?? 4,1 +????#????#?????# 1,3,2,1,1 +.#???????.?? 1,1,1,1 +#???.?????##?##?#? 1,1,12 +????.???##?.? 3,5 +?????#????#???# 4,4,2 +????#.??????? 2,1,1,1 +?#??????#. 2,1,2 +????????## 2,3 +??????.?????#?# 4,2,1,1 +????.??#?? 4,2 +???#?#?.#.?.??? 6,1,1,2 +#..????..?#?.????# 1,2,1,2,1,1 +???????#?#????.? 1,1,5,1,1 +#..????#??##???..#?# 1,8,1,1,1 +.?.??.??..??? 1,1,2 +?.???#.??.. 1,3,1 +.?##..?##?. 3,3 +.#??#??#????##?#?? 1,1,1,6,1 +?.?#?.???#?#??..??# 1,3,6,1 +???????????? 4,1,3 +..???#??????#???. 5,7 +???????#?##? 1,1,1,5 +?????#???#??. 1,4,5 +.??#???#??? 2,2 +?##..?????#? 3,1,2 +??.??...#?????#??.? 2,3,4 +#?#???#?.? 5,1,1 +.????????? 3,2 +???????????#???. 2,5,2,1 +????.??.?.?????? 2,1,1,1,3 +.?????#??.?? 1,4 +??????##?#????#.?? 2,7,1,1,1 +??#.?#?#?????#?#?# 2,3,2,1,3 +???????#??.?????.#? 2,5,2,1,2 +.????.?#??#?????? 3,5,5 +??#.???.???#??? 1,1,1,1,6 +???#???????## 1,1,1,6 +#?#.?????. 3,1,2 +?.????.?.????. 1,1,1,4 +#..?????????? 1,6,1,1 +??.?.?..?????..??.?? 2,1 +.????##???#?. 1,7 +??#??#?.?#?#???? 4,3 +???.###???.??#??#? 5,6 +#.???.#?#????? 1,1,8 +??.??????.#?##??##? 3,9 +???????????#????? 2,3,2,1 +?##.?????##??#?.#?#. 3,1,6,1,1,1 +#?.#?????#.#???????? 2,1,4,1,4,1 +??????...?# 1,2,1 +#??????##??????.#.#. 1,8,1,1,1 +?????.????#? 5,5 +..??#.??.?????. 2,1 +??????#??.???? 5,2 +??##?#?..?????##??? 7,1,1,2 +#.??#?#???????##??? 1,4,7,1 +?#??#??.????. 1,2,2 +.#???.?#?#???????? 1,1,1,7 +??????.??#? 3,1,2 +#??.?.?#.?#?#??????? 1,2,4,4 +???##??#?.??#?????? 1,6,1,1,1,1 +.#???##????.???? 9,3 +.?????????#?#??? 2,2,6 +??#???##??????????? 4,8,3 +?.?#????.????????# 1,3,1,1,2,4 +???????..?#??..? 1,3 +.??.??##?????##.?. 2,3,4,1 +.????..?????? 3,4 +?????#???.???. 2,3,1,1 +?#?????#??? 3,4 +?#?#..????????.?.??# 1,1,1,5,1,1 +?.?????#.???#? 3,1,2,1 +??.?#?#???????#?#? 3,8 +???#???#?.#???.#??. 1,1,3,1,2,3 +??????##??????#. 1,8,1,1 +???#??#?????????. 8,1,1,1 +??.????????? 4,3 +????????.?. 2,1 +??????..?..#?. 4,2 +????..??.????????.?? 1,2,1,1,6,1 +.????.???.???? 2,1,3,3 +??#??#???????.???#. 1,8,1,3 +##???????#. 2,3,1 +?#?.??#??????.#??? 2,6,3 +.??##??.##? 4,2 +?##???.??#? 4,1 +?#?#?..?#?#?? 4,3 +.????#??????..## 6,1,1,2 +?##???????????? 5,1,1,1 +????.#.???? 2,1,1 +???..??#???#?????.? 2,9,1 +?????#?????..?. 1,2,2 +???.#.???#????? 1,1,1,6 +.?..?.##??.??????## 1,2,1,7 +#..?#????#?? 1,2,4,1 +##??.??#.?????? 4,1,1,1,1 +?###??.?#?##?#????# 5,7,3 +..#.?##?.. 1,3 +?#.#?.??????#??###? 2,1,2,3,3 +?????.??.????#???. 4,5 +???????#??##??.??#. 3,6,1,2 +.?.#?????????##?#.? 1,2,6,1 +???#?????????##???.. 6,2,7 +?#?##???????.????#?# 4,1,3,3,1,1 +.#?????.?????#?##?## 2,1,1,1,4,2 +?.?..#????#? 1,6 +.#?.?.???????? 1,1,5,1 +??#????????#? 6,5 +???.?#??#? 3,2,2 +??###?#?.?#..? 3,2,1 +??#??.?#?. 2,2 +?.???.???? 1,1,2 +..??#??????#????? 2,9 +??.???.????##???.?? 2,3 +?#?????.?? 1,1,1 +??#.?#?????#?????. 3,5,1,1,1 +????????#???????? 1,2,8,1 +?#????#.?#. 6,1 +???#???#???#?#?## 4,2,7 +???.##.????. 2,1 +?????#??.??#? 1,5,2 +#????????#?.#???? 1,7,1,3 +??.#???#.???. 1,5,3 +.#??#??#???##?#??? 2,2,1,8 +????#..??.????.?? 1,2,2,3,1 +#?????.#???#?.#????? 4,1,3,3,1 +?????????### 1,1,1,4 +?.??..###???# 1,1,4,1 +?????#?????#?? 1,2,5 +???#??????? 4,2 +.???.???#?#?#?? 2,9 +?#.?#.??#??#?..?? 2,1,4,2 +??????##??..?##?##?? 7,6 +###?##...#???.. 6,2,1 +????.?#.?#????? 1,1,1,6 +???.?.??#?? 3,3 +???..#.??#??#???..#? 1,1,1,9,1 +???##??.#?.???##..?? 1,2,2,5,1 +??????#?.??# 1,5,1,1 +#???.????.? 4,2 +.?????????.???#?? 3,1,1,2,2 +??#???.??? 3,1 +.?#?????#?#????.???? 10,2,1 +??##???#?##???.. 3,8 +??..?????? 1,1,1 +????..???#??#?? 1,1,5 +#???#.?????#?? 2,1,2,3 +#?##????#??.??.? 11,1 +?#??.?.?#?#??? 2,6 +??..?##?#???.? 1,6,1 +?.???????#.?#? 1,8,2 +#????#??????##..??. 10,2,1 +??.?.#..??????? 2,1,1,1,1 +?#?????##?#??#.?## 4,7,3 +??#?????#.??#? 5,2,4 +??????##?##??#..#?? 2,1,3,5,3 +.?????#?#???#?###??? 2,1,1,9 +????#?#???###.????? 12,1,1 +?.?.?????..?#?????. 2,4 +?#???..??#.??#??# 5,1,1,4,1 +???.##?????#?.??#? 2,2,1,1,3 +?#????#?????#??? 12,1 +?#???.#??.. 3,3 +?.#??#???????????? 1,9,1 +.?.??.??##????.? 2,6 +?#?#??#???????.? 1,6,2,1 +.#.????#???? 1,1,4 +???.#.?.???#?#?## 1,1,9 +#?.?##??#??#?????. 2,6,4,1 +?.#.???###??#?.#???? 1,1,1,4,1,4 +.??###???.??#????? 8,1,1,2 +??.??#????#?..?.? 2,1,7,1 +???????##.?#?#?#?? 2,4,6 +.?..????#?????# 1,11 +.??????.??? 1,3,1 +#???#?????##??? 12,1 +??#?##?????.?# 1,4,3,1 +?????.??#?#????#???. 2,13 +.#?????#??? 1,1,5 +??#?.???#????#??. 1,9 +..???#?..?##???. 4,4 +#??#.?#?????. 4,3,3 +#???#?#?#???.?????? 2,7,5 +?#??#???#.???#???? 5,2,3 +??????????????? 1,1,7 +?.???.???.. 2,1 +???#???.??.?????..?? 2,4,2,1,2,1 +#.???#.??? 1,3,1 +##????????.??? 8,1 +??.#???.??? 1,3,1 +???###?.??#? 6,1,1 +.?????..#.?##??#??? 5,1,2,3,1 +?#???????...#.???.#? 4,1,1,1,1 +??#.?.#??.?##?#?#?## 1,1,1,1,1,9 +#.?#..?#???? 1,1,1,1 +??????????#?????? 1,3,6 +.?#?#?..?...?#??.??? 5,1,4,1 +.#?#???.?.##? 6,1,3 +..?#.#??.#?## 2,2,1,2 +??#??.???.?#??##??? 5,1,6 +????????#????.?? 1,1,6,1 +?????##?????????#?. 8,2,1,2 +??.##???## 1,3,3 +????#?#??????. 5,1,1,3 +...????.??.??#.? 1,2 +#??.??.?#??????. 2,1,3,1,1 +?.#?##????.# 8,1 +?#?..?.#???. 3,1,3 +??##?????? 2,3 +?#??????.?##? 1,2,1,4 +#?#?#??.?????# 7,1,1 +????????.??#?? 3,1,4 +.???????.??????????? 7,2,1,4 +???#???????.? 1,8 +#????????#??.#.?.??# 1,5,1,1,3 +.?..??.??.#####?? 1,1,1,7 +#?.???.?????.????### 2,2,1,7 +..#.??.?#??? 1,2 +??.##??????.?.? 7,1 +.??#.?????.?# 3,4,1 +??????#??????#??.??? 3,3,1,2,3 +?.???.###?.? 1,4 +??...##?#?.? 1,4 +?.???.#?.. 1,1 +#.?###?..?? 1,5,1 +?.?#?##?#.?..#??#? 6,1,4 +###.?????#? 3,1,3 +???#?????##????? 5,5 +.??#??#????#.#???#? 4,1,4,3,1 +??#????..??#?? 3,1,1,3 +???##???##....?## 9,2 +??.?##????.?#.?#?? 1,2,1,2,1,1 +?####?##?????. 7,1 +#??..??????????#?#? 3,14 +#?#????..#?#? 3,2,4 +???.??#???? 1,3,1 +.?#??.?#???????.?? 3,5,1 +???..####.?.??? 4,1 +.?.??###?#?#??####?? 1,14 +??????.???..???? 6,1,1,1,1 +??????.?????????? 5,2,2,1 +??.#?#????# 1,1,6 +???#?.???????.? 2,5,1,1 +#????#???? 3,3 +????.???#???.?.? 3,1,5,1,1 +???#?#???? 1,1,3 +????##??????#?? 2,4,1,2,1 +.?#?###.??#?#?#?. 6,7 +?#.????#???? 1,2,2,1 +.??.?.????. 2,1,2 +.??..?.?.?###?.??. 1,1,4,1 +.???.?##.?? 3,3,2 +????????#????? 1,1,2,6 +..?.?###.? 1,3 +#??#?#.????? 6,1,1 +??????##?#??#????.?. 9,5 +..???.#?###. 1,5 +??.???#??#?#####? 1,11 +???.??.##?. 1,1,3 +.???#..?????? 2,5 +????#.????##????? 1,1,1,5,1 +???.?????##??## 1,5,2 +??????#????#???? 1,7,1,2 +??..?.?#???? 1,1,2,1 +????.#?#?????? 1,7,1 +?#.????#?#????. 1,5,1,1 +????#.#????##???.?.# 3,10,1,1 +.?###.#..#??.?? 4,1,3,1 +.?.??????#?????##??. 1,13,1 +?#??#???????##.#.?? 8,1,3,1,1 +?????.????###??? 2,1,4,1 +??#??#?#????.????? 7,1,1,1 +.?????.?.???.????? 2,1,1,1,2,1 +??.???.?#? 1,1,3 +.????#???????#? 1,3,3,1 +?##??.?????????#.? 4,2,4,1 +?.???##??? 1,4 +????#?.???#?????? 5,4,4 +??????#?????.???.##? 5,1,2 +??##??..?.?#? 4,2 +??#??##??????????. 1,7,5 +??#??.?#..?.##??? 4,2,1,2,1 +.??.##?.????????. 1,3,1,1,2 +##?.?.?.#???#?.# 3,1,5,1 +?##????###???#?????? 2,8 +.??###??.? 5,1 +?.????#????? 1,8 +#..#??.????.#?? 1,3,1,1,1 +#?????.?#?.#???? 3,2,3,4 +???????.#????? 2,4 +????##?????????#?.?? 2,2,2,3,2 +?#??.????#????#??? 2,1,10 +?.??.##?.?##? 2,3,2 +#??????##??#. 1,1,5 +?????????? 1,2,1 +.?????.??.?. 4,1,1 +??????#?#.#?? 1,4,1,1 +????????#?##?. 4,7 +?????.????.?.#??? 1,1,2,1,4 +??#????##. 3,2 +#.?#?????# 1,4,1 +.????##?????#??#?. 11,2 +???#???#????#? 5,6 +.?.?????????? 1,1,5 +??#?.??.??????? 1,1,5,1 +?##????#????#????.?? 2,9,1,1 +??????????#??.??? 11,1,1 +????#???.???.#??. 1,3 +##??.????##? 3,1,2 +????????#???#???.? 5,9 +??#?????###??#. 2,8,1 +?#????#?#?#????.?? 5,1,1,1,2,1 +????.??##.?#??#???. 2,4,6 +????#????????#???? 1,12,1 +?.#???????#??. 1,3 +#??.???##??.?#???? 3,2,2,1,3,1 +.#?.?.#????.# 1,3,1 +??.?????.??. 1,1,2,2 +.#?#?????????#?? 1,1,1,7 +.?#..?#?#?.? 2,3,1 +??????#??#??#??#?. 11,2 +#??#?????. 1,3,1 +.?#???.#???.#? 4,1,1,1 +.??#?#?#######?? 2,11 +?..?????###.??.??? 1,2,5,2,1,1 +.???#??#????????#? 7,1,1 +..??#????#????? 2,7 +#.##?????.????##??? 1,7,1,3 +?#?#?.??..#??? 3,3 +???????????#?#??. 2,5,4 +?.??????##.??#. 1,1,2,1,1 +..??.?##?????? 1,8 +?#.?.??#???? 1,5 +??#.??####??? 2,6 +?#?#?????.??.#.#.# 6,1,2,1,1,1 +??.##??#?#?????????? 2,9,4,1 +??#??.???#?#?? 3,1,4 +????#???##?? 7,2 +.???##?#??..#?.?#?# 4,3,1,2,1 +???#?#??.?# 5,1,1 +??#?#?????????? 3,1,1,1,3 +?#?#.??#??#.?#?????? 1,1,1,2,4,1 +?..???.???? 2,2 +??#?#.#????.#????? 5,1,3,4 +?##???#.?##?.?#? 3,3,3,1 +#????????.# 6,1,1 +???###.#????#????#?? 6,2,2,5 +???????.???????#?# 1,1,2,10 +?#???##???#?##???? 1,4,10 +???##???.#???#???.? 6,1,1,5 +?#?##?..??#?. 6,2 +?#???#?.???#??#?? 2,1,8 +#..?#?#?..?.?.?.#?? 1,4,1,1,3 +.?????.?#.???#?? 1,3,1,1,3 +#?#?.?.#?#??? 3,5 +.????????#?##????#?? 2,6,4 +?..#???#????? 1,1,5,1 +???.?.?#?.???#? 3,1,2,1 +#??.??????###?.?? 1,1,10,1 +.??.##???? 1,5 +.?.??.#.??#.? 1,1,1,3 +.????#???#??.## 2,3,3,2 +?.??????.?##?. 5,4 +?##??????.? 3,4 +?#?##???#.#? 4,1,1,2 +??#?#?#????#??#??? 5,7,3 +?#.#????#??#?.?? 2,10,1 +#?#????????.??#?? 1,1,2,3,4 +.#??#??????.#. 4,4,1 +?????.#?## 1,1,4 +?#..??#?##. 2,5 +?##?..???#?.? 4,1,1 +##?.#??#?.? 3,4 +#?????#?.?????#? 2,1,3,6 +..????##?. 2,2 +?#??.????##??#.??? 2,1,1,6,1,1 +#???#??#?#.?? 3,2,3,1 +??.?...?.??## 1,1,1,3 +.??.#??????? 1,1 +.??.##????#???##?. 2,6 +????###??###??##? 11,3 +?#???????#?????? 2,5,2 +??????#.?#??.?# 1,3,2,1,1 +??##?#????##???.? 1,13 +.?#??.?????? 3,2,1 +.?#???.?#??? 5,2 +??????#?.? 3,2 +?????#??????.? 1,2,2,1 +.??#?????.?.?? 5,1,1 +.??????#.##?#?# 1,1,6 +???#??#.##. 2,1,2 +####?#?????#???? 8,5 +????????????#???? 1,10 +???.??..?#???.??##?? 3,1,4,4 +????.???.????.? 1,2,1,2 +?.?.?????.???# 1,3,4 +??#?#?..?#??#??#. 5,7 +???.???##?..##?##?.? 5,5 +?#??..?###??? 3,4 +?????##.?# 2,3,2 +?????#??#?.?# 1,1,5,1 +#??????###???#?? 10,1 +?#?????????????#???. 10,2 +.???#??.??? 4,1 +..?.?###?##?#?????.. 1,11 +?.???????#?##? 1,11 +###????#?#?.. 3,6 +??####.??#???????# 6,4,4 +????.?##????#?? 2,8 +?.?#???###?#???. 1,2,1,3,4 +??#?.????.??#? 4,1,1,4 +?????..?#?? 3,3 +?????..??? 3,1 +??#????#.?.#???#?.?? 4,1,1,1,2,1 +????###??.???##?.?.? 7,1,4,1 +?..?.??..?.?.???## 1,2 +#?#???????????? 1,6,1,1,1 +?..#???#?.? 2,3 +.???##?.?#?? 4,3 +????##.#??###?? 2,7 +??.??????????#???. 2,2,7 +???.??.????#????#? 2,10 +?#?#??#???????#. 8,1,2 +?.#?????#??.?? 1,5 +.##???.???#??## 2,1,2,1,2 +#???##?#???#?????.?? 17,1 \ No newline at end of file diff --git a/day12-hard/sample.in b/day12-hard/sample.in new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/day12-hard/sample.in @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 \ No newline at end of file diff --git a/day12-hard/src/main.zig b/day12-hard/src/main.zig new file mode 100644 index 0000000..75b2d37 --- /dev/null +++ b/day12-hard/src/main.zig @@ -0,0 +1,175 @@ +const std = @import("std"); + +fn StackList(comptime T: type, comptime capacity_type: type, comptime capacity: capacity_type) type { + return struct { + const Self = @This(); + mem: [capacity]T, + length: capacity_type, + + fn add(self: *Self, value: T) void { + self.mem[self.length] = value; + self.length += 1; + } + + fn has(self: *Self, needle: T) bool { + for (0..self.length) |i| { + if (self.mem[i] == needle) { + return true; + } + } + + return false; + } + + fn getMutableSlice(self: *Self) []T { + return (&self.mem)[0..self.length]; + } + + fn getSlice(self: *const Self) []const T { + return self.mem[0..self.length]; + } + + fn init() Self { + return Self{ + .mem = undefined, + .length = 0, + }; + } + }; +} + +fn addDigit(result: anytype, digit: u8) void { + result.* = (result.* * 10) + (digit - '0'); +} + +fn canStartWithGroup(springs: []const u8, group_size: usize) bool { + if (springs.len < group_size) { + return false; + } + + if (springs.len > group_size and springs[group_size] == '#') { + return false; + } + + var i: usize = 0; + while (i < group_size) : (i += 1) { + if (springs[i] == '.') { + return false; + } + } + + return true; +} + +const State = [128][32]u64; + +fn solve(springs: []const u8, groups: []const usize, state: *State) u64 { + if (state[springs.len][groups.len] != std.math.maxInt(u64)) { + return state[springs.len][groups.len]; + } + + if (groups.len == 0) { + for (springs) |char| { + if (char == '#') { + state[springs.len][groups.len] = 0; + return 0; + } + } + + state[springs.len][groups.len] = 1; + return 1; + } + + const first_group_size = groups[0]; + if (first_group_size > springs.len) { + state[springs.len][groups.len] = 0; + return 0; + } + + const last_check_index = springs.len + 1 - first_group_size; + var i: usize = 0; + var result: u64 = 0; + while (i < last_check_index) : (i += 1) { + switch (springs[i]) { + '.' => {}, + '#' => { + if (canStartWithGroup(springs[i..], first_group_size)) { + result += solve(springs[@min(springs.len, i + first_group_size + 1)..], groups[1..], &(state.*)); + } + + break; + }, + '?' => { + if (canStartWithGroup(springs[i..], first_group_size)) { + result += solve(springs[@min(springs.len, i + first_group_size + 1)..], groups[1..], &(state.*)); + } + }, + else => unreachable, + } + } + + state[springs.len][groups.len] = result; + return result; +} + +fn solveLine(line: []const u8) u64 { + var i: usize = 0; + while (line[i] != ' ') : (i += 1) {} + var springs = line[0..i]; + + i += 1; + var groups = StackList(usize, usize, 31).init(); + while (i < line.len) { + var number: usize = 0; + while (i < line.len and line[i] != ',') : (i += 1) { + addDigit(&number, line[i]); + } + + groups.add(number); + i += 1; + } + + const groups_length = groups.length; + for (0..4) |j| { + _ = j; + for (0..groups_length) |k| { + groups.add(groups.mem[k]); + } + } + + var all_springs = StackList(u8, usize, 120).init(); + for (0..5) |j| { + if (j != 0) { + all_springs.add('?'); + } + for (springs) |char| { + all_springs.add(char); + } + } + + var state: State = undefined; + for (&state) |*row| { + for (row) |*cell| { + cell.* = std.math.maxInt(u64); + } + } + + return solve(all_springs.getSlice(), groups.getSlice(), &state); +} + +pub fn main() !void { + const stdout = std.io.getStdOut().writer(); + + const raw_in = std.io.getStdIn(); + var buffered_reader = std.io.bufferedReader(raw_in.reader()); + var reader = buffered_reader.reader(); + + var result: u64 = 0; + var line_buffer: [1000]u8 = undefined; + var line_number: usize = 0; + while (try reader.readUntilDelimiterOrEof(&line_buffer, '\n')) |line| { + result += solveLine(line); + line_number += 1; + } + try stdout.print("{d}\n", .{result}); +}