mirror of
https://codeberg.org/andyscott/advent-of-code.git
synced 2024-12-22 01:23:11 -05:00
2024: Day 1 complete
This commit is contained in:
parent
ebaffe961f
commit
56211245c6
2 changed files with 1049 additions and 0 deletions
1000
2024/day1.txt
Normal file
1000
2024/day1.txt
Normal file
File diff suppressed because it is too large
Load diff
49
2024/day1.zig
Normal file
49
2024/day1.zig
Normal file
|
@ -0,0 +1,49 @@
|
|||
const std = @import("std");
|
||||
const print = std.debug.print;
|
||||
|
||||
pub fn main() !void {
|
||||
const file = try std.fs.cwd().openFile("day1.txt", .{});
|
||||
defer file.close();
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
defer std.debug.assert(gpa.deinit() == .ok);
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
const stat = try file.stat();
|
||||
const input = try file.reader().readAllAlloc(allocator, stat.size);
|
||||
defer allocator.free(input);
|
||||
|
||||
var l1 = std.ArrayList(i32).init(allocator);
|
||||
var l2 = std.ArrayList(i32).init(allocator);
|
||||
defer l1.deinit();
|
||||
defer l2.deinit();
|
||||
|
||||
var lines = std.mem.tokenizeScalar(u8, input, '\n');
|
||||
while (lines.next()) |line| {
|
||||
var split = std.mem.tokenizeScalar(u8, line, ' ');
|
||||
try l1.append(try std.fmt.parseInt(i32, split.next().?, 10));
|
||||
try l2.append(try std.fmt.parseInt(i32, split.next().?, 10));
|
||||
}
|
||||
|
||||
// PART 1
|
||||
std.mem.sort(i32, l1.items, {}, std.sort.asc(i32));
|
||||
std.mem.sort(i32, l2.items, {}, std.sort.asc(i32));
|
||||
|
||||
var distance: u32 = 0;
|
||||
for (l1.items, l2.items) |item1, item2| {
|
||||
distance += @abs(item1 - item2);
|
||||
}
|
||||
|
||||
// PART 2
|
||||
var simScore: i32 = 0;
|
||||
for (l1.items) |item1| {
|
||||
var count: i32 = 0;
|
||||
for (l2.items) |item2| {
|
||||
if (item1 == item2) count += 1;
|
||||
}
|
||||
simScore += item1 * count;
|
||||
}
|
||||
|
||||
print("PART 1 - DISTANCE: {d}\n", .{distance});
|
||||
print("PART 2 - SIMILARITY: {d}\n", .{simScore});
|
||||
}
|
Loading…
Reference in a new issue