Add solution for 2023 day 06 part 1
This commit is contained in:
parent
7944889184
commit
c9f21eaf1f
51
2023/day-06/common.zig
Normal file
51
2023/day-06/common.zig
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
const alloc = std.heap.page_allocator;
|
||||||
|
|
||||||
|
pub const Races = struct {
|
||||||
|
times: List(u32),
|
||||||
|
distances: List(u32),
|
||||||
|
|
||||||
|
pub fn deinit(self: Races) void {
|
||||||
|
self.times.deinit();
|
||||||
|
self.distances.deinit();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const List = std.ArrayList;
|
||||||
|
|
||||||
|
pub fn parse(data: []const u8) !Races {
|
||||||
|
var lines = std.mem.tokenizeScalar(u8, data, '\n');
|
||||||
|
|
||||||
|
var times = List(u32).init(alloc);
|
||||||
|
|
||||||
|
{
|
||||||
|
const line = lines.next().?;
|
||||||
|
var numbers = std.mem.tokenizeScalar(u8, line, ' ');
|
||||||
|
_ = numbers.next();
|
||||||
|
|
||||||
|
while (numbers.next()) |num_str| {
|
||||||
|
const num = try std.fmt.parseInt(u32, num_str, 10);
|
||||||
|
try times.append(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var dists = List(u32).init(alloc);
|
||||||
|
|
||||||
|
{
|
||||||
|
const line = lines.next().?;
|
||||||
|
var numbers = std.mem.tokenizeScalar(u8, line, ' ');
|
||||||
|
_ = numbers.next();
|
||||||
|
|
||||||
|
while (numbers.next()) |num_str| {
|
||||||
|
const num = try std.fmt.parseInt(u32, num_str, 10);
|
||||||
|
try dists.append(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const races = .{
|
||||||
|
.times = times,
|
||||||
|
.distances = dists,
|
||||||
|
};
|
||||||
|
|
||||||
|
return races;
|
||||||
|
}
|
2
2023/day-06/inputs/puzzle.txt
Normal file
2
2023/day-06/inputs/puzzle.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Time: 40 82 91 66
|
||||||
|
Distance: 277 1338 1349 1063
|
2
2023/day-06/inputs/sample.txt
Normal file
2
2023/day-06/inputs/sample.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Time: 7 15 30
|
||||||
|
Distance: 9 40 200
|
49
2023/day-06/part_one.zig
Normal file
49
2023/day-06/part_one.zig
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
const common = @import("common.zig");
|
||||||
|
|
||||||
|
const data = @embedFile("inputs/puzzle.txt");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
const stdout = std.io.getStdOut().writer();
|
||||||
|
|
||||||
|
const races = try common.parse(data);
|
||||||
|
defer races.deinit();
|
||||||
|
|
||||||
|
var prod: u32 = 1;
|
||||||
|
|
||||||
|
for (races.times.items, 0..) |race_time, i| {
|
||||||
|
const race_record = races.distances.items[i];
|
||||||
|
|
||||||
|
var min: u32 = undefined;
|
||||||
|
|
||||||
|
for (1..race_time) |speed| {
|
||||||
|
const rem_race_time = race_time - speed;
|
||||||
|
const dist = rem_race_time * speed;
|
||||||
|
if (dist > race_record) {
|
||||||
|
min = @intCast(speed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var max: u32 = undefined;
|
||||||
|
|
||||||
|
var speed: u32 = race_time - 1;
|
||||||
|
while (speed > 0) {
|
||||||
|
const rem_race_time = race_time - speed;
|
||||||
|
const dist = rem_race_time * speed;
|
||||||
|
|
||||||
|
if (dist > race_record) {
|
||||||
|
max = speed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
speed -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nums_beat = max - min + 1;
|
||||||
|
|
||||||
|
prod *= nums_beat;
|
||||||
|
}
|
||||||
|
|
||||||
|
try stdout.print("{d}\n", .{prod});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user