const std = @import("std"); pub fn main() !void { const input = @embedFile("1.txt"); try std.fmt.format(std.io.getStdOut().writer(), "{}\n", .{try run(input)}); } test { std.debug.assert(try run( \\3 4 \\4 3 \\2 5 \\1 3 \\3 9 \\3 3 ) == 11); } pub fn run(input: []const u8) !u32 { var lines = std.mem.split(u8, input, "\n"); var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); defer arena.deinit(); const allocator = arena.allocator(); var lefts = std.ArrayList(u32).init(allocator); defer lefts.deinit(); var rights = std.ArrayList(u32).init(allocator); defer rights.deinit(); while (lines.next()) |line| { if (line.len == 0) continue; var words = std.mem.split(u8, line, " "); const left = try std.fmt.parseInt(u32, words.next() orelse return error.InvalidInput, 10); const right = try std.fmt.parseInt(u32, words.next() orelse return error.InvalidInput, 10); try lefts.append(left); try rights.append(right); } std.mem.sort(u32, lefts.items, {}, std.sort.asc(u32)); std.mem.sort(u32, rights.items, {}, std.sort.asc(u32)); var sum: u32 = 0; for (lefts.items, rights.items) |l, r| { sum += @max(l, r) - @min(l, r); } return sum; }