From baae54102946568cb2209d388739a81b26e37b68 Mon Sep 17 00:00:00 2001 From: Orfeas <38209077+0xfea5@users.noreply.github.com> Date: Sat, 9 Dec 2023 15:59:07 +0200 Subject: day9 --- day09/example.txt | 3 +++ day09/solution.zig | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 day09/example.txt create mode 100644 day09/solution.zig (limited to 'day09') diff --git a/day09/example.txt b/day09/example.txt new file mode 100644 index 0000000..539a763 --- /dev/null +++ b/day09/example.txt @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 diff --git a/day09/solution.zig b/day09/solution.zig new file mode 100644 index 0000000..e445c19 --- /dev/null +++ b/day09/solution.zig @@ -0,0 +1,57 @@ +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 evaluate(list: []const i64) struct { i64, i64 } { + if (mem.allEqual(i64, list, 0)) { + return .{ 0, 0 }; + } + + const n = list.len; + var derivative = ArrayList(i64).init(allocator); + defer derivative.deinit(); + + for (list[0 .. n - 1], list[1..n]) |curr, next| { + derivative.append(next - curr) catch unreachable; + } + + const e = evaluate(derivative.items); + return .{ list[n - 1] + e, list[0] - e }; +} + +pub fn solve(listNums: ArrayList(ArrayList(i64))) void { + var part1: i64 = 0; + var part2: i64 = 0; + + for (listNums.items) |list| { + const e = evaluate(list.items); + part1 += e[0]; + part2 += e[1]; + } + + print("{d}\n{d}\n", .{ part1, part2 }); +} + +pub fn main() !void { + var splitLines = mem.splitScalar(u8, fin, '\n'); + var listNums = ArrayList(ArrayList(i64)).init(allocator); + + while (splitLines.next()) |line| { + var listText = mem.tokenizeScalar(u8, line, ' '); + + var row = ArrayList(i64).init(allocator); + while (listText.next()) |n| { + try row.append(try std.fmt.parseInt(i64, n, 10)); + } + + try listNums.append(row); + } + solve(listNums); +} -- cgit v1.2.3