Skip to content

Instantly share code, notes, and snippets.

@akhildevelops
Created November 10, 2025 17:04
Show Gist options
  • Select an option

  • Save akhildevelops/fcd8659bc281173af8c8a15dd3fdb1c2 to your computer and use it in GitHub Desktop.

Select an option

Save akhildevelops/fcd8659bc281173af8c8a15dd3fdb1c2 to your computer and use it in GitHub Desktop.
const std = @import("std");
fn part(buffer: []const u8, init_rotations: f64, reverse: bool) !void {
if (reverse) {
var number_iter = std.mem.splitBackwardsScalar(u8, buffer, '\n');
var previous_gear = try std.fmt.parseFloat(f64, number_iter.next().?);
var total_rotations: f64 = init_rotations;
while (number_iter.next()) |number| {
const n = try std.fmt.parseFloat(f64, number);
total_rotations = (previous_gear * total_rotations) / n;
previous_gear = n;
}
std.debug.print("{d}\n", .{total_rotations});
} else {
var number_iter = std.mem.splitScalar(u8, buffer, '\n');
var previous_gear = try std.fmt.parseFloat(f64, number_iter.next().?);
var total_rotations: f64 = init_rotations;
while (number_iter.next()) |number| {
const n = try std.fmt.parseFloat(f64, number);
total_rotations = (previous_gear * total_rotations) / n;
previous_gear = n;
}
std.debug.print("{d}\n", .{total_rotations});
}
}
fn part3(buffer: []const u8, init_r: f64) !void {
var start_pointer: usize = 0;
var end_pointer: usize = 0;
var prev: f64 = undefined;
var init_rotations = init_r;
while (end_pointer < buffer.len) : (end_pointer += 1) {
if (buffer[end_pointer] == '\n') {
prev = try std.fmt.parseFloat(f64, buffer[start_pointer..end_pointer]);
start_pointer = end_pointer + 1;
} else if (buffer[end_pointer] == '|') {
const current = try std.fmt.parseFloat(f64, buffer[start_pointer..end_pointer]);
init_rotations = (init_rotations * prev) / current;
start_pointer = end_pointer + 1;
} else if (end_pointer == buffer.len - 1) {
const current = try std.fmt.parseFloat(f64, buffer[start_pointer..end_pointer]);
init_rotations = (init_rotations * prev) / current;
std.debug.print("{d}", .{init_rotations});
}
}
}
pub fn main() !void {
const allocator = std.heap.page_allocator;
var file = try std.fs.cwd().openFile("src/day4/input.txt", .{});
var buffer = try file.readToEndAlloc(allocator, std.math.maxInt(usize));
try part(buffer, 2025, false);
file = try std.fs.cwd().openFile("src/day4/input2.txt", .{});
buffer = try file.readToEndAlloc(allocator, std.math.maxInt(usize));
try part(buffer, 10000000000000, true);
file = try std.fs.cwd().openFile("src/day4/input3.txt", .{});
buffer = try file.readToEndAlloc(allocator, std.math.maxInt(usize));
try part3(
buffer,
100,
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment