47 lines
1.2 KiB
Zig
47 lines
1.2 KiB
Zig
const std = @import("std");
|
|
|
|
pub const title = "Day 03: Lobby";
|
|
|
|
pub fn run(_: std.mem.Allocator) !void {
|
|
const input = @embedFile("./input/day03.txt");
|
|
var lines = std.mem.tokenizeScalar(u8, input, '\n');
|
|
|
|
var accumulator: u64 = 0;
|
|
|
|
const nr_of_digits = 12;
|
|
|
|
while (lines.next()) |line| {
|
|
var joltage: u64 = 0;
|
|
|
|
var start: usize = 0;
|
|
for (0..nr_of_digits) |i| {
|
|
const end = line.len - (nr_of_digits - i) + 1;
|
|
|
|
std.debug.print("checking {d} to {d}\n", .{start, end});
|
|
|
|
var digit: u8 = 0;
|
|
for (line[start..end], start..) |c, di| {
|
|
const d = try std.fmt.charToDigit(c, 10);
|
|
if (d > digit) {
|
|
digit = d;
|
|
start = di + 1;
|
|
}
|
|
}
|
|
std.debug.print("digit = {d}\n", .{digit});
|
|
|
|
joltage += digit * std.math.pow(u64, 10, nr_of_digits - (i + 1));
|
|
}
|
|
|
|
std.debug.print("joltage = {d}\n", .{joltage});
|
|
accumulator += joltage;
|
|
}
|
|
|
|
var buffer: [8]u8 = undefined;
|
|
var stdout_writer = std.fs.File.stdout().writer(&buffer);
|
|
const stdout = &stdout_writer.interface;
|
|
|
|
try stdout.print("{d}\n", .{accumulator});
|
|
|
|
try stdout.flush();
|
|
}
|
|
|