zig perf print

This commit is contained in:
2024-12-05 23:05:27 +01:00
parent ec0baf2a6e
commit 4eed1e7da5

View File

@@ -1,37 +1,41 @@
const std = @import("std"); const std = @import("std");
const time = std.time;
const Timer = time.Timer;
pub fn main() !void { pub fn main() !void {
var file = try std.fs.cwd() var file = try std.fs.cwd()
.openFile("../input.txt", .{}); .openFile("../input.txt", .{});
defer file.close(); 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 timer = try Timer.start();
var in_stream = buf_reader.reader();
var buf: [64]u8 = undefined;
var t: u32 = 0; 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 split_iter = std.mem.split(u8, line, " ");
var dir: i8 = 0; var dir: i8 = 0;
var prev = try std.fmt.parseInt(i8, split_iter.next() orelse unreachable, 10); var prev = try std.fmt.parseInt(i8, split_iter.next().?, 10);
t += while (split_iter.next()) |strnum| { while (split_iter.next()) |strnum| {
const n = try std.fmt.parseInt(i8, strnum, 10); const n = try std.fmt.parseInt(i8, strnum, 10);
const d = prev - n; const d = prev - n;
prev = n;
if (d == 0 or @abs(d) > 3) if (d == 0 or @abs(d) > 3)
break 0; continue :out;
if (dir == 0) { if (dir == 0) {
dir = d; dir = d;
} else if (!sameSign(dir, d)) { } else if (d ^ dir < 0)
break 0; continue :out;
} prev = n;
} else 1;
}
std.debug.print("Total {d}\n", .{t});
} }
pub fn sameSign(n1: i8, n2: i8) bool { t += 1;
return (n1 < 0) == (n2 < 0); }
const elapsed: f64 = @floatFromInt(timer.read());
std.debug.print("Total {d} in {d:.6}µs\n", .{ t, elapsed / time.ns_per_us });
} }