const std = @import("std");
const path = "../data/day17/input.txt";
const RetType = u14;
const TargetValue = i9;
const TargetArea = struct {
xmin: TargetValue,
xmax: TargetValue,
ymin: TargetValue,
ymax: TargetValue,
};
fn parseInput() !TargetArea {
const input = @embedFile(path);
const in = std.mem.trimRight(u8, input, "\n");
var ta: TargetArea = undefined;
var coords = std.mem.tokenize(u8, in[13..], ", ");
var xpart = coords.next().?[2..];
var xcords = std.mem.tokenize(u8, xpart, "..");
ta.xmin = try std.fmt.parseInt(TargetValue, xcords.next().?, 10);
ta.xmax = try std.fmt.parseInt(TargetValue, xcords.next().?, 10);
var ypart = coords.next().?[2..];
var ycords = std.mem.tokenize(u8, ypart, "..");
ta.ymin = try std.fmt.parseInt(TargetValue, ycords.next().?, 10);
ta.ymax = try std.fmt.parseInt(TargetValue, ycords.next().?, 10);
return ta;
}
pub fn first() !RetType {
const ta = try parseInput();
// https://github.com/timvisee/advent-of-code-2021/issues/9
var ret = @intCast(RetType, -ta.ymin);
ret *= @intCast(RetType, -ta.ymin - 1);
ret /= 2;
return ret;
}
pub fn main() !void {
var timer = try std.time.Timer.start();
const ret = try first();
const t = timer.lap() / 1000;
try std.testing.expectEqual(@as(RetType, 5778), ret);
std.debug.print("Day 17a result: {d} \t\ttime: {d}µs\n", .{ ret, t });
}
test "day17a" {
try std.testing.expectEqual(@as(RetType, 5778), try first());
}