72 lines
1.8 KiB
Zig
72 lines
1.8 KiB
Zig
|
const std = @import("std");
|
||
|
|
||
|
const mem = std.mem;
|
||
|
const fmt = std.fmt;
|
||
|
|
||
|
const input = @embedFile("input");
|
||
|
|
||
|
pub fn main() !void {
|
||
|
var count: usize = 0;
|
||
|
// Iterate through the lines
|
||
|
var lines = mem.split(u8, input, "\n");
|
||
|
while (lines.next()) |line| {
|
||
|
// If line is empty, ignore
|
||
|
if (line.len == 0) continue;
|
||
|
|
||
|
var limits: [2][2]usize = undefined;
|
||
|
|
||
|
//std.debug.print("{s}\n", .{line});
|
||
|
|
||
|
// Which elf
|
||
|
var elf: usize = 0;
|
||
|
// Which limit
|
||
|
var limit: usize = 0;
|
||
|
// Start of slice
|
||
|
var start: usize = 0;
|
||
|
|
||
|
for (line) |char, index| {
|
||
|
if (char == '-') {
|
||
|
|
||
|
const number = fmt.parseInt(usize, line[start..index], 10) catch 0;
|
||
|
//std.debug.print("{}\n", .{number});
|
||
|
limits[elf][limit] = number;
|
||
|
start = index + 1;
|
||
|
limit += 1;
|
||
|
|
||
|
// 10-20,30-40
|
||
|
// ^
|
||
|
|
||
|
}
|
||
|
if (char == ',') {
|
||
|
|
||
|
const number = fmt.parseInt(usize, line[start..index], 10) catch 0;
|
||
|
//std.debug.print("{}\n", .{number});
|
||
|
limits[elf][limit] = number;
|
||
|
start = index + 1;
|
||
|
elf += 1;
|
||
|
limit = 0;
|
||
|
|
||
|
// 10-20,30-40
|
||
|
// ^
|
||
|
|
||
|
}
|
||
|
if (index == line.len - 1) {
|
||
|
|
||
|
const number = fmt.parseInt(usize, line[start..], 10) catch 0;
|
||
|
//std.debug.print("{}\n", .{number});
|
||
|
limits[elf][limit] = number;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Check if they overlap
|
||
|
|
||
|
if ((limits[0][0] <= limits[1][0] and limits[0][1] >= limits[1][1]) or
|
||
|
(limits[1][0] <= limits[0][0] and limits[1][1] >= limits[0][1])) {
|
||
|
count += 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
std.debug.print("{}\n", .{count});
|
||
|
}
|