Finish day04, part 2
This commit is contained in:
parent
268b709c07
commit
fe3b71908e
1 changed files with 58 additions and 27 deletions
|
|
@ -3,44 +3,75 @@ const std = @import("std");
|
||||||
pub const title = "Day 04: Printing Department";
|
pub const title = "Day 04: Printing Department";
|
||||||
|
|
||||||
pub fn run(_: std.mem.Allocator) !void {
|
pub fn run(_: std.mem.Allocator) !void {
|
||||||
const input = @embedFile("./input/day04.txt");
|
const initial_input = @embedFile("./input/day04.txt");
|
||||||
var lines = std.mem.tokenizeScalar(u8, input, '\n');
|
//const initial_input =
|
||||||
|
// \\..@@.@@@@.
|
||||||
|
// \\@@@.@.@.@@
|
||||||
|
// \\@@@@@.@.@@
|
||||||
|
// \\@.@@@@..@.
|
||||||
|
// \\@@.@@@@.@@
|
||||||
|
// \\.@@@@@@@.@
|
||||||
|
// \\.@.@.@.@@@
|
||||||
|
// \\@.@@@.@@@@
|
||||||
|
// \\.@@@@@@@@.
|
||||||
|
// \\@.@.@@@.@.
|
||||||
|
// ;
|
||||||
|
|
||||||
|
const input: []u8 = @constCast(initial_input);
|
||||||
|
|
||||||
var accumulator: u32 = 0;
|
var accumulator: u32 = 0;
|
||||||
|
|
||||||
var previous_line: ?[]const u8 = null;
|
while (true) {
|
||||||
while (lines.next()) |line| {
|
std.debug.print("{s}\n", .{input});
|
||||||
const next_line = lines.peek();
|
|
||||||
|
|
||||||
if (previous_line) |p| std.debug.assert(line.len == p.len);
|
var rolls_removed: u32 = 0;
|
||||||
if (next_line) |n| std.debug.assert(line.len == n.len);
|
|
||||||
|
|
||||||
for (line, 0..) |c, i| {
|
var lines = std.mem.tokenizeScalar(u8, input, '\n');
|
||||||
if (c != '@') continue;
|
|
||||||
|
|
||||||
var rolls: u8 = 0;
|
var previous_line: ?[]const u8 = null;
|
||||||
|
var line_index: usize = 0;
|
||||||
|
while (lines.next()) |line| {
|
||||||
|
const next_line = lines.peek();
|
||||||
|
|
||||||
if (previous_line) |p| {
|
if (previous_line) |p| std.debug.assert(line.len == p.len);
|
||||||
if (i > 0 and p[i - 1] == '@') rolls += 1;
|
if (next_line) |n| std.debug.assert(line.len == n.len);
|
||||||
if (p[i] == '@') rolls += 1;
|
|
||||||
if (i < p.len - 1 and p[i + 1] == '@') rolls += 1;
|
for (line, 0..) |c, i| {
|
||||||
|
if (c != '@') continue;
|
||||||
|
|
||||||
|
var rolls: u8 = 0;
|
||||||
|
|
||||||
|
if (previous_line) |p| {
|
||||||
|
if (i > 0 and p[i - 1] == '@') rolls += 1;
|
||||||
|
if (p[i] == '@') rolls += 1;
|
||||||
|
if (i < p.len - 1 and p[i + 1] == '@') rolls += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i > 0 and line[i - 1] == '@') rolls += 1;
|
||||||
|
if (i < line.len - 1 and line[i + 1] == '@') rolls += 1;
|
||||||
|
|
||||||
|
if (next_line) |n| {
|
||||||
|
if (i > 0 and n[i - 1] == '@') rolls += 1;
|
||||||
|
if (n[i] == '@') rolls += 1;
|
||||||
|
if (i < n.len - 1 and n[i + 1] == '@') rolls += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rolls < 4) {
|
||||||
|
input[(line_index * (line.len + 1)) + i] = 'x';
|
||||||
|
rolls_removed += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > 0 and line[i - 1] == '@') rolls += 1;
|
previous_line = line;
|
||||||
if (i < line.len - 1 and line[i + 1] == '@') rolls += 1;
|
line_index += 1;
|
||||||
|
|
||||||
if (next_line) |n| {
|
|
||||||
if (i > 0 and n[i - 1] == '@') rolls += 1;
|
|
||||||
if (n[i] == '@') rolls += 1;
|
|
||||||
if (i < n.len - 1 and n[i + 1] == '@') rolls += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rolls < 4) {
|
|
||||||
accumulator += 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
previous_line = line;
|
std.debug.print("removed {d} rolls\n", .{rolls_removed});
|
||||||
|
if (rolls_removed > 0) {
|
||||||
|
accumulator += rolls_removed;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var buffer: [8]u8 = undefined;
|
var buffer: [8]u8 = undefined;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue