Add solution for 2023 day 06 part 2
This commit is contained in:
parent
c9f21eaf1f
commit
dbb917c8ef
@ -9,7 +9,7 @@
|
|||||||
| [03] | ✓ | ✓ | [Zig] |
|
| [03] | ✓ | ✓ | [Zig] |
|
||||||
| [04] | ✓ | ✓ | [Zig] |
|
| [04] | ✓ | ✓ | [Zig] |
|
||||||
| [05] | ✓ | ✓ | [Zig] |
|
| [05] | ✓ | ✓ | [Zig] |
|
||||||
| [06] | | | |
|
| [06] | ✓ | ✓ | [Zig] |
|
||||||
| [07] | | | |
|
| [07] | | | |
|
||||||
| [08] | | | |
|
| [08] | | | |
|
||||||
| [09] | | | |
|
| [09] | | | |
|
||||||
|
@ -13,6 +13,36 @@ pub const Races = struct {
|
|||||||
|
|
||||||
const List = std.ArrayList;
|
const List = std.ArrayList;
|
||||||
|
|
||||||
|
pub fn calculate(time: u64, record_dist: u64) u64 {
|
||||||
|
var min: u64 = undefined;
|
||||||
|
|
||||||
|
for (1..time) |speed| {
|
||||||
|
const rem_race_time = time - speed;
|
||||||
|
const dist = rem_race_time * speed;
|
||||||
|
if (dist > record_dist) {
|
||||||
|
min = @intCast(speed);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var max: u64 = undefined;
|
||||||
|
|
||||||
|
var speed: u64 = time - 1;
|
||||||
|
while (speed > 0) {
|
||||||
|
const rem_race_time = time - speed;
|
||||||
|
const dist = rem_race_time * speed;
|
||||||
|
|
||||||
|
if (dist > record_dist) {
|
||||||
|
max = speed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
speed -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return max - min + 1;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn parse(data: []const u8) !Races {
|
pub fn parse(data: []const u8) !Races {
|
||||||
var lines = std.mem.tokenizeScalar(u8, data, '\n');
|
var lines = std.mem.tokenizeScalar(u8, data, '\n');
|
||||||
|
|
||||||
|
@ -9,38 +9,12 @@ pub fn main() !void {
|
|||||||
const races = try common.parse(data);
|
const races = try common.parse(data);
|
||||||
defer races.deinit();
|
defer races.deinit();
|
||||||
|
|
||||||
var prod: u32 = 1;
|
var prod: u64 = 1;
|
||||||
|
|
||||||
for (races.times.items, 0..) |race_time, i| {
|
for (races.times.items, 0..) |race_time, i| {
|
||||||
const race_record = races.distances.items[i];
|
const race_record = races.distances.items[i];
|
||||||
|
|
||||||
var min: u32 = undefined;
|
const nums_beat = common.calculate(race_time, race_record);
|
||||||
|
|
||||||
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;
|
prod *= nums_beat;
|
||||||
}
|
}
|
||||||
|
34
2023/day-06/part_two.zig
Normal file
34
2023/day-06/part_two.zig
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
const common = @import("common.zig");
|
||||||
|
const alloc = std.heap.page_allocator;
|
||||||
|
const Buffer = std.ArrayList(u8);
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
const time = try concat_numbers(races.times.items);
|
||||||
|
const record = try concat_numbers(races.distances.items);
|
||||||
|
|
||||||
|
const nums_beat = common.calculate(time, record);
|
||||||
|
|
||||||
|
try stdout.print("{d}\n", .{nums_beat});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn concat_numbers(nums: []const u32) !u64 {
|
||||||
|
var buf = Buffer.init(alloc);
|
||||||
|
defer buf.deinit();
|
||||||
|
|
||||||
|
for (nums) |race_times| {
|
||||||
|
const segment = try std.fmt.allocPrint(alloc, "{d}", .{race_times});
|
||||||
|
try buf.appendSlice(segment);
|
||||||
|
}
|
||||||
|
|
||||||
|
const num = try std.fmt.parseInt(u64, buf.items, 10);
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
@ -10,4 +10,4 @@
|
|||||||
- [2020](2020/README.md) (20% completed)
|
- [2020](2020/README.md) (20% completed)
|
||||||
- [2021](2021/README.md) (68% completed)
|
- [2021](2021/README.md) (68% completed)
|
||||||
- [2022](2022/README.md) (54% completed)
|
- [2022](2022/README.md) (54% completed)
|
||||||
- [2023](2023/README.md) (20% completed)
|
- [2023](2023/README.md) (24% completed)
|
||||||
|
Loading…
Reference in New Issue
Block a user