mirror of
https://github.com/thegeneralist01/aoc
synced 2026-01-09 14:40:25 +01:00
day 1
This commit is contained in:
commit
1af45ecf4d
6 changed files with 2122 additions and 0 deletions
3
README.md
Normal file
3
README.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Advent of Code
|
||||
hello. advent of code 2024.
|
||||
in zig.
|
||||
53
day1/day1_part1.zig
Normal file
53
day1/day1_part1.zig
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
const file = try std.fs.cwd().openFile("input", .{});
|
||||
const file_reader = file.reader();
|
||||
defer file.close();
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const ally = gpa.allocator();
|
||||
defer _ = gpa.deinit();
|
||||
|
||||
var left = std.ArrayList(u32).init(ally);
|
||||
var right = std.ArrayList(u32).init(ally);
|
||||
defer left.deinit();
|
||||
defer right.deinit();
|
||||
|
||||
var input_buf = std.ArrayListUnmanaged(u8){};
|
||||
defer input_buf.deinit(ally);
|
||||
while (true) {
|
||||
defer input_buf.clearRetainingCapacity();
|
||||
file_reader.streamUntilDelimiter(input_buf.writer(ally), '\n', null) catch |err| switch (err) {
|
||||
error.EndOfStream => break,
|
||||
else => return err,
|
||||
};
|
||||
|
||||
var integers = std.mem.splitSequence(u8, input_buf.items, " ");
|
||||
|
||||
const first = std.fmt.parseInt(u32, integers.next().?, 10) catch |err| {
|
||||
std.debug.print("Error parsing first integer: {}\n", .{err});
|
||||
continue;
|
||||
};
|
||||
const second = std.fmt.parseInt(u32, integers.next().?, 10) catch |err| {
|
||||
std.debug.print("Error parsing second integer: {}\n", .{err});
|
||||
continue;
|
||||
};
|
||||
|
||||
try left.append(first);
|
||||
try right.append(second);
|
||||
|
||||
// std.debug.print("Integers are '{}' and '{}' of types {} and {}\n", .{ first, second, @TypeOf(first), @TypeOf(second) });
|
||||
}
|
||||
|
||||
std.mem.sort(u32, left.items, {}, comptime std.sort.asc(u32));
|
||||
std.mem.sort(u32, right.items, {}, comptime std.sort.asc(u32));
|
||||
|
||||
// We have the two sorted arrays. Now, differences
|
||||
var diff: u64 = 0;
|
||||
for (0..left.items.len) |i| {
|
||||
diff += if (left.items[i] > right.items[i]) @abs(left.items[i] - right.items[i]) else @abs(right.items[i] - left.items[i]);
|
||||
}
|
||||
|
||||
std.debug.print("{}\n", .{ diff });
|
||||
}
|
||||
60
day1/day1_part2.zig
Normal file
60
day1/day1_part2.zig
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
const file = try std.fs.cwd().openFile("input2", .{});
|
||||
const file_reader = file.reader();
|
||||
defer file.close();
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const ally = gpa.allocator();
|
||||
defer _ = gpa.deinit();
|
||||
|
||||
var left = std.ArrayList(u32).init(ally);
|
||||
var right = std.ArrayList(u32).init(ally);
|
||||
defer left.deinit();
|
||||
defer right.deinit();
|
||||
|
||||
var input_buf = std.ArrayListUnmanaged(u8){};
|
||||
defer input_buf.deinit(ally);
|
||||
while (true) {
|
||||
defer input_buf.clearRetainingCapacity();
|
||||
file_reader.streamUntilDelimiter(input_buf.writer(ally), '\n', null) catch |err| switch (err) {
|
||||
error.EndOfStream => break,
|
||||
else => return err,
|
||||
};
|
||||
|
||||
var integers = std.mem.splitSequence(u8, input_buf.items, " ");
|
||||
|
||||
const first = std.fmt.parseInt(u32, integers.next().?, 10) catch |err| {
|
||||
std.debug.print("Error parsing first integer: {}\n", .{err});
|
||||
continue;
|
||||
};
|
||||
const second = std.fmt.parseInt(u32, integers.next().?, 10) catch |err| {
|
||||
std.debug.print("Error parsing second integer: {}\n", .{err});
|
||||
continue;
|
||||
};
|
||||
|
||||
try left.append(first);
|
||||
try right.append(second);
|
||||
|
||||
// std.debug.print("Integers are '{}' and '{}' of types {} and {}\n", .{ first, second, @TypeOf(first), @TypeOf(second) });
|
||||
}
|
||||
|
||||
std.mem.sort(u32, left.items, {}, comptime std.sort.asc(u32));
|
||||
std.mem.sort(u32, right.items, {}, comptime std.sort.asc(u32));
|
||||
|
||||
// We have the two sorted arrays. Now, similarity score
|
||||
var occurances = std.AutoHashMap(u32, usize).init(ally);
|
||||
defer occurances.deinit();
|
||||
for (left.items) |element| {
|
||||
const needle = &[_]u32{element};
|
||||
_ = try occurances.put(element, std.mem.count(u32, right.items, needle));
|
||||
}
|
||||
|
||||
var n_occurances: u64 = 0;
|
||||
for (left.items) |element| {
|
||||
n_occurances += element * occurances.get(element).?;
|
||||
}
|
||||
|
||||
std.debug.print("{}\n", .{ n_occurances });
|
||||
}
|
||||
1000
day1/input
Normal file
1000
day1/input
Normal file
File diff suppressed because it is too large
Load diff
1000
day1/input2
Normal file
1000
day1/input2
Normal file
File diff suppressed because it is too large
Load diff
6
day1/test
Normal file
6
day1/test
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
3 4
|
||||
4 3
|
||||
2 5
|
||||
1 3
|
||||
3 9
|
||||
3 3
|
||||
Loading…
Add table
Add a link
Reference in a new issue