Finish day03, part 2
This commit is contained in:
parent
0413ad2b9f
commit
0eeca85635
1 changed files with 21 additions and 23 deletions
|
|
@ -6,35 +6,33 @@ pub fn run(_: std.mem.Allocator) !void {
|
|||
const input = @embedFile("./input/day03.txt");
|
||||
var lines = std.mem.tokenizeScalar(u8, input, '\n');
|
||||
|
||||
var accumulator: u32 = 0;
|
||||
var accumulator: u64 = 0;
|
||||
|
||||
const nr_of_digits = 12;
|
||||
|
||||
while (lines.next()) |line| {
|
||||
var first_digit: u8 = 0;
|
||||
var first_digit_index: usize = 0;
|
||||
for (line[0..line.len - 1], 0..) |c, i| {
|
||||
const digit = try std.fmt.charToDigit(c, 10);
|
||||
if (digit > first_digit) {
|
||||
first_digit = digit;
|
||||
first_digit_index = i;
|
||||
}
|
||||
}
|
||||
std.debug.print("first = {d}\n", .{first_digit});
|
||||
var joltage: u64 = 0;
|
||||
|
||||
var second_digit: u8 = 0;
|
||||
if (first_digit_index == line.len - 2) {
|
||||
const c = line[line.len - 1];
|
||||
second_digit = try std.fmt.charToDigit(c, 10);
|
||||
} else {
|
||||
for (line[first_digit_index + 1..]) |c| {
|
||||
const digit = try std.fmt.charToDigit(c, 10);
|
||||
if (digit > second_digit) {
|
||||
second_digit = digit;
|
||||
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("second = {d}\n", .{second_digit});
|
||||
std.debug.print("digit = {d}\n", .{digit});
|
||||
|
||||
const joltage = first_digit * 10 + second_digit;
|
||||
joltage += digit * std.math.pow(u64, 10, nr_of_digits - (i + 1));
|
||||
}
|
||||
|
||||
std.debug.print("joltage = {d}\n", .{joltage});
|
||||
accumulator += joltage;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue