From 8b0763bd257f79b86319cf762ba596a5c241eeab Mon Sep 17 00:00:00 2001 From: Orfeas <38209077+0xfea5@users.noreply.github.com> Date: Thu, 7 Dec 2023 22:55:14 +0200 Subject: day6 --- day06/solution.zig | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 day06/solution.zig (limited to 'day06/solution.zig') diff --git a/day06/solution.zig b/day06/solution.zig new file mode 100644 index 0000000..a66268d --- /dev/null +++ b/day06/solution.zig @@ -0,0 +1,85 @@ +const std = @import("std"); +const print = std.debug.print; +const assert = std.debug.assert; +const ArrayList = std.ArrayList; +const HashMap = std.HashMap; +const mem = std.mem; + +const fin = mem.trim(u8, @embedFile("./input.txt"), &std.ascii.whitespace); +var gpa = std.heap.GeneralPurposeAllocator(.{}){}; +const allocator = gpa.allocator(); + +fn evalutate(rd: i64, rt: i64) u64 { + var timesBeat: u64 = 0; + + for (1..@bitCast(rt + 1)) |tt| { + const t: i64 = @bitCast(tt); + const d = t * rt - t * t; + + if (d > rd) { + timesBeat += 1; + } + } + + assert(timesBeat != 0); + return timesBeat; +} + +pub fn part1(recTimes: []const i64, recDists: []const i64) void { + var ans: u64 = 1; + + for (recDists, recTimes) |rd, rt| { + ans *= evalutate(rd, rt); + } + + print("{d}\n", .{ans}); +} + +pub fn part2(recTimes: []const []const u8, recDists: []const []const u8) void { + const rtStr = mem.concat(allocator, u8, recTimes) catch unreachable; + const rdStr = mem.concat(allocator, u8, recDists) catch unreachable; + defer { + allocator.free(rtStr); + allocator.free(rdStr); + } + + const rt = std.fmt.parseInt(i64, rtStr, 10) catch unreachable; + const rd = std.fmt.parseInt(i64, rdStr, 10) catch unreachable; + + const ans = evalutate(rd, rt); + + print("{d}\n", .{ans}); +} + +pub fn main() !void { + var recTimes = ArrayList(i64).init(allocator); + var recDists = ArrayList(i64).init(allocator); + var recTimesStr = ArrayList([]const u8).init(allocator); + var recDistsStr = ArrayList([]const u8).init(allocator); + defer { + recTimes.deinit(); + recDists.deinit(); + recTimesStr.deinit(); + recDistsStr.deinit(); + } + + var splitLines = mem.splitScalar(u8, fin, '\n'); + var timesText = mem.splitScalar(u8, splitLines.next().?, ' '); + var distsText = mem.splitScalar(u8, splitLines.next().?, ' '); + + _ = timesText.next().?; + _ = distsText.next().?; + + while (timesText.next()) |time| { + try recTimes.append(std.fmt.parseInt(i64, time, 10) catch continue); + try recTimesStr.append(time); + } + + while (distsText.next()) |dist| { + try recDists.append(std.fmt.parseInt(i64, dist, 10) catch continue); + try recDistsStr.append(dist); + } + + part1(recTimes.items, recDists.items); + part2(recTimesStr.items, recDistsStr.items); +} -- cgit v1.2.3