From 4eed1e7da517db4f53c470c017811cef019bbb42 Mon Sep 17 00:00:00 2001 From: javalsai Date: Thu, 5 Dec 2024 23:05:27 +0100 Subject: [PATCH] zig perf print --- 2024/02/p1/main.zig | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/2024/02/p1/main.zig b/2024/02/p1/main.zig index 3d502c9..543c3cd 100644 --- a/2024/02/p1/main.zig +++ b/2024/02/p1/main.zig @@ -1,37 +1,41 @@ const std = @import("std"); +const time = std.time; +const Timer = time.Timer; pub fn main() !void { var file = try std.fs.cwd() .openFile("../input.txt", .{}); defer file.close(); + var buf: [32 * 1024]u8 = undefined; + buf[try file.read(&buf) - 1] = ' '; + // _ = try file.read(&buf); - var buf_reader = std.io.bufferedReader(file.reader()); - var in_stream = buf_reader.reader(); + var timer = try Timer.start(); - var buf: [64]u8 = undefined; var t: u32 = 0; - while (try in_stream.readUntilDelimiterOrEof(&buf, '\n')) |line| { + var split = std.mem.splitScalar(u8, &buf, '\n'); + out: while (split.next()) |line| { + // if (line[0] == 0) continue; var split_iter = std.mem.split(u8, line, " "); var dir: i8 = 0; - var prev = try std.fmt.parseInt(i8, split_iter.next() orelse unreachable, 10); - t += while (split_iter.next()) |strnum| { + var prev = try std.fmt.parseInt(i8, split_iter.next().?, 10); + while (split_iter.next()) |strnum| { const n = try std.fmt.parseInt(i8, strnum, 10); const d = prev - n; - prev = n; if (d == 0 or @abs(d) > 3) - break 0; + continue :out; if (dir == 0) { dir = d; - } else if (!sameSign(dir, d)) { - break 0; - } - } else 1; - } - std.debug.print("Total {d}\n", .{t}); -} + } else if (d ^ dir < 0) + continue :out; + prev = n; + } -pub fn sameSign(n1: i8, n2: i8) bool { - return (n1 < 0) == (n2 < 0); + t += 1; + } + + const elapsed: f64 = @floatFromInt(timer.read()); + std.debug.print("Total {d} in {d:.6}µs\n", .{ t, elapsed / time.ns_per_us }); }