diff --git a/src/1.zig b/src/1.zig index 2ef62da..ab6133f 100644 --- a/src/1.zig +++ b/src/1.zig @@ -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}); } diff --git a/src/main.zig b/src/main.zig index bc67e62..bb072eb 100644 --- a/src/main.zig +++ b/src/main.zig @@ -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(); +} \ No newline at end of file