summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--day_05.zig6
-rw-r--r--day_07.zig129
-rw-r--r--inputs/day_07899
-rw-r--r--main.zig1
5 files changed, 1033 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 6285dbf..d99c67d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-ZIG_VERSION=0.11.0-dev.149+7733246d6
+ZIG_VERSION=0.11.0-dev.612+8ccb9a6ad
IMAGE_NAME=zigci
all: clean test fmt benchmark
diff --git a/day_05.zig b/day_05.zig
index 4550d76..c47856b 100644
--- a/day_05.zig
+++ b/day_05.zig
@@ -65,7 +65,7 @@ fn build_answer(allocator: std.mem.Allocator, crates: [][MAX_HEIGHT]u8) !Result
r.appendAssumeCapacity(crates[i][len(crates[i]) - 1]);
}
- return .{ .string = r.toOwnedSlice() };
+ return .{ .string = try r.toOwnedSlice() };
}
fn parse_input(allocator: std.mem.Allocator, input: []const u8) !Data {
@@ -86,7 +86,7 @@ fn parse_input(allocator: std.mem.Allocator, input: []const u8) !Data {
var r = try std.ArrayList([MAX_HEIGHT]u8).initCapacity(allocator, rows);
var i: usize = 0;
while (i < rows) : (i += 1) r.appendAssumeCapacity(std.mem.zeroes([MAX_HEIGHT]u8));
- break :blk r.toOwnedSlice();
+ break :blk try r.toOwnedSlice();
};
while (iter.next()) |line| : (floor -= 1) {
@@ -116,7 +116,7 @@ fn parse_input(allocator: std.mem.Allocator, input: []const u8) !Data {
command.To = try std.fmt.parseInt(u8, line_iter.next() orelse unreachable, 0) - 1;
try commands.append(command);
}
- return .{ .Commands = commands.toOwnedSlice(), .Crates = crates };
+ return .{ .Commands = try commands.toOwnedSlice(), .Crates = crates };
}
fn len(row: [MAX_HEIGHT]u8) usize {
diff --git a/day_07.zig b/day_07.zig
new file mode 100644
index 0000000..01c71a2
--- /dev/null
+++ b/day_07.zig
@@ -0,0 +1,129 @@
+const std = @import("std");
+const Result = @import("util/aoc.zig").Result;
+
+const NodeType = union(enum) { File, Dir };
+const Node = struct {
+ Name: []const u8,
+ Childs: struct {
+ len: usize = 0,
+ items: [300]?*Node = [_]?*Node{null} ** 300,
+ } = .{},
+ Parent: ?*Node = null,
+ Type: NodeType,
+ Size: usize = 0,
+
+ pub fn append(self: *Node, node: *Node) void {
+ self.Childs.items[self.Childs.len] = node;
+ self.Childs.len += 1;
+ }
+
+ fn cd(self: *Node, to: []const u8) *Node {
+ if (to.len == 1 and to[0] == '/') {
+ if (self.Parent == null) return self;
+ return self.Parent.?.cd("/");
+ }
+
+ if (std.mem.eql(u8, "..", to)) {
+ return self.Parent.?;
+ }
+
+ for (self.Childs.items[0..self.Childs.len]) |child| {
+ if (std.mem.eql(u8, child.?.Name, to)) return child.?;
+ }
+
+ unreachable;
+ }
+
+ fn size(self: Node) usize {
+ if (self.Type == .File) return self.Size;
+ var s: usize = 0;
+ for (self.Childs.items[0..self.Childs.len]) |child| s += child.?.size();
+ return s;
+ }
+};
+
+fn compute_puzzle_1(node: Node) usize {
+ var size: usize = 0;
+ for (node.Childs.items[0..node.Childs.len]) |child| {
+ if (child.?.Type != NodeType.Dir) continue;
+ if (child.?.size() <= 100000) size += child.?.size();
+ size += compute_puzzle_1(child.?.*);
+ }
+ return size;
+}
+
+fn compute_puzzle_2(node: Node, min: usize, target: usize) usize {
+ var new_min = min;
+ for (node.Childs.items[0..node.Childs.len]) |child| {
+ if (child.?.Type != NodeType.Dir) continue;
+ const child_size = child.?.size();
+ if (child_size < new_min and child_size >= target) new_min = child_size;
+ new_min = compute_puzzle_2(child.?.*, new_min, target);
+ }
+ return new_min;
+}
+
+fn build_tree(allocator: std.mem.Allocator, root: *Node, input: []const u8) !void {
+ var iter = std.mem.split(u8, input, "\n");
+
+ var current_root = &root;
+
+ while (iter.next()) |line| {
+ if (line[0] == '$') {
+ if (std.mem.eql(u8, line[2..4], "cd")) current_root = &current_root.*.cd(line[5..]);
+ continue;
+ }
+
+ var node = try allocator.create(Node);
+ node.* = .{
+ .Name = line[std.mem.indexOf(u8, line, " ").? + 1 ..],
+ .Parent = current_root.*,
+ .Type = blk: {
+ if (std.mem.eql(u8, line[0..3], "dir")) break :blk NodeType.Dir;
+ break :blk NodeType.File;
+ },
+ .Size = blk: {
+ break :blk std.fmt.parseInt(
+ usize,
+ line[0..std.mem.indexOf(u8, line, " ").?],
+ 0,
+ ) catch 0;
+ },
+ };
+ current_root.*.append(node);
+ }
+}
+
+pub fn puzzle_1(allocator: std.mem.Allocator, input: []const u8) Result {
+ var arena = std.heap.ArenaAllocator.init(allocator);
+ defer arena.deinit();
+
+ var node = Node{
+ .Name = "/",
+ .Type = .Dir,
+ };
+
+ build_tree(arena.allocator(), &node, input) catch unreachable;
+
+ return .{ .int = @intCast(i32, compute_puzzle_1(node)) };
+}
+
+pub fn puzzle_2(allocator: std.mem.Allocator, input: []const u8) Result {
+ var arena = std.heap.ArenaAllocator.init(allocator);
+ defer arena.deinit();
+
+ var node = Node{
+ .Name = "/",
+ .Type = .Dir,
+ };
+
+ build_tree(arena.allocator(), &node, input) catch unreachable;
+
+ const target: usize = 30000000 - (70000000 - node.size());
+
+ return .{ .int = @intCast(i32, compute_puzzle_2(
+ node,
+ node.size(),
+ target,
+ )) };
+}
diff --git a/inputs/day_07 b/inputs/day_07
new file mode 100644
index 0000000..f1d8ab1
--- /dev/null
+++ b/inputs/day_07
@@ -0,0 +1,899 @@
+$ cd /
+$ ls
+dir ctd
+80649 mwcj.pmh
+212527 nbb.ztq
+dir pgqmwn
+152170 scr.smr
+17637 snqcgbs.nhv
+dir tmw
+dir vtm
+$ cd ctd
+$ ls
+dir bblsqnwl
+dir gzcjrs
+dir pgqmwn
+dir qzgjp
+dir shmvmqv
+$ cd bblsqnwl
+$ ls
+dir rng
+$ cd rng
+$ ls
+dir jncpmzcs
+dir pttvmghm
+293353 qcjbfggw.tjj
+dir sgm
+$ cd jncpmzcs
+$ ls
+36126 tstwmrbr.bmr
+$ cd ..
+$ cd pttvmghm
+$ ls
+38802 ctttjn.nzr
+$ cd ..
+$ cd sgm
+$ ls
+dir djcbdbgr
+dir gqrr
+$ cd djcbdbgr
+$ ls
+254050 nbb.ztq
+$ cd ..
+$ cd gqrr
+$ ls
+168685 jgsqvf.tql
+302004 shmvmqv
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd gzcjrs
+$ ls
+319972 bwnjnmmh.wwd
+25495 fzthlhcp.nst
+291270 ghjc.nvf
+244664 jrlfb.fvz
+$ cd ..
+$ cd pgqmwn
+$ ls
+dir zpvthlgp
+$ cd zpvthlgp
+$ ls
+128092 dqvcqs.zpb
+140511 nvqsqtjw
+$ cd ..
+$ cd ..
+$ cd qzgjp
+$ ls
+23062 jgsqvf.tql
+254685 nbb.ztq
+dir pgqmwn
+320683 shmvmqv
+105368 shmvmqv.hmg
+60805 snqcgbs
+$ cd pgqmwn
+$ ls
+47287 gffvwmr.pbd
+$ cd ..
+$ cd ..
+$ cd shmvmqv
+$ ls
+80751 crtwwqb
+dir dbfm
+dir dhhghph
+dir pgqmwn
+195177 qnm
+dir qpbn
+dir rwmsqdw
+dir shmvmqv
+16133 shmvmqv.vwq
+187938 tmw
+$ cd dbfm
+$ ls
+dir gbpnjrt
+265813 glzz.mjv
+108147 nbb.ztq
+229253 nvqsqtjw
+85743 pgqmwn
+261375 qnm
+$ cd gbpnjrt
+$ ls
+179812 mtp.lnf
+234550 shmvmqv.qvq
+$ cd ..
+$ cd ..
+$ cd dhhghph
+$ ls
+dir ghmpb
+70514 zqv.ssn
+$ cd ghmpb
+$ ls
+132693 shmvmqv.csb
+$ cd ..
+$ cd ..
+$ cd pgqmwn
+$ ls
+dir hcbtbr
+200292 pgqmwn
+67530 sgm
+15442 snqcgbs
+$ cd hcbtbr
+$ ls
+249252 dqvcqs.zpb
+$ cd ..
+$ cd ..
+$ cd qpbn
+$ ls
+dir pmbw
+261142 qnm
+dir rsfh
+239788 sgm
+dir wfwl
+$ cd pmbw
+$ ls
+dir gwwdtzp
+dir jszzc
+32725 rnggjs.cbv
+dir sldv
+dir tptrlz
+$ cd gwwdtzp
+$ ls
+dir dlvbdn
+63066 dslb.mrp
+dir shmvmqv
+dir tzssf
+$ cd dlvbdn
+$ ls
+190731 nqv.csc
+$ cd ..
+$ cd shmvmqv
+$ ls
+223667 nbb.ztq
+$ cd ..
+$ cd tzssf
+$ ls
+27296 rlgswwzq.dgj
+dir tfdq
+206881 wrdqg.pfj
+$ cd tfdq
+$ ls
+26512 wsgh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd jszzc
+$ ls
+218701 qpz.hdm
+$ cd ..
+$ cd sldv
+$ ls
+dir hsbzqtml
+3895 jgsqvf.tql
+181815 nbb.ztq
+294048 shmvmqv.fcm
+dir snqcgbs
+dir tmw
+203484 zfpjq.pvn
+dir zlpwdp
+$ cd hsbzqtml
+$ ls
+dir shmvmqv
+$ cd shmvmqv
+$ ls
+103536 nbb.ztq
+32635 wmc
+$ cd ..
+$ cd ..
+$ cd snqcgbs
+$ ls
+95112 dch
+$ cd ..
+$ cd tmw
+$ ls
+dir dplm
+275451 hsr.zhn
+9766 qnm
+177383 ztbmqjqb.hwj
+$ cd dplm
+$ ls
+277671 dqvcqs.zpb
+$ cd ..
+$ cd ..
+$ cd zlpwdp
+$ ls
+315030 snqcgbs.mlz
+$ cd ..
+$ cd ..
+$ cd tptrlz
+$ ls
+dir jfflz
+154685 qbbpstff.fcs
+dir sjjgljg
+dir zsssqcsb
+$ cd jfflz
+$ ls
+1330 fvldwzn.dbb
+227153 nbb.ztq
+$ cd ..
+$ cd sjjgljg
+$ ls
+295745 frjnfsgt.fmq
+105131 jtbltpv.vhm
+174279 pgqmwn
+104317 sgm
+$ cd ..
+$ cd zsssqcsb
+$ ls
+246361 bnzsv.dqf
+dir ggcvqf
+dir htqpwzw
+249833 jgsqvf.tql
+dir lbtjth
+dir lcfwb
+306768 mmd.gjw
+121112 pgqmwn
+dir sgm
+dir shmvmqv
+dir snqcgbs
+55055 tmw.rqm
+$ cd ggcvqf
+$ ls
+46573 fcwznd
+$ cd ..
+$ cd htqpwzw
+$ ls
+dir bmzvdzsv
+193713 fpp.vwd
+39898 mfjcnl.szn
+65370 msljctr
+10685 ppgzbc.trg
+94843 shmvmqv.hqn
+dir thfdg
+$ cd bmzvdzsv
+$ ls
+74898 pgqmwn.wwh
+$ cd ..
+$ cd thfdg
+$ ls
+dir cpsgcll
+$ cd cpsgcll
+$ ls
+244683 gdfw
+17203 tmw
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd lbtjth
+$ ls
+dir snqcgbs
+$ cd snqcgbs
+$ ls
+122394 grhbhpw.fsl
+55324 jgsqvf.tql
+$ cd ..
+$ cd ..
+$ cd lcfwb
+$ ls
+138053 nvqsqtjw
+$ cd ..
+$ cd sgm
+$ ls
+314313 dqvcqs.zpb
+146274 fftqvs.ltt
+225372 jtq.rzq
+85697 rctzgq.rsr
+dir sgm
+262221 tqpng
+$ cd sgm
+$ ls
+dir cmvvd
+277366 mhs.tpn
+77975 nbb.ztq
+160966 qrwbvbd.ghf
+55949 snqcgbs.qzc
+$ cd cmvvd
+$ ls
+28054 lfsvfsl
+165671 tmw.zwh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd shmvmqv
+$ ls
+51884 bsbwrjnz.dmt
+231236 jfmsg.mts
+dir qpb
+256063 zhmw
+65512 zrnhr
+$ cd qpb
+$ ls
+228289 dqvcqs.zpb
+$ cd ..
+$ cd ..
+$ cd snqcgbs
+$ ls
+dir mnwgf
+$ cd mnwgf
+$ ls
+178834 qgnwvlfd.cps
+255140 sls.mnw
+9546 tvhbm
+281615 vntrb
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd rsfh
+$ ls
+310413 snqcgbs
+$ cd ..
+$ cd wfwl
+$ ls
+dir fmvg
+129025 jgsqvf.tql
+$ cd fmvg
+$ ls
+276100 nvqsqtjw
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd rwmsqdw
+$ ls
+46554 qzdmgl
+55785 shmvmqv
+127982 tfffrg.sbz
+$ cd ..
+$ cd shmvmqv
+$ ls
+dir ntstz
+dir vprlz
+$ cd ntstz
+$ ls
+304801 nvqsqtjw
+28969 wzfb.fjv
+$ cd ..
+$ cd vprlz
+$ ls
+dir cmmtnt
+dir shmvmqv
+$ cd cmmtnt
+$ ls
+270129 shmvmqv
+$ cd ..
+$ cd shmvmqv
+$ ls
+dir sgm
+$ cd sgm
+$ ls
+287889 hghh.mwt
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd pgqmwn
+$ ls
+85368 qnm
+$ cd ..
+$ cd tmw
+$ ls
+dir fnpjwg
+dir gdt
+dir ggs
+dir llh
+69470 nvqsqtjw
+dir sgm
+$ cd fnpjwg
+$ ls
+161820 dndq.tfl
+dir dwmcs
+205155 tdccsw.qlq
+165352 vvmnpj
+$ cd dwmcs
+$ ls
+121466 dqvcqs.zpb
+274171 qbbqmf.ltf
+$ cd ..
+$ cd ..
+$ cd gdt
+$ ls
+dir cnvtrw
+dir gdcvdsv
+dir hcn
+dir hsmhn
+dir jnhqz
+78446 pgqmwn.mwr
+dir qwfl
+dir snqcgbs
+$ cd cnvtrw
+$ ls
+dir hfvzm
+$ cd hfvzm
+$ ls
+305880 tmw.lvw
+$ cd ..
+$ cd ..
+$ cd gdcvdsv
+$ ls
+69690 jhscd
+$ cd ..
+$ cd hcn
+$ ls
+166775 dqvcqs.zpb
+294325 nvqsqtjw
+$ cd ..
+$ cd hsmhn
+$ ls
+172897 lrjf.dnw
+dir npgr
+225227 pbcmjg.rhf
+234530 pgqmwn.cqb
+dir qlz
+dir snqcgbs
+52808 tnntq.wjt
+$ cd npgr
+$ ls
+141280 qnm
+64422 rwv
+$ cd ..
+$ cd qlz
+$ ls
+258070 nbb.ztq
+$ cd ..
+$ cd snqcgbs
+$ ls
+3723 frcr.jmn
+109486 sgm.nsw
+114054 shmvmqv.frr
+142024 snqcgbs
+$ cd ..
+$ cd ..
+$ cd jnhqz
+$ ls
+dir gpztwnqm
+dir nwpqbf
+dir sgm
+dir tmw
+$ cd gpztwnqm
+$ ls
+303103 bjbpj
+281422 hgp
+284044 jgsqvf.tql
+dir qzts
+133248 sgm
+$ cd qzts
+$ ls
+2428 dqvcqs.zpb
+283206 hzs.smg
+dir lmlw
+$ cd lmlw
+$ ls
+dir sjrfmpc
+$ cd sjrfmpc
+$ ls
+164708 nbb.ztq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd nwpqbf
+$ ls
+192033 dqvcqs.zpb
+298220 jqd.bfh
+dir mhtsg
+100921 snqcgbs
+dir zbtb
+$ cd mhtsg
+$ ls
+140813 cgcn.rjn
+$ cd ..
+$ cd zbtb
+$ ls
+201213 gjglrmf.dzv
+dir grbl
+81636 pgqmwn.zfm
+265992 pwhbflzn.sch
+dir twjrlzpj
+$ cd grbl
+$ ls
+82894 jgsqvf.tql
+$ cd ..
+$ cd twjrlzpj
+$ ls
+304952 cwhtqv.zvh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd sgm
+$ ls
+56329 ftfvfpz.srv
+3875 nbb.ztq
+4766 shmvmqv.fdt
+247272 vbw.hsv
+$ cd ..
+$ cd tmw
+$ ls
+dir ddbvd
+$ cd ddbvd
+$ ls
+83200 tnrwdc.dzm
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qwfl
+$ ls
+dir bcfnz
+23440 nvqsqtjw
+dir pwb
+206984 shmvmqv.fjb
+35453 snqcgbs
+297136 snqcgbs.fnr
+dir tmw
+181689 wcbdwwq
+$ cd bcfnz
+$ ls
+dir fnrclwn
+dir fslh
+258656 gtbhdpt.pth
+238261 psbsmvpf.lmt
+dir sgm
+$ cd fnrclwn
+$ ls
+30297 crhjfzlp.gtb
+297557 gvvnbmt.spr
+189301 nvqsqtjw
+45159 sndmlvw.lsb
+259295 sqd
+$ cd ..
+$ cd fslh
+$ ls
+246662 bpvcj.hnf
+$ cd ..
+$ cd sgm
+$ ls
+dir jpr
+dir tmw
+dir wscvtrd
+$ cd jpr
+$ ls
+49005 dqvcqs.zpb
+$ cd ..
+$ cd tmw
+$ ls
+201387 sgm
+$ cd ..
+$ cd wscvtrd
+$ ls
+77175 blczlqf.pnv
+207393 shmvmqv.qbs
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd pwb
+$ ls
+89451 bqcmzzf
+207548 gfwgnft.php
+dir gsn
+dir jtvpnvz
+144792 nbb.ztq
+dir nzzqj
+214209 pgqmwn.sjv
+236845 pzvjqqvz
+dir sgm
+dir snqcgbs
+dir vfvttj
+$ cd gsn
+$ ls
+93490 snqcgbs.fbv
+$ cd ..
+$ cd jtvpnvz
+$ ls
+dir fdnvff
+208857 gpvwzhd
+229559 rnc
+225519 snqcgbs
+162969 tmw
+$ cd fdnvff
+$ ls
+286944 dztqqtf.nmp
+dir rwc
+181737 snqcgbs
+$ cd rwc
+$ ls
+115290 nbb.ztq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd nzzqj
+$ ls
+154210 jgsqvf.tql
+dir sgm
+182438 snqcgbs.wpg
+dir zpvghr
+$ cd sgm
+$ ls
+123163 rjgc.ccm
+dir rqn
+291622 tflv.pqc
+$ cd rqn
+$ ls
+220655 rtbrwmjn.clj
+$ cd ..
+$ cd ..
+$ cd zpvghr
+$ ls
+288859 dqvcqs.zpb
+218036 hfdcrjp
+$ cd ..
+$ cd ..
+$ cd sgm
+$ ls
+107183 sgm.nsf
+225832 sjwn
+dir tgf
+$ cd tgf
+$ ls
+258766 nvqsqtjw
+$ cd ..
+$ cd ..
+$ cd snqcgbs
+$ ls
+56144 whjpg.ffz
+$ cd ..
+$ cd vfvttj
+$ ls
+dir ptmggmsl
+$ cd ptmggmsl
+$ ls
+dir psd
+dir wdzptvjc
+$ cd psd
+$ ls
+121637 dqvcqs.zpb
+$ cd ..
+$ cd wdzptvjc
+$ ls
+dir shmvmqv
+$ cd shmvmqv
+$ ls
+23754 dqmrj.fhh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd tmw
+$ ls
+17390 hqz
+dir jnsb
+31072 nvqsqtjw
+dir tmw
+144511 vvwjcqr.rtz
+$ cd jnsb
+$ ls
+265907 snqcgbs.swh
+$ cd ..
+$ cd tmw
+$ ls
+dir gfncpvw
+$ cd gfncpvw
+$ ls
+dir ctvwgtlh
+$ cd ctvwgtlh
+$ ls
+29825 ccjvs.qqq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd snqcgbs
+$ ls
+230355 ccl.ddg
+dir csfdmhmb
+dir drpgbvzf
+313060 hhcpw.nbs
+dir pfpn
+dir ptwnpdnc
+273250 qfsnmbm
+dir shmvmqv
+244767 tmw.zjg
+$ cd csfdmhmb
+$ ls
+50690 nbb.ztq
+282078 vzrw
+$ cd ..
+$ cd drpgbvzf
+$ ls
+dir bhwvqf
+803 dqvcqs.zpb
+49859 hhw.gpd
+180202 nbb.ztq
+dir nfh
+64808 pgqmwn
+276746 qnm
+dir shmvmqv
+dir tmw
+$ cd bhwvqf
+$ ls
+76667 qcgpdwm.sbs
+$ cd ..
+$ cd nfh
+$ ls
+23774 jgsqvf.tql
+34652 pnp.lvp
+120264 zvp
+$ cd ..
+$ cd shmvmqv
+$ ls
+47748 cswm.dsr
+dir pgqmwn
+$ cd pgqmwn
+$ ls
+109587 qnm
+$ cd ..
+$ cd ..
+$ cd tmw
+$ ls
+105578 snqcgbs
+$ cd ..
+$ cd ..
+$ cd pfpn
+$ ls
+194628 wgc
+$ cd ..
+$ cd ptwnpdnc
+$ ls
+142456 rvwtfvr.tsc
+$ cd ..
+$ cd shmvmqv
+$ ls
+118642 hgqlrt.btl
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ggs
+$ ls
+231223 hmtp.djc
+$ cd ..
+$ cd llh
+$ ls
+dir hbq
+dir svt
+$ cd hbq
+$ ls
+157243 fhpsb
+36981 rdbqnbfr.cwz
+282257 tmw.wwv
+$ cd ..
+$ cd svt
+$ ls
+161395 sgm.hdl
+$ cd ..
+$ cd ..
+$ cd sgm
+$ ls
+247276 fss
+dir pgqmwn
+68084 pgqmwn.vfl
+28475 sgm.swb
+dir shmvmqv
+223438 snqcgbs.bng
+$ cd pgqmwn
+$ ls
+134640 dqvcqs.zpb
+dir nrdd
+25431 nvqsqtjw
+149751 qhzqw
+dir vfmcjhwz
+dir zlfhr
+$ cd nrdd
+$ ls
+dir pgqmwn
+$ cd pgqmwn
+$ ls
+57090 nfbd
+$ cd ..
+$ cd ..
+$ cd vfmcjhwz
+$ ls
+24256 fdzfwfh.rcv
+$ cd ..
+$ cd zlfhr
+$ ls
+20504 fgbpndj.wgm
+181769 qnm
+$ cd ..
+$ cd ..
+$ cd shmvmqv
+$ ls
+208988 nbb.ztq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vtm
+$ ls
+dir lqvjm
+dir msmtcnsj
+dir qmtgdn
+dir tmw
+$ cd lqvjm
+$ ls
+239772 hnj.zqf
+$ cd ..
+$ cd msmtcnsj
+$ ls
+48711 clfl.fsl
+245929 ddh.gdq
+dir fvlb
+241040 nvqsqtjw
+dir shmvmqv
+305567 vdzzqpz.jfs
+$ cd fvlb
+$ ls
+25669 ddz.tbc
+$ cd ..
+$ cd shmvmqv
+$ ls
+283905 nvqsqtjw
+$ cd ..
+$ cd ..
+$ cd qmtgdn
+$ ls
+246479 pgqmwn
+35386 rtf.cdp
+217551 sgm.mrz
+$ cd ..
+$ cd tmw
+$ ls
+dir qfggmdvd
+dir tlv
+dir tmw
+$ cd qfggmdvd
+$ ls
+288091 djwfq.wzc
+37383 pwnzdj
+214119 shmvmqv.wlg
+29747 tmw.ntw
+146556 zgbd
+$ cd ..
+$ cd tlv
+$ ls
+142924 grj.qhw
+210672 qhmn
+209554 zbcqcb.mhn
+141215 zjmrgw.wlc
+$ cd ..
+$ cd tmw
+$ ls
+dir fwsgn
+dir tmw
+$ cd fwsgn
+$ ls
+dir qbbhrst
+306142 sgm
+$ cd qbbhrst
+$ ls
+dir sgm
+dir srbn
+$ cd sgm
+$ ls
+80992 bbvqrcf.chp
+$ cd ..
+$ cd srbn
+$ ls
+161382 nvqsqtjw
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd tmw
+$ ls
+219508 dqvcqs.zpb
+dir tmw
+134434 wbvvgqwn.bmh
+$ cd tmw
+$ ls
+209116 pgqmwn
diff --git a/main.zig b/main.zig
index 7b5cee0..949f342 100644
--- a/main.zig
+++ b/main.zig
@@ -12,6 +12,7 @@ const t = [_]struct {
.{ .day = @import("day_04.zig"), .input = @embedFile("inputs/day_04"), .expect = &[_]Result{ .{ .int = 483 }, .{ .int = 874 } } },
.{ .day = @import("day_05.zig"), .input = @embedFile("inputs/day_05"), .expect = &[_]Result{ .{ .string = "SHMSDGZVC" }, .{ .string = "VRZGHDFBQ" } } },
.{ .day = @import("day_06.zig"), .input = @embedFile("inputs/day_06"), .expect = &[_]Result{ .{ .int = 1896 }, .{ .int = 3452 } } },
+ .{ .day = @import("day_07.zig"), .input = @embedFile("inputs/day_07"), .expect = &[_]Result{ .{ .int = 1427048 }, .{ .int = 2940614 } } },
};
pub fn main() !void {