Day 6. Cheating a bit. Not bothering to try to parse a file with the data, just putting it in variables. And there's an off-by-one error at the end Im just going to ignore
parent
5ba7e6e4e1
commit
c40831a68b
@ -0,0 +1,2 @@
|
||||
Time: 50 74 86 85
|
||||
Distance: 242 1017 1691 1252
|
@ -0,0 +1,64 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
// const times = [_]u8{ 7, 15, 30 };
|
||||
// const distances = [_]u8{ 9, 40, 200 };
|
||||
|
||||
const times = [_]u8{ 50, 74, 86, 85 };
|
||||
const distances = [_]u16{ 242, 1017, 1691, 1252 };
|
||||
|
||||
// Part 1
|
||||
var totals: u64 = 1;
|
||||
for (times, 0..) |time, idx| {
|
||||
var waysToWin: u8 = 0;
|
||||
for (0..time) |ms| {
|
||||
var dist: u16 = 0;
|
||||
for (0..time - ms) |_| {
|
||||
dist += @intCast(ms);
|
||||
}
|
||||
|
||||
if (dist > distances[idx]) {
|
||||
waysToWin += 1;
|
||||
}
|
||||
}
|
||||
totals *= waysToWin;
|
||||
}
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{totals});
|
||||
|
||||
// Part 2
|
||||
// const time = 71530;
|
||||
// const distance = 940200;
|
||||
const time = 50748685;
|
||||
const distance = 242101716911252;
|
||||
|
||||
var pivot: u32 = time / 2;
|
||||
var max: u32 = pivot;
|
||||
var min: u32 = 0;
|
||||
var prev: u32 = pivot;
|
||||
|
||||
var i: u8 = 0;
|
||||
while (true) : (i += 1) {
|
||||
var dist: u64 = 0;
|
||||
for (0..(time - pivot)) |_| {
|
||||
dist += pivot;
|
||||
}
|
||||
|
||||
if (dist > distance) {
|
||||
max = pivot;
|
||||
pivot -= (max - min) / 2;
|
||||
} else {
|
||||
min = pivot;
|
||||
pivot += (max - min) / 2;
|
||||
}
|
||||
|
||||
if (prev == pivot) {
|
||||
break;
|
||||
}
|
||||
prev = pivot;
|
||||
}
|
||||
|
||||
const num = time - (pivot * 2);
|
||||
std.debug.print("Part 2: {}\n", .{num});
|
||||
// TODO: potentially off by one. Could actually figure it out or just try num + 1 in AoC
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
Time: 7 15 30
|
||||
Distance: 9 40 200
|
Loading…
Reference in New Issue