Vectors!
This commit is contained in:
parent
d1e798bdbf
commit
1d6cdccaf8
1 changed files with 9 additions and 7 deletions
|
|
@ -30,7 +30,7 @@ pub fn run(allocator: std.mem.Allocator) !void {
|
||||||
const s = coordinates.next() orelse continue;
|
const s = coordinates.next() orelse continue;
|
||||||
break :blk try std.fmt.parseUnsigned(u64, s, 10);
|
break :blk try std.fmt.parseUnsigned(u64, s, 10);
|
||||||
};
|
};
|
||||||
try tiles.append(allocator, .{ .x = x, .y = y });
|
try tiles.append(allocator, .{ .pos = .{ x, y } });
|
||||||
}
|
}
|
||||||
|
|
||||||
var largest_area: usize = 0;
|
var largest_area: usize = 0;
|
||||||
|
|
@ -58,13 +58,12 @@ pub fn run(allocator: std.mem.Allocator) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Tile = struct {
|
const Tile = struct {
|
||||||
x: u64,
|
pos: @Vector(2, u64),
|
||||||
y: u64,
|
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
pub fn format(self: Self, w: *std.io.Writer) std.io.Writer.Error!void {
|
pub fn format(self: Self, w: *std.io.Writer) std.io.Writer.Error!void {
|
||||||
try w.print("{d},{d}", .{self.x, self.y});
|
try w.print("{d},{d}", .{self.pos[0], self.pos[1]});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rectangle(self: Self, other_corner: Self) Rectangle {
|
pub fn rectangle(self: Self, other_corner: Self) Rectangle {
|
||||||
|
|
@ -83,9 +82,12 @@ const Rectangle = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn area(self: Self) u64 {
|
pub fn area(self: Self) u64 {
|
||||||
const width = @max(self.a.x, self.b.x) - @min(self.a.x, self.b.x) + 1;
|
const cond = self.a.pos > self.b.pos;
|
||||||
const height = @max(self.a.y, self.b.y) - @min(self.a.y, self.b.y) + 1;
|
const high = @select(u64, cond, self.a.pos, self.b.pos);
|
||||||
return width * height;
|
const low = @select(u64, !cond, self.a.pos, self.b.pos);
|
||||||
|
const diff = high - low;
|
||||||
|
const one: @Vector(2, u64) = @splat(1);
|
||||||
|
return @reduce(.Mul, diff + one);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue