Finish day06, part 2
This commit is contained in:
parent
5a0c313961
commit
fc3a53c68d
1 changed files with 42 additions and 13 deletions
|
|
@ -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| {
|
||||
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]});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue