const std = @import("std"); const allocator = std.heap.page_allocator; fn findLargestDigitPos(batteryLine: []const u8) usize { var largestPos: usize = 0; var largestDigit: u8 = 0; for (batteryLine, 0..) |digit, pos| { if (digit > largestDigit) { largestDigit = digit; largestPos = pos; } } return largestPos; } pub fn main() !void { var printBuf: [1024]u8 = undefined; const inputFile = try std.fs.cwd().openFile( "input.txt", .{ .mode = .read_only, }, ); defer inputFile.close(); var inputFileBuffer: [1024]u8 = undefined; var inputFileReader = inputFile.reader(&inputFileBuffer); const inputFileSize = try inputFileReader.getSize(); const inputBuffer = try allocator.alloc(u8, inputFileSize); try inputFileReader.interface.readSliceAll(inputBuffer); var counter:u64 = 0; var it = std.mem.tokenizeScalar(u8, inputBuffer, '\n'); while (it.next()) |batteryLine| { const largestPos = findLargestDigitPos(batteryLine[0..batteryLine.len-1]); const secondLargestPos = findLargestDigitPos(batteryLine[largestPos+1..]) + largestPos + 1; counter += @intCast((batteryLine[largestPos] - '0') * 10 + (batteryLine[secondLargestPos] - '0')); } try std.fs.File.stdout().writeAll( try std.fmt.bufPrint(&printBuf, "{}\n", .{counter})); }