My Advent of Code 2025 solutions

Day 3: Lobby

+67
+67
src/day03.zig
··· 1 + const std = @import("std"); 2 + const mem = std.mem; 3 + const testing = std.testing; 4 + const aoc = @import("advent_of_code_2025"); 5 + 6 + const input = @embedFile("input03.txt"); 7 + 8 + pub fn main() !void { 9 + var max_joltage_2: u64 = 0; 10 + var max_joltage_12: u64 = 0; 11 + var banks = mem.tokenizeScalar(u8, input, '\n'); 12 + while (banks.next()) |bank| { 13 + max_joltage_2 += maxJoltage(bank, 2); 14 + max_joltage_12 += maxJoltage(bank, 12); 15 + } 16 + 17 + std.debug.print("{d}\n{d}\n", .{ 18 + max_joltage_2, 19 + max_joltage_12, 20 + }); 21 + } 22 + 23 + // Find the maximum joltage rating for a battery bank by enabling the specified 24 + // number of batteries. 25 + fn maxJoltage(bank: []const u8, num_batteries: usize) u64 { 26 + var max: u64 = 0; 27 + var start: usize = 0; 28 + 29 + var remaining = num_batteries; 30 + while (remaining > 0) : (remaining -= 1) { 31 + // Take a slice of the battery bank, so that we are only looking at 32 + // `bank.len - remaining` values. In the best-case scenario, the 33 + // largest value we find is at the end of the slice. 34 + const end = bank.len - remaining + 1; 35 + const batteries = bank[start..end]; 36 + 37 + const index = mem.indexOfMax(u8, batteries); 38 + 39 + const joltage: u64 = @intCast(batteries[index] - '0'); 40 + max = (max * 10) + joltage; 41 + 42 + // On the next iteration, start at the index after the current max 43 + // value. 44 + start += index + 1; 45 + } 46 + 47 + return max; 48 + } 49 + 50 + const test_input = [_][]const u8{ 51 + "987654321111111", 52 + "811111111111119", 53 + "234234234234278", 54 + "818181911112111", 55 + }; 56 + 57 + test maxJoltage { 58 + try testing.expectEqual(98, maxJoltage(test_input[0], 2)); 59 + try testing.expectEqual(89, maxJoltage(test_input[1], 2)); 60 + try testing.expectEqual(78, maxJoltage(test_input[2], 2)); 61 + try testing.expectEqual(92, maxJoltage(test_input[3], 2)); 62 + 63 + try testing.expectEqual(987654321111, maxJoltage(test_input[0], 12)); 64 + try testing.expectEqual(811111111119, maxJoltage(test_input[1], 12)); 65 + try testing.expectEqual(434234234278, maxJoltage(test_input[2], 12)); 66 + try testing.expectEqual(888911112111, maxJoltage(test_input[3], 12)); 67 + }