Finish day06, part 2

This commit is contained in:
ktkk 2025-12-06 23:11:05 +00:00
parent 5a0c313961
commit fc3a53c68d

View file

@ -18,7 +18,13 @@ pub fn run(allocator: std.mem.Allocator) !void {
var operators_s: []const u8 = undefined;
var line_len: usize = 0;
while (lines.next()) |line| {
if (line_len != 0) {
std.debug.assert(line_len == line.len);
}
line_len = line.len;
std.debug.print("{s}\n", .{line});
if (lines.peek() == null) {
operators_s = line;
@ -40,31 +46,54 @@ pub fn run(allocator: std.mem.Allocator) !void {
defer allocator.free(results);
@memset(results, 0);
for (numbers.items, 0..) |n, i| {
var numbers_i = std.mem.tokenizeScalar(u8, n, ' ');
var oi: usize = operators.items.len - 1;
var oni: usize = 0;
for (0..line_len) |i| {
const ri = line_len - 1 - i;
var number: u64 = 0;
var all_spaces = true;
var numbers_reverse_i = std.mem.reverseIterator(numbers.items);
var ni: usize = 0;
while (numbers_i.next()) |number_s| {
defer ni += 1;
while (numbers_reverse_i.next()) |n| {
const c = n[ri];
if (c == ' ') {
continue;
} else {
defer ni += 1;
std.debug.print("number = {s}\n", .{number_s});
all_spaces = all_spaces and false;
const digit = try std.fmt.charToDigit(c, 10);
number += digit * std.math.pow(u64, 10, ni);
}
}
const number = try std.fmt.parseUnsigned(u64, number_s, 10);
const operator = operators.items[ni];
if (all_spaces) {
std.debug.print("all spaces\n", .{});
oi -= 1;
oni = 0;
} else {
defer oni += 1;
if (i == 0) {
results[ni] = number;
const operator = operators.items[oi];
std.debug.print("operator {d} = {c}\n", .{oi, operator});
std.debug.print("oni = {d}\n", .{oni});
if (oni == 0) {
results[oi] = number;
} else {
if (operator == '+') {
results[ni] += number;
results[oi] += number;
} else if (operator == '*') {
results[ni] *= number;
results[oi] *= number;
} else {
std.debug.print("operator = {c}\n", .{operator});
unreachable;
}
}
std.debug.print("result = {d}\n", .{results[ni]});
std.debug.print("result = {d}\n", .{results[oi]});
}
}