Update template to latest master
This commit is contained in:
parent
0433fdb88b
commit
b1584f91a2
32 changed files with 288 additions and 432 deletions
2
.vscode/extensions.json
vendored
2
.vscode/extensions.json
vendored
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"augusterame.zls-vscode",
|
"ziglang.vscode-zig",
|
||||||
"ms-vscode.cpptools"
|
"ms-vscode.cpptools"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
50
.vscode/tasks.json
vendored
50
.vscode/tasks.json
vendored
|
@ -7,7 +7,7 @@
|
||||||
"label": "build day 01",
|
"label": "build day 01",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day01"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day01"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
"label": "build day 02",
|
"label": "build day 02",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day02"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day02"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
"label": "build day 03",
|
"label": "build day 03",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day03"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day03"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
"label": "build day 04",
|
"label": "build day 04",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day04"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day04"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
"label": "build day 05",
|
"label": "build day 05",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day05"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day05"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
"label": "build day 06",
|
"label": "build day 06",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day06"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day06"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
"label": "build day 07",
|
"label": "build day 07",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day07"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day07"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
"label": "build day 08",
|
"label": "build day 08",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day08"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day08"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
"label": "build day 09",
|
"label": "build day 09",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day09"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day09"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
"label": "build day 10",
|
"label": "build day 10",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day10"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day10"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
"label": "build day 11",
|
"label": "build day 11",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day11"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day11"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
"label": "build day 12",
|
"label": "build day 12",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day12"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day12"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
"label": "build day 13",
|
"label": "build day 13",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day13"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day13"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
"label": "build day 14",
|
"label": "build day 14",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day14"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day14"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"label": "build day 15",
|
"label": "build day 15",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day15"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day15"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
"label": "build day 16",
|
"label": "build day 16",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day16"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day16"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
"label": "build day 17",
|
"label": "build day 17",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day17"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day17"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
"label": "build day 18",
|
"label": "build day 18",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day18"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day18"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -151,7 +151,7 @@
|
||||||
"label": "build day 19",
|
"label": "build day 19",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day19"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day19"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -159,7 +159,7 @@
|
||||||
"label": "build day 20",
|
"label": "build day 20",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day20"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day20"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
"label": "build day 21",
|
"label": "build day 21",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day21"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day21"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
"label": "build day 22",
|
"label": "build day 22",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day22"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day22"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -183,7 +183,7 @@
|
||||||
"label": "build day 23",
|
"label": "build day 23",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day23"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day23"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -191,7 +191,7 @@
|
||||||
"label": "build day 24",
|
"label": "build day 24",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day24"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day24"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
@ -199,7 +199,7 @@
|
||||||
"label": "build day 25",
|
"label": "build day 25",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "zig",
|
"command": "zig",
|
||||||
"args": ["build", "install_day25"], // add -Drelease-safe=true or -Drelease-fast=true to optimize
|
"args": ["build", "install_day25"], // add -Doptimize=ReleaseSafe or -Doptimize=ReleaseFast to optimize
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"group": "build",
|
"group": "build",
|
||||||
},
|
},
|
||||||
|
|
137
build.zig
137
build.zig
|
@ -1,61 +1,35 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const Builder = std.build.Builder;
|
const Build = std.Build;
|
||||||
const LibExeObjStep = std.build.LibExeObjStep;
|
const CompileStep = std.Build.Step.Compile;
|
||||||
|
|
||||||
const required_zig_version = std.SemanticVersion.parse("0.10.0") catch unreachable;
|
|
||||||
const padded_int_fix = std.SemanticVersion.parse("0.11.0-dev.331+304e82808") catch unreachable;
|
|
||||||
|
|
||||||
/// set this to true to link libc
|
/// set this to true to link libc
|
||||||
const should_link_libc = false;
|
const should_link_libc = false;
|
||||||
|
|
||||||
fn linkObject(b: *Builder, obj: *LibExeObjStep) void {
|
fn linkObject(b: *Build, obj: *CompileStep) void {
|
||||||
if (should_link_libc) obj.linkLibC();
|
if (should_link_libc) obj.linkLibC();
|
||||||
_ = b;
|
_ = b;
|
||||||
|
|
||||||
// Padded integers are buggy in 0.10.0, fixed in 0.11.0-dev.331+304e82808
|
|
||||||
// This is especially bad for AoC because std.StaticBitSet is commonly used.
|
|
||||||
// If your version is older than that, we use stage1 to avoid this bug.
|
|
||||||
// Issue: https://github.com/ziglang/zig/issues/13480
|
|
||||||
// Fix: https://github.com/ziglang/zig/pull/13637
|
|
||||||
if (comptime @import("builtin").zig_version.order(padded_int_fix) == .lt) {
|
|
||||||
obj.use_stage1 = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add linking for packages or third party libraries here
|
// Add linking for packages or third party libraries here
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build(b: *Builder) void {
|
pub fn build(b: *Build) void {
|
||||||
if (comptime @import("builtin").zig_version.order(required_zig_version) == .lt) {
|
|
||||||
std.debug.print(
|
|
||||||
\\Error: Your version of Zig is missing features that are needed for this template.
|
|
||||||
\\You will need to download a newer build.
|
|
||||||
\\
|
|
||||||
\\ https://ziglang.org/download/
|
|
||||||
\\
|
|
||||||
\\
|
|
||||||
, .{});
|
|
||||||
std.os.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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(.{});
|
const target = b.standardTargetOptions(.{});
|
||||||
|
const mode = b.standardOptimizeOption(.{});
|
||||||
// Standard release options allow the person running `zig build` to select
|
|
||||||
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
|
||||||
const mode = b.standardReleaseOptions();
|
|
||||||
|
|
||||||
const install_all = b.step("install_all", "Install all days");
|
const install_all = b.step("install_all", "Install all days");
|
||||||
const install_all_tests = b.step("install_tests_all", "Install tests for all days");
|
const install_all_tests = b.step("install_tests_all", "Install tests for all days");
|
||||||
|
_ = install_all_tests;
|
||||||
const run_all = b.step("run_all", "Run all days");
|
const run_all = b.step("run_all", "Run all days");
|
||||||
|
|
||||||
const generate = b.step("generate", "Generate stub files from template/template.zig");
|
const generate = b.step("generate", "Generate stub files from template/template.zig");
|
||||||
const build_generate = b.addExecutable("generate", "template/generate.zig");
|
const build_generate = b.addExecutable(.{
|
||||||
build_generate.setBuildMode(.ReleaseSafe);
|
.name = "generate",
|
||||||
const run_generate = build_generate.run();
|
.root_source_file = .{ .path = "template/generate.zig" },
|
||||||
run_generate.cwd = std.fs.path.dirname(@src().file).?;
|
.optimize = .ReleaseSafe,
|
||||||
|
});
|
||||||
|
|
||||||
|
const run_generate = b.addRunArtifact(build_generate);
|
||||||
|
run_generate.setCwd(.{ .path = std.fs.path.dirname(@src().file).? });
|
||||||
generate.dependOn(&run_generate.step);
|
generate.dependOn(&run_generate.step);
|
||||||
|
|
||||||
// Set up an exe for each day
|
// Set up an exe for each day
|
||||||
|
@ -64,24 +38,24 @@ pub fn build(b: *Builder) void {
|
||||||
const dayString = b.fmt("day{:0>2}", .{day});
|
const dayString = b.fmt("day{:0>2}", .{day});
|
||||||
const zigFile = b.fmt("src/{s}.zig", .{dayString});
|
const zigFile = b.fmt("src/{s}.zig", .{dayString});
|
||||||
|
|
||||||
const exe = b.addExecutable(dayString, zigFile);
|
const exe = b.addExecutable(.{
|
||||||
exe.setTarget(target);
|
.name = dayString,
|
||||||
exe.setBuildMode(mode);
|
.root_source_file = .{ .path = zigFile },
|
||||||
linkObject(b, exe);
|
.target = target,
|
||||||
exe.install();
|
.optimize = mode,
|
||||||
|
});
|
||||||
const install_cmd = b.addInstallArtifact(exe);
|
|
||||||
|
|
||||||
const run_test = b.addTest(zigFile);
|
|
||||||
run_test.setTarget(target);
|
|
||||||
run_test.setBuildMode(mode);
|
|
||||||
linkObject(b, exe);
|
linkObject(b, exe);
|
||||||
|
|
||||||
const build_test = b.addTestExe(b.fmt("test_{s}", .{dayString}), zigFile);
|
const install_cmd = b.addInstallArtifact(exe, .{});
|
||||||
build_test.setTarget(target);
|
|
||||||
build_test.setBuildMode(mode);
|
const build_test = b.addTest(.{
|
||||||
linkObject(b, exe);
|
.root_source_file = .{ .path = zigFile },
|
||||||
const install_test = b.addInstallArtifact(build_test);
|
.target = target,
|
||||||
|
.optimize = mode,
|
||||||
|
});
|
||||||
|
linkObject(b, build_test);
|
||||||
|
|
||||||
|
const run_test = b.addRunArtifact(build_test);
|
||||||
|
|
||||||
{
|
{
|
||||||
const step_key = b.fmt("install_{s}", .{dayString});
|
const step_key = b.fmt("install_{s}", .{dayString});
|
||||||
|
@ -98,16 +72,7 @@ pub fn build(b: *Builder) void {
|
||||||
step.dependOn(&run_test.step);
|
step.dependOn(&run_test.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
const step_key = b.fmt("install_tests_{s}", .{dayString});
|
|
||||||
const step_desc = b.fmt("Install test_{s}.exe", .{dayString});
|
|
||||||
const step = b.step(step_key, step_desc);
|
|
||||||
step.dependOn(&install_test.step);
|
|
||||||
install_all_tests.dependOn(&install_test.step);
|
|
||||||
}
|
|
||||||
|
|
||||||
const run_cmd = exe.run();
|
|
||||||
run_cmd.step.dependOn(&install_cmd.step);
|
|
||||||
if (b.args) |args| {
|
if (b.args) |args| {
|
||||||
run_cmd.addArgs(args);
|
run_cmd.addArgs(args);
|
||||||
}
|
}
|
||||||
|
@ -121,42 +86,12 @@ pub fn build(b: *Builder) void {
|
||||||
// Set up tests for util.zig
|
// Set up tests for util.zig
|
||||||
{
|
{
|
||||||
const test_util = b.step("test_util", "Run tests in util.zig");
|
const test_util = b.step("test_util", "Run tests in util.zig");
|
||||||
const test_cmd = b.addTest("src/util.zig");
|
const test_cmd = b.addTest(.{
|
||||||
test_cmd.setTarget(target);
|
.root_source_file = .{ .path = "src/util.zig" },
|
||||||
test_cmd.setBuildMode(mode);
|
.target = target,
|
||||||
|
.optimize = mode,
|
||||||
|
});
|
||||||
linkObject(b, test_cmd);
|
linkObject(b, test_cmd);
|
||||||
test_util.dependOn(&test_cmd.step);
|
test_util.dependOn(&test_cmd.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up test executable for util.zig
|
|
||||||
{
|
|
||||||
const test_util = b.step("install_tests_util", "Run tests in util.zig");
|
|
||||||
const test_exe = b.addTestExe("test_util", "src/util.zig");
|
|
||||||
test_exe.setTarget(target);
|
|
||||||
test_exe.setBuildMode(mode);
|
|
||||||
linkObject(b, test_exe);
|
|
||||||
const install = b.addInstallArtifact(test_exe);
|
|
||||||
test_util.dependOn(&install.step);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up a step to run all tests
|
|
||||||
{
|
|
||||||
const test_step = b.step("test", "Run all tests");
|
|
||||||
const test_cmd = b.addTest("src/test_all.zig");
|
|
||||||
test_cmd.setTarget(target);
|
|
||||||
test_cmd.setBuildMode(mode);
|
|
||||||
linkObject(b, test_cmd);
|
|
||||||
test_step.dependOn(&test_cmd.step);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set up a step to build tests (but not run them)
|
|
||||||
{
|
|
||||||
const test_build = b.step("install_tests", "Install test_all.exe");
|
|
||||||
const test_exe = b.addTestExe("test_all", "src/test_all.zig");
|
|
||||||
test_exe.setTarget(target);
|
|
||||||
test_exe.setBuildMode(mode);
|
|
||||||
linkObject(b, test_exe);
|
|
||||||
const test_exe_install = b.addInstallArtifact(test_exe);
|
|
||||||
test_build.dependOn(&test_exe_install.step);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day01.txt");
|
const data = @embedFile("data/day01.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day02.txt");
|
const data = @embedFile("data/day02.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day03.txt");
|
const data = @embedFile("data/day03.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day04.txt");
|
const data = @embedFile("data/day04.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day05.txt");
|
const data = @embedFile("data/day05.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day06.txt");
|
const data = @embedFile("data/day06.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day07.txt");
|
const data = @embedFile("data/day07.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day08.txt");
|
const data = @embedFile("data/day08.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day09.txt");
|
const data = @embedFile("data/day09.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day10.txt");
|
const data = @embedFile("data/day10.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day11.txt");
|
const data = @embedFile("data/day11.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day12.txt");
|
const data = @embedFile("data/day12.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day13.txt");
|
const data = @embedFile("data/day13.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day14.txt");
|
const data = @embedFile("data/day14.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day15.txt");
|
const data = @embedFile("data/day15.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day16.txt");
|
const data = @embedFile("data/day16.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day17.txt");
|
const data = @embedFile("data/day17.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day18.txt");
|
const data = @embedFile("data/day18.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day19.txt");
|
const data = @embedFile("data/day19.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day20.txt");
|
const data = @embedFile("data/day20.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day21.txt");
|
const data = @embedFile("data/day21.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day22.txt");
|
const data = @embedFile("data/day22.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day23.txt");
|
const data = @embedFile("data/day23.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day24.txt");
|
const data = @embedFile("data/day24.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day25.txt");
|
const data = @embedFile("data/day25.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
16
src/util.zig
16
src/util.zig
|
@ -11,10 +11,13 @@ pub const gpa = gpa_impl.allocator();
|
||||||
|
|
||||||
// Add utility functions here
|
// Add utility functions here
|
||||||
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -28,14 +31,9 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn readHashes() !*[25][Hash.digest_length]u8 {
|
||||||
if (hash_bytes.len != 25 * Hash.digest_length)
|
if (hash_bytes.len != 25 * Hash.digest_length)
|
||||||
return error.InvalidFormat;
|
return error.InvalidFormat;
|
||||||
|
|
||||||
return @ptrCast(*[25][Hash.digest_length]u8, hash_bytes.ptr);
|
return @ptrCast(hash_bytes.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
|
@ -41,7 +41,7 @@ pub fn main() !void {
|
||||||
error.FileNotFound => blk: {
|
error.FileNotFound => blk: {
|
||||||
std.debug.print("{s} doesn't exist, will assume all files have been modified.\nDelete src/dayXX.zig and rerun `zig build generate` to regenerate it.\n", .{hashes_file});
|
std.debug.print("{s} doesn't exist, will assume all files have been modified.\nDelete src/dayXX.zig and rerun `zig build generate` to regenerate it.\n", .{hashes_file});
|
||||||
const mem = try gpa.allocator().create([25][Hash.digest_length]u8);
|
const mem = try gpa.allocator().create([25][Hash.digest_length]u8);
|
||||||
@memset(@ptrCast([*]u8, mem), 0, @sizeOf(@TypeOf(mem.*)));
|
@memset(std.mem.sliceAsBytes(mem), 0);
|
||||||
break :blk mem;
|
break :blk mem;
|
||||||
},
|
},
|
||||||
error.InvalidFormat => {
|
error.InvalidFormat => {
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
*®3tïgº°iŽô™Q[ûå/ÖX°ÿÕå1¯äcT—7È£Cžd`´¬'µsÓR&=ÈR/º^Ä<>|€h—Jà—Ü{-†d{¼Œ|ㆾîþï4™ú„ƒª^¿üdz·C²Êõ)¸Ù”³=‘ÒÏì¬,…¥ƒ§Iã<49>œO|„Á\SŸïŧê!V£7äï3ÃZ¢# @GX°ö”‘ÈØ<C388>T¬#Ìhb3Œâ¢Yì*aí±ðû1—»¾ExåýáÑ)×Seì<65>î-é>;„ÉõqhvÈCL·üµ;«õ’¸‹5â+X©I_àfð,\…Ñ—îL>o›ûõl€×vÇnCÈ7jö‹Ý V¯›|¹Ð4ŽRÍ7L‘ì–<C3AC>·iCqóÙ [ž
ë¤&\ˆlùÀ»«=ÌÇÇ“œë>&4ÔRERhX;"Ì3Çk}=Ó±žQÈú”OrZFÚìg ¹VâÑ•y‹À¸.åî!õæ‹>ø?†òÇ·‹‚hÕ=:: –”Ä
|
Ř»ËÍoűö(“Ŕ<E2809C>aSôÚŞx0QoÔɉjU!@Ĺh@GU•/Ř ,–Ő ŹSźs<C5BA><73>N´<4E>(a Jq‘;żŃĹB<C4B9>}Ăö÷˘fŠäGQĄÜ[Üç¶ó&Ě•« ě ôf a×Mtâ<10>‡=ęĐ2ć]vś źú|PŐ >™ÚDŚ>=Wq[ż¤Ď´P’ÉZvorrRur[J|ŇW¸)Âc^–ŹbŘđ!ë±Z]ĄŁ›sж߾!˛n'°Q{÷&JqóbA…˛ŕČŇ `ąHü<48>’pňIĂúŕ<C3BA>©«Îkë›X`+LÎŇuBź}„š¤7Ũ»ęµő521éJáŘ
|
||||||
|
¨ KłîߤŽJ]Ě/·%<25>YXat”šCˇĆŢć3AK¬†T¬’Ť—‹šzüňTşŔ5G©H]©ŚLËćţňó<ę}×(Ü`Ë̇&oŽ<đ±Aţ]6î:˘a‡E†ní|Eş`°Ó™LÜ•,‡ÇŞřďd%î¸'',pÇ:ń
|
|
@ -10,13 +10,15 @@ const gpa = util.gpa;
|
||||||
|
|
||||||
const data = @embedFile("data/day$.txt");
|
const data = @embedFile("data/day$.txt");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Useful stdlib functions
|
// Useful stdlib functions
|
||||||
const tokenize = std.mem.tokenize;
|
const tokenizeAny = std.mem.tokenizeAny;
|
||||||
const split = std.mem.split;
|
const tokenizeSeq = std.mem.tokenizeSequence;
|
||||||
|
const tokenizeSca = std.mem.tokenizeScalar;
|
||||||
|
const splitAny = std.mem.splitAny;
|
||||||
|
const splitSeq = std.mem.splitSequence;
|
||||||
|
const splitSca = std.mem.splitScalar;
|
||||||
const indexOf = std.mem.indexOfScalar;
|
const indexOf = std.mem.indexOfScalar;
|
||||||
const indexOfAny = std.mem.indexOfAny;
|
const indexOfAny = std.mem.indexOfAny;
|
||||||
const indexOfStr = std.mem.indexOfPosLinear;
|
const indexOfStr = std.mem.indexOfPosLinear;
|
||||||
|
@ -30,15 +32,10 @@ const sliceMax = std.mem.max;
|
||||||
const parseInt = std.fmt.parseInt;
|
const parseInt = std.fmt.parseInt;
|
||||||
const parseFloat = std.fmt.parseFloat;
|
const parseFloat = std.fmt.parseFloat;
|
||||||
|
|
||||||
const min = std.math.min;
|
|
||||||
const min3 = std.math.min3;
|
|
||||||
const max = std.math.max;
|
|
||||||
const max3 = std.math.max3;
|
|
||||||
|
|
||||||
const print = std.debug.print;
|
const print = std.debug.print;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
|
|
||||||
const sort = std.sort.sort;
|
const sort = std.sort.block;
|
||||||
const asc = std.sort.asc;
|
const asc = std.sort.asc;
|
||||||
const desc = std.sort.desc;
|
const desc = std.sort.desc;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue