From 85bd7ec1bd9cdc7ec53692fce5cae3118b7357a0 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Sun, 5 Dec 2021 15:18:59 +0700 Subject: [aoc] Add first five/fifth --- aoc/2021/04/part-one.zig | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 aoc/2021/04/part-one.zig (limited to 'aoc/2021/04/part-one.zig') diff --git a/aoc/2021/04/part-one.zig b/aoc/2021/04/part-one.zig new file mode 100644 index 0000000..67dc4e0 --- /dev/null +++ b/aoc/2021/04/part-one.zig @@ -0,0 +1,48 @@ +const parseUnsigned = std.fmt.parseUnsigned; +const print = std.debug.print; +const std = @import("std"); +const tokenize = std.mem.tokenize; + +pub fn main() !void { + var boards: [100][5]@Vector(5, u16) = undefined; + var input = tokenize(@embedFile("input"), "\n"); + var order = tokenize(input.next().?, ","); + var i = @as(usize, 0); + while (i < 100) : (i += 1) { + var j = @as(usize, 0); + while (j < 5) : (j += 1) { + var row = tokenize(input.next().?, " "); + var k = @as(usize, 0); + while (k < 5) : (k += 1) + boards[i][j][k] = 1 + try parseUnsigned(u16, row.next().?, 10); + } + } + + const result = loop: while (i > 0) : (i -= 1) { + const n = 1 + try parseUnsigned(u16, order.next().?, 10); + var j = @as(usize, 0); + while (j < 100) : (j += 1) { + var u = @as(usize, 0); + var k = @as(usize, 0); + while (k < 5) : (k += 1) { + var l = @as(usize, 0); + while (l < 5) : (l += 1) { + if (boards[j][k][l] == n) + boards[j][k][l] = 0 + else if (boards[j][k][l] > 0) + u += 1; + } + } + + const b = boards[j]; + const sum = b[0] + b[1] + b[2] + b[3] + b[4]; + const result = (@reduce(.Add, sum) - u) * (n - 1); + if (@reduce(.Min, sum) == 0) + break :loop result; + for (b) |v| + if (@reduce(.Max, v) == 0) + break :loop result; + } + } else unreachable; + print("{}\n", .{ result }); +} -- cgit 1.4.1