day 1 part 2

This commit is contained in:
Arkitu 2025-02-22 15:16:32 +01:00
parent 9e5b6bc60f
commit f1f95341c9
2 changed files with 50 additions and 12 deletions

View File

@ -1,7 +1,6 @@
const std = @import("std");
pub fn main() !void {
std.log.debug("test", .{});
pub fn part_one() void {
var result: usize = 0;
var lines = std.mem.splitScalar(u8, input, '\n');
while (lines.next()) |line| {
@ -25,7 +24,53 @@ pub fn main() !void {
unreachable;
};
result += d1*10 + d2;
std.log.debug("{any}, {any}", .{d1, d2});
}
std.log.info("result: {d}", .{result});
}
pub fn part_two() void {
var result: usize = 0;
var lines = std.mem.splitScalar(u8, input, '\n');
while (lines.next()) |line| {
const d1 = d1:{
var i: usize = 0;
while (i < line.len) {
const c = line[i];
if (c >= 48 and c <= 57) {
break :d1 c - 48;
}
const slice = line[i..];
var j: u8 = 0;
for ([_][]const u8{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}) |num| {
if (std.mem.startsWith(u8, slice, num)) {
break :d1 j;
}
j += 1;
}
i += 1;
}
unreachable;
};
const d2 = d2:{
var i = line.len - 1;
while (i >= 0) {
const c = line[i];
if (c >= 48 and c <= 57) {
break :d2 c - 48;
}
const slice = line[0..i+1];
var j: u8 = 0;
for ([_][]const u8{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}) |num| {
if (std.mem.endsWith(u8, slice, num)) {
break :d2 j;
}
j += 1;
}
i -= 1;
}
unreachable;
};
result += d1*10 + d2;
}
std.log.info("result: {d}", .{result});
}

View File

@ -2,12 +2,5 @@ const std = @import("std");
const one = @import("1.zig");
pub fn main() !void {
try one.main();
}
test "simple test" {
var list = std.ArrayList(i32).init(std.testing.allocator);
defer list.deinit(); // try commenting this out and see if zig detects the memory leak!
try list.append(42);
try std.testing.expectEqual(@as(i32, 42), list.pop());
}
one.part_two();
}