parent
802b618c2e
commit
e4c20077ee
@ -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 = "day11-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); |
||||||
|
} |
@ -0,0 +1,140 @@ |
|||||||
|
............................................#.........#.......#.................#.......#........#.......................................... |
||||||
|
......................................#.........................................................................#.........................#. |
||||||
|
#........................................................................................................................#.................. |
||||||
|
.....#...................................................#.................................................................................. |
||||||
|
.......................................................................#..................#..............#...........#...................... |
||||||
|
............#........#...................#..........................................................#........................#.............. |
||||||
|
...............................#......................................................................................................#..... |
||||||
|
................................................#.....#.........#................................................................#.......... |
||||||
|
#........#.......................................................................................#........................#................. |
||||||
|
..........................................................#...........................#..................................................... |
||||||
|
.......................................................................#....................................#............................... |
||||||
|
............#.................#.....#..............#..........................#............................................................. |
||||||
|
....................#........................#............................................#............#...............#.................... |
||||||
|
...#....................................................#................................................................................... |
||||||
|
.................................#...............................#...................#...........................#............#............. |
||||||
|
.................................................................................................#.......................................... |
||||||
|
................................................#...........................#...............#............................................... |
||||||
|
.#........#.............#...........................................................................................#............#.......... |
||||||
|
................#....................#......................................................................#.............................#. |
||||||
|
................................#............#.....................#........................................................................ |
||||||
|
.....................#................................................................#......................................#.............. |
||||||
|
........................................#..........#.......#..................................#........................................#.... |
||||||
|
.....#..........................................................#..............#.......................#.............#...................... |
||||||
|
..............................#...........................................................#........................................#........ |
||||||
|
.........#.......................................................................................................#.......................... |
||||||
|
......................#............................................#........................................................................ |
||||||
|
.......................................#.....#...................................#...............#...........#.........#.................... |
||||||
|
..........................................................................#.............#...................................#............... |
||||||
|
#......#.................#.........................................................................................#........................ |
||||||
|
...............#........................................#.....#.....................#...............#....................................#.. |
||||||
|
...................................#..........................................#..........................................#.......#.......... |
||||||
|
....................................................................#.......................#............................................... |
||||||
|
.................................................#.......................................................................................... |
||||||
|
.........................................#................................#...........................................................#..... |
||||||
|
#..............................#..........................#..........................#..........................#........................... |
||||||
|
.....#..............#...........................................................#........................#....................#............. |
||||||
|
...............#............................................................................................................................ |
||||||
|
.............................................#.....#.................................................#...................................... |
||||||
|
............................................................................................................................................ |
||||||
|
.....................................#.................#......#.................................#........................................... |
||||||
|
..........................................#.................................#.............#.................................#............... |
||||||
|
.................................................................................#................................#..............#.......... |
||||||
|
..........#...........#....................................................................................#................................ |
||||||
|
...............#..............#.....................................#................................#....................................#. |
||||||
|
#.....................................#.......#.......#...................................................................#................. |
||||||
|
............................................................................................................................................ |
||||||
|
............................................................................................#............................................... |
||||||
|
........#...........#.............#.............................................#.........................#........#........................ |
||||||
|
.............................#.............#..................................................................................#............. |
||||||
|
.......................................................#..........#...................................#.......#......................#...... |
||||||
|
.....#.................................................................................#........#........................................... |
||||||
|
...........................................................................#................................................................ |
||||||
|
..............#..........................#.................................................................................................. |
||||||
|
..#.........................#.......#................#.....................................#.........................#...................... |
||||||
|
...................................................................................#......................................#................. |
||||||
|
..................#.............................#.............#....................................#.........#........................#..... |
||||||
|
............................................................................................................................................ |
||||||
|
.......................................................#..............................#.........................................#........... |
||||||
|
.............................#...................................................#............#............................................# |
||||||
|
............................................................................................................................................ |
||||||
|
...................................#...........#................#..............................................#........#..............#.... |
||||||
|
.#......#...........#.....#.............#..................#........................................#....................................... |
||||||
|
............................................................................................#................................#.............. |
||||||
|
............................................................................................................................................ |
||||||
|
....#........#...................#....................#............#......#.......#.......................................................#. |
||||||
|
..............................................#..............#.................................#....................#....................... |
||||||
|
............................................................................................................................................ |
||||||
|
#......................#.....................................................#.............................................#................ |
||||||
|
........#................................#..........................................#.......................#............................... |
||||||
|
.......................................................................................................#...........................#........ |
||||||
|
..................#...........#................#............................................................................................ |
||||||
|
............#.....................................................................................#.......................................#. |
||||||
|
......................#..................................................................................................................... |
||||||
|
....................................................................#..........................................#............................ |
||||||
|
..........................................#...........#...................................#.............#................................... |
||||||
|
...#................................................................................................................#........#.............. |
||||||
|
...............................#..............................#.................#...........................#............................... |
||||||
|
......................................#...........#......................................................................................... |
||||||
|
.................#...........................#........................#..............................................................#...... |
||||||
|
........................#.............................................................................#..................................... |
||||||
|
..........#.......................#..............................#....................#.........#.......................#................... |
||||||
|
..#......................................................................................................................................... |
||||||
|
.................................................................................#........#..................#....................#......... |
||||||
|
............................................................................................................................................ |
||||||
|
............................................................................................................................................ |
||||||
|
...............................#......................#..............................................................................#...... |
||||||
|
.......................#..................#.........................#.......#....................#.......................................... |
||||||
|
....#.........................................................................................................#.................#........... |
||||||
|
..............#...................#...........#..............#......................#....................................................... |
||||||
|
............................................................................................................................................ |
||||||
|
..............................#..............................................................#.....................................#........ |
||||||
|
.....................................#.......................................#.........#..........#....................#.................... |
||||||
|
......#...........................................#.................#....................................................................... |
||||||
|
#...........#.......#..................................#..............................................#......................#.............. |
||||||
|
................................#...................................................................................#....................... |
||||||
|
............................................#................#.............................................................................. |
||||||
|
..........................................................................#..................................#.............................. |
||||||
|
.......#....................................................................................#..........................#.........#.......... |
||||||
|
..#...........#......................................................................#..................................................#... |
||||||
|
...........................................................#.....#.......................................................................... |
||||||
|
..................#...............#................................................................#........................................ |
||||||
|
............................................................................................................................................ |
||||||
|
#......................#...............................#....................#..................................#..........#........#........ |
||||||
|
..........................................................................................#................................................. |
||||||
|
...........#................#..............................................................................................................# |
||||||
|
...........................................................#........................#.............#......................................... |
||||||
|
................................................#........................................................................................... |
||||||
|
...................#.....#..........#......................................................................#.....#...................#...... |
||||||
|
........#......................#............................................................#.........................#..................... |
||||||
|
..............#..............................................................#.........#.................................................... |
||||||
|
....................................................................#..........................................................#............ |
||||||
|
#..............................................#............................................................................................ |
||||||
|
.....#........................................................................................................#............................. |
||||||
|
......................#................#.........................#........................#.........................................#....... |
||||||
|
............................................#......#...............................#..............#......................................... |
||||||
|
.................................#.......................................................................................................... |
||||||
|
..........................#...................................#.........#................................................................... |
||||||
|
..........#.................................................................................................................#............... |
||||||
|
#...............#...........................................................#..........................................................#.... |
||||||
|
..............................................................................................#..................................#.......... |
||||||
|
......................#....................#........................................#.............................#........................# |
||||||
|
................................................#......#.................................................................................... |
||||||
|
.......................................................................#..............................#......#.............................. |
||||||
|
.........................#.................................................................#.....#........................#................. |
||||||
|
.#..................#..........#......................................................#..................................................... |
||||||
|
..........#..............................................#........#......................................................................... |
||||||
|
.......................................#.............................................................................#..............#....... |
||||||
|
............................#.................#...................................#........................................................# |
||||||
|
.....................................................#..........................................................................#........... |
||||||
|
....#..........#.........................................................................................#......#........................... |
||||||
|
......................#..................................................................................................................... |
||||||
|
...........#.............................#.............................#................................................#................... |
||||||
|
..................#..................................................................#...................................................... |
||||||
|
.............................#.........................................................................#.....................#.........#.... |
||||||
|
........#..................................................................#..............#................................................. |
||||||
|
#........................................................#.........#........................................................................ |
||||||
|
.......................................#........#.............................................................#............................. |
||||||
|
...................#..............#................................................................#.....#.........#........................ |
||||||
|
.............#.....................................................................#.....................................#............#..... |
||||||
|
......#...................................................................#.....................................................#........... |
@ -0,0 +1,10 @@ |
|||||||
|
...#...... |
||||||
|
.......#.. |
||||||
|
#......... |
||||||
|
.......... |
||||||
|
......#... |
||||||
|
.#........ |
||||||
|
.........# |
||||||
|
.......... |
||||||
|
.......#.. |
||||||
|
#...#..... |
@ -0,0 +1,93 @@ |
|||||||
|
const std = @import("std"); |
||||||
|
|
||||||
|
const Char = enum(u2) { |
||||||
|
Galaxy, |
||||||
|
Empty, |
||||||
|
}; |
||||||
|
|
||||||
|
fn solve(projections: [2][]const u32) u64 { |
||||||
|
var result: u64 = 0; |
||||||
|
|
||||||
|
for (projections) |projection| { |
||||||
|
var i: usize = 0; |
||||||
|
while (i < projection.len) : (i += 1) { |
||||||
|
if (projection[i] == 0) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
var distance: u64 = 0; |
||||||
|
var j = i + 1; |
||||||
|
while (j < projection.len) : (j += 1) { |
||||||
|
if (projection[j] == 0) { |
||||||
|
distance += 1000000; |
||||||
|
} else { |
||||||
|
distance += 1; |
||||||
|
result += projection[i] * projection[j] * distance; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
fn charLinesToProjections(allocator: std.mem.Allocator, char_lines: [][]const Char) ![2][]const u32 { |
||||||
|
var rows = try allocator.alloc(u32, char_lines.len); |
||||||
|
var columns = try allocator.alloc(u32, char_lines[0].len); |
||||||
|
@memset(rows, 0); |
||||||
|
@memset(columns, 0); |
||||||
|
for (char_lines, 0..) |char_line, i| { |
||||||
|
for (char_line, 0..) |char, j| { |
||||||
|
if (char == .Galaxy) { |
||||||
|
rows[i] += 1; |
||||||
|
columns[j] += 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return .{ rows, columns }; |
||||||
|
} |
||||||
|
|
||||||
|
fn readInput(allocator: std.mem.Allocator, reader: anytype) ![][]const Char { |
||||||
|
var lines = std.ArrayList([]Char).init(allocator); |
||||||
|
var line_buffer: [1000]u8 = undefined; |
||||||
|
while (try reader.readUntilDelimiterOrEof(&line_buffer, '\n')) |line_ref| { |
||||||
|
var line = try allocator.alloc(Char, line_ref.len); |
||||||
|
for (line_ref, line) |raw_char, *char| { |
||||||
|
char.* = switch (raw_char) { |
||||||
|
'#' => .Galaxy, |
||||||
|
'.' => .Empty, |
||||||
|
else => unreachable, |
||||||
|
}; |
||||||
|
} |
||||||
|
try lines.append(line); |
||||||
|
} |
||||||
|
|
||||||
|
return lines.items; |
||||||
|
} |
||||||
|
|
||||||
|
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 allocator_buffer: [1_000_000]u8 = undefined; |
||||||
|
var fba = std.heap.FixedBufferAllocator.init(&allocator_buffer); |
||||||
|
var allocator = fba.allocator(); |
||||||
|
|
||||||
|
var lines_arena = std.heap.ArenaAllocator.init(allocator); |
||||||
|
const lines_allocator = lines_arena.allocator(); |
||||||
|
const char_lines = try readInput(lines_allocator, reader); |
||||||
|
|
||||||
|
var projections_arena = std.heap.ArenaAllocator.init(allocator); |
||||||
|
const projections_allocator = projections_arena.allocator(); |
||||||
|
const projections = try charLinesToProjections(projections_allocator, char_lines); |
||||||
|
lines_arena.deinit(); |
||||||
|
|
||||||
|
const result = solve(projections); |
||||||
|
projections_arena.deinit(); |
||||||
|
|
||||||
|
try stdout.print("{d}\n", .{result}); |
||||||
|
} |
Loading…
Reference in new issue