IISEBR52NLKVBJJEBSYWXI4LG2Y3E5GPNZJ66CA26K6IBXP3DOHQC $ cd /$ lsdir dpbwgdir dvwfscwdir hccpldir jsgbgdir lhjmzsl63532 mwvbpw.mmg239480 npjdir pngsdir qhs303649 shvgmwn.vhv236905 sjrrgd.phhdir sntcpdir sqs$ cd dpbwg$ lsdir dgh100731 dpbwgdir rpwnv$ cd dgh$ ls197049 lhjmzsl.hzj$ cd ..$ cd rpwnv$ ls10702 qsgv.fmf$ cd ..$ cd ..$ cd dvwfscw$ lsdir bvgdir fbfjs115450 gjftb.mgddir gsmnprgzdir hdwdcvvdir mhjtrlqz75437 qsctddrw171722 qsgv.zqz$ cd bvg$ ls56335 cgtzb.szt139481 shvgmwn.vhv255200 wzqlgr.mhl$ cd ..$ cd fbfjs$ ls252977 hmcj256083 mbgfn.pmhdir qsgv$ cd qsgv$ ls271506 dchsdfz.bbg202650 hmcj32623 lqgmfcp57614 mgp.fbn220895 qwzqrrq.wjf$ cd ..$ cd ..$ cd gsmnprgz$ lsdir dzcsldzwdir hrjmfddir lcwvdir sdp62355 zrncdmd.lmj$ cd dzcsldzw$ lsdir hmcj$ cd hmcj$ ls151947 hgtzldbg$ cd ..$ cd ..$ cd hrjmfd$ lsdir drjlhbqf65599 npj$ cd drjlhbqf$ ls263623 hzfmzs.mlj13866 npj173713 wtnf.qps$ cd ..$ cd ..$ cd lcwv$ ls44150 hmcj.lds200694 mpbb$ cd ..$ cd sdp$ lsdir gcwjjdir qzdczvwn$ cd gcwjj$ ls149603 qsgv.srr$ cd ..$ cd qzdczvwn$ lsdir gnvbm291187 hmcj.rgmdir msdtdir mwvbpwdir shpr$ cd gnvbm$ ls259516 dpbwg120868 mpbbdir vqrcd$ cd vqrcd$ ls306804 fqqg34290 mtctcdgd.nmb$ cd ..$ cd ..$ cd msdt$ ls168438 mpbb67435 nbqcrdjs$ cd ..$ cd mwvbpw$ lsdir btzqzvbl308719 npj$ cd btzqzvbl$ ls177311 bdnrf.jtw122356 qwhmd.vcd169153 vzzzccg.hlb$ cd ..$ cd ..$ cd shpr$ ls290591 nblzc.nmp$ cd ..$ cd ..$ cd ..$ cd ..$ cd hdwdcvv$ ls96864 hmcj.tjn$ cd ..$ cd mhjtrlqz$ lsdir bzrbsfjp238772 fpggqqjdir hqzgs20155 shvgmwn.vhv$ cd bzrbsfjp$ ls313691 fnscbhfc17630 llwfdzgg.bspdir lthr$ cd lthr$ ls237053 bhbbzt.bmt$ cd ..$ cd ..$ cd hqzgs$ ls295258 gllsgr.nnz70743 ptpqddir rnmsdpmj205022 rpqh.rpn158287 tsm.tdq154025 wmfwr.bcm$ cd rnmsdpmj$ ls218043 dpbwg.mls149072 mbgfn.pmh89388 mwvbpw.qfm57207 rszcvm.mqc$ cd ..$ cd ..$ cd ..$ cd ..$ cd hccpl$ lsdir blqdjhdir hfqwdir qsgv$ cd blqdjh$ lsdir fbpg$ cd fbpg$ ls231357 dpbwg$ cd ..$ cd ..$ cd hfqw$ ls210898 fjblghm.gtg286252 hmcj.dgz258768 mpbb225743 qsgv.pqf191717 shvgmwn.vhv$ cd ..$ cd qsgv$ lsdir bslqprdir dpbwgdir lhjmzsl210707 npj64435 qhpnrbhqdir rpj301426 shvgmwn.vhvdir stbgbrwdir vhzmg$ cd bslqpr$ ls4365 dpbwgdir fpjdir lhjmzsldir lncmtdir mwvbpw35725 ncbjtpcb.svfdir njhsmbdir rjzsddlw41533 shvgmwn.vhv$ cd fpj$ ls88146 dpbwg$ cd ..$ cd lhjmzsl$ ls57400 fzngdsh.sbn198711 mnqz.npt$ cd ..$ cd lncmt$ ls192228 qsgv.jss$ cd ..$ cd mwvbpw$ ls65217 hmcj.drs$ cd ..$ cd njhsmb$ ls157177 dpbwg.wsl10919 jhfs$ cd ..$ cd rjzsddlw$ lsdir cftpdir flcfwmldir vpdbl$ cd cftp$ ls89075 dpbwg57259 mbgfn.pmh237771 zwglrhh$ cd ..$ cd flcfwml$ ls51498 pbbgmqn.gfg$ cd ..$ cd vpdbl$ ls98690 npj$ cd ..$ cd ..$ cd ..$ cd dpbwg$ lsdir wlmdbjh$ cd wlmdbjh$ lsdir pmldd245468 rdgldw.tzb$ cd pmldd$ ls145032 mwvbpw.tpc$ cd ..$ cd ..$ cd ..$ cd lhjmzsl$ ls233642 dpbwg.tbqdir frsggjldir hmcjdir jmhzlqdir jvdtpzd251765 npj169647 shvgmwn.vhv$ cd frsggjl$ lsdir dshvdir fqvpcdir lhjmzsl313045 npjdir rngqmwgr$ cd dshv$ lsdir pptfqn85609 wpgzdir zfmqls$ cd pptfqn$ ls258817 mtctcdgd.nmb39899 npj$ cd ..$ cd zfmqls$ ls119006 hlw.mzg295107 wstvdqn.wgw$ cd ..$ cd ..$ cd fqvpc$ lsdir pqpf$ cd pqpf$ ls312566 mpbb$ cd ..$ cd ..$ cd lhjmzsl$ ls157261 dpbwg.bgc76700 mpbb$ cd ..$ cd rngqmwgr$ ls42626 dpbwg.dtt78765 gjsnmzn.fzb$ cd ..$ cd ..$ cd hmcj$ ls166183 jntzndir qsgv254851 rbcgrdr.vqp$ cd qsgv$ ls256449 dhj.mrm49207 fbrhl69922 lhjmzsl121778 tpdvnb$ cd ..$ cd ..$ cd jmhzlq$ lsdir bbpqsf245813 ftw.jwq$ cd bbpqsf$ ls169373 mwvbpw.tjt$ cd ..$ cd ..$ cd jvdtpzd$ lsdir brflndir dpbwg263586 fsqzfhj.bzh85956 lhjmzsldir mwvbpwdir tcgwhp91473 vjgt.twz200413 zlnnrrpn.qqd$ cd brfln$ ls65066 fpvnm$ cd ..$ cd dpbwg$ lsdir jtqwgcdir lrdjdqn281885 mpbb$ cd jtqwgc$ ls219022 spbqn$ cd ..$ cd lrdjdqn$ ls116830 hmcj.ptrdir mwvbpw$ cd mwvbpw$ ls251737 ccqlb$ cd ..$ cd ..$ cd ..$ cd mwvbpw$ ls226329 fztjpfb$ cd ..$ cd tcgwhp$ lsdir grmsl$ cd grmsl$ lsdir hmcj197995 wzqlr.fqj$ cd hmcj$ ls239775 mbgfn.pmhdir rrvccjp95381 shvgmwn.vhv$ cd rrvccjp$ lsdir qsgv$ cd qsgv$ ls192956 mtctcdgd.nmb$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd rpj$ lsdir bwcdir ctjwjlzcdir dpbwgdir lhjmzsl249767 npjdir wqmlz$ cd bwc$ ls56181 hmcj.dhd105111 hvw63869 rqw.srq8030 shvgmwn.vhvdir stff$ cd stff$ lsdir gsjsc$ cd gsjsc$ ls514 mtctcdgd.nmb$ cd ..$ cd ..$ cd ..$ cd ctjwjlzc$ ls39823 qjgnjm.hzn$ cd ..$ cd dpbwg$ lsdir lhqrjr$ cd lhqrjr$ ls179949 tmvl.zqf$ cd ..$ cd ..$ cd lhjmzsl$ ls305735 shvgmwn.vhv$ cd ..$ cd wqmlz$ ls141757 fstftggh$ cd ..$ cd ..$ cd stbgbrw$ ls196003 dpbwg.shsdir gbr104091 hmcj232145 lhjmzsl.nncdir lhvdir qqqbtpq51208 qsgv.dbm235090 vbpzgnrdir vqmnsdrt$ cd gbr$ ls101809 npj121922 pcqrmmlt.ghh125915 ptffhc128293 wdz.nsd$ cd ..$ cd lhv$ ls75506 qtwlnvv.nbm28413 rbwbp$ cd ..$ cd qqqbtpq$ ls96300 gdf$ cd ..$ cd vqmnsdrt$ ls146229 mwvbpw.qrc189540 plldv.vtvdir rtng$ cd rtng$ ls42730 hrbs.zpc$ cd ..$ cd ..$ cd ..$ cd vhzmg$ lsdir dcmjvhttdir dpbwg$ cd dcmjvhtt$ ls85508 hhlctr.bbs296657 lhjmzsl.zjt255803 mbgfn.pmh170803 mtctcdgd.nmb$ cd ..$ cd dpbwg$ ls156142 hmcjdir lhjmzsl$ cd lhjmzsl$ ls13590 mtctcdgd.nmb$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd jsgbg$ ls202682 hmcj.tbl$ cd ..$ cd lhjmzsl$ ls197308 lhjmzsl$ cd ..$ cd pngs$ ls115979 hfpzqf.hjwdir lhjmzsl125414 mpbbdir mwbffchr$ cd lhjmzsl$ ls55108 hwhsjr$ cd ..$ cd mwbffchr$ ls249138 czv.lgd$ cd ..$ cd ..$ cd qhs$ ls108106 ccmhjzp.ppf197911 shvgmwn.vhv$ cd ..$ cd sntcp$ lsdir cvgtwsbwdir dpbwgdir dqbzfcqdir gfvtsjmzdir ljsmjspdir mwvbpwdir phfqzwpdir rpsnfndldir rrqwcbqmdir rtvdir vnvftdir vqcvbncpdir vsgjds$ cd cvgtwsbw$ lsdir bprbrdir bpwdir dpbwgdir jvjsdir mwvbpwdir nbfzndir pcrdir rhgltw$ cd bprbr$ ls126107 dpbwg.jqq140931 ljhc.gsm120326 pnjvdir wbrb$ cd wbrb$ ls28887 ccr.rvddir gwfpgws77898 mwvbpw.qrc280487 pbfbtb.qjp$ cd gwfpgws$ ls205904 dgm313203 vpgzr.jfw$ cd ..$ cd ..$ cd ..$ cd bpw$ lsdir lgstpgrn173334 npj$ cd lgstpgrn$ lsdir rngr$ cd rngr$ ls291856 czjz.fzp246123 mpbb200301 qqfvpnz$ cd ..$ cd ..$ cd ..$ cd dpbwg$ ls265739 mtctcdgd.nmbdir mwvbpw76505 ntjn.mnp227157 pqznms312879 qzlmsht$ cd mwvbpw$ ls144523 dpbwg.lgr39441 mmtrnzqw.mnv285772 mpbb306936 rpmgcmqd.qht$ cd ..$ cd ..$ cd jvjs$ ls51134 lsnvhd.gsj$ cd ..$ cd mwvbpw$ ls125428 hmcj.bvd40162 npj117658 pmzfj.crj$ cd ..$ cd nbfzn$ ls11429 mwvbpw.swl5582 qsgv.jrm$ cd ..$ cd pcr$ lsdir dpbwg95858 mtctcdgd.nmb$ cd dpbwg$ lsdir wmsb$ cd wmsb$ ls154498 npj$ cd ..$ cd ..$ cd ..$ cd rhgltw$ ls188447 qsgv.rzs$ cd ..$ cd ..$ cd dpbwg$ ls261326 cjfszwr88528 glp.fgcdir lhjmzsl270470 shvgmwn.vhv310081 vdhmgbdir wsc$ cd lhjmzsl$ ls245410 dnnfljbs$ cd ..$ cd wsc$ lsdir lhjmzsl311302 mbs.tqc309985 mpbbdir qgpqzr20812 vhcc.wpw$ cd lhjmzsl$ lsdir dpbwg$ cd dpbwg$ ls273340 fmvbcphl.crp$ cd ..$ cd ..$ cd qgpqzr$ lsdir fdwgdhrf$ cd fdwgdhrf$ ls275421 mtctcdgd.nmb$ cd ..$ cd ..$ cd ..$ cd ..$ cd dqbzfcq$ ls30930 njnz$ cd ..$ cd gfvtsjmz$ ls290134 mbgfn.pmh154689 vql$ cd ..$ cd ljsmjsp$ ls59894 hwggw.rpd26336 mbgfn.pmhdir mvzchpqdir mwvbpw122061 zlcr.jsw$ cd mvzchpq$ ls294618 lhjmzsl.bqmdir mwvbpw204294 nljhbh.cfc79337 ntvt.dbw$ cd mwvbpw$ lsdir njwcqcjh309971 nqdv.vmp$ cd njwcqcjh$ ls155159 mtctcdgd.nmb$ cd ..$ cd ..$ cd ..$ cd mwvbpw$ ls43451 lhjmzsl.vjt$ cd ..$ cd ..$ cd mwvbpw$ ls3144 phvjzs.prf$ cd ..$ cd phfqzwp$ lsdir hmcjdir hnnrw196279 lhjmzsl90948 mwvbpw.hvm275082 shvgmwn.vhv$ cd hmcj$ ls4346 mtctcdgd.nmb$ cd ..$ cd hnnrw$ lsdir lhjmzsl103070 qsbrf.tpvdir rdf$ cd lhjmzsl$ ls158692 dpbwg.bvl$ cd ..$ cd rdf$ lsdir gpjdir lbgpm$ cd gpj$ ls136508 shvgmwn.vhv$ cd ..$ cd lbgpm$ ls154457 ccpvr232065 lhjmzsl43787 npj189920 rpgmvv96362 tlmvpc$ cd ..$ cd ..$ cd ..$ cd ..$ cd rpsnfndl$ lsdir pcbtmcwf$ cd pcbtmcwf$ lsdir qsgv$ cd qsgv$ ls45662 npj$ cd ..$ cd ..$ cd ..$ cd rrqwcbqm$ lsdir vjm$ cd vjm$ ls263137 npj$ cd ..$ cd ..$ cd rtv$ lsdir lhjmzsldir pcwsndir qsgvdir vvzbsg$ cd lhjmzsl$ lsdir qzsjhsfn$ cd qzsjhsfn$ ls26909 mbgfn.pmh$ cd ..$ cd ..$ cd pcwsn$ ls160033 ftz.nbg145165 wgdjsgsb.hhm$ cd ..$ cd qsgv$ lsdir jqm136209 mbgfn.pmh79664 mghdlnh.chv$ cd jqm$ ls222831 npj$ cd ..$ cd ..$ cd vvzbsg$ ls84246 dpbwg.tsq$ cd ..$ cd ..$ cd vnvft$ lsdir crqrldir scdvzsd$ cd crqrl$ ls13185 dpbwg.twz109021 qcdqnhg.jjj$ cd ..$ cd scdvzsd$ lsdir hmcj$ cd hmcj$ ls252155 npj$ cd ..$ cd ..$ cd ..$ cd vqcvbncp$ ls72128 crnhbdir ddzdir dvhzvdndir ffsbcmgdir gfsdir jghlbdir llqdir pvndir rvqmmjgr$ cd ddz$ ls232302 gdfqpnj.nhf274940 lhjmzsl.mzv286217 mpbb$ cd ..$ cd dvhzvdn$ ls273183 cfnqn.qpz$ cd ..$ cd ffsbcmg$ ls6544 mtctcdgd.nmb52511 wndzt.lqb$ cd ..$ cd gfs$ ls228312 mwvbpw.tdjdir rqjrfzgt62100 shc.rtj313984 szsplzq.dpddir tqtnp$ cd rqjrfzgt$ ls296460 bvp272324 mbgfn.pmh221044 npj110232 qvcszzv$ cd ..$ cd tqtnp$ ls98376 tzwh212247 wzjj.scp$ cd ..$ cd ..$ cd jghlb$ lsdir ddrmsv$ cd ddrmsv$ ls252143 mbgfn.pmh$ cd ..$ cd ..$ cd llq$ lsdir lhjmzsl67341 mbgfn.pmh155159 npjdir qsgvdir vcvnzc$ cd lhjmzsl$ ls151930 ssldrsf.mzm$ cd ..$ cd qsgv$ ls233702 ztdmtqb.mhf$ cd ..$ cd vcvnzc$ ls168179 lhjmzsl.cwf$ cd ..$ cd ..$ cd pvn$ ls240160 lbd.slf$ cd ..$ cd rvqmmjgr$ ls24809 gwgcrzp.zhjdir hmcjdir lhjmzsldir mwvbpw121997 nbmf77886 ntpdir qcqrgdm$ cd hmcj$ ls126073 dpbwg.lhhdir jchccghvdir lhjmzsl144075 qsgv.lbw288076 swrngbsq.qzw$ cd jchccghv$ ls310277 mpbb$ cd ..$ cd lhjmzsl$ ls193576 bwsz.crv16002 mbgfn.pmh57961 mtctcdgd.nmb$ cd ..$ cd ..$ cd lhjmzsl$ lsdir bsfwmczdir dpbwg121640 mwvbpwdir pmrfvzwdir qsgv$ cd bsfwmcz$ lsdir fjqqblz51952 gqbj.fwddir hmcjdir lctt81316 lhjmzsl.qqr6372 mbgfn.pmh22669 shvgmwn.vhv130990 zgq.fpv$ cd fjqqblz$ ls26064 zrqrnb.nwf$ cd ..$ cd hmcj$ ls14385 mwvbpw.vzq$ cd ..$ cd lctt$ ls137397 fbgbs.fjfdir jgbzqzqdir qrr272639 qsgv.vwm$ cd jgbzqzq$ ls135320 mpbb$ cd ..$ cd qrr$ lsdir dpbwgdir mwvbpw54143 pnsl.bbmdir wbpzpg$ cd dpbwg$ ls250653 shvgmwn.vhv$ cd ..$ cd mwvbpw$ ls2682 fhdh.hmt$ cd ..$ cd wbpzpg$ lsdir bqshqpvm141398 mtctcdgd.nmb130729 vtnfmjqm.mgp$ cd bqshqpvm$ ls252449 shvgmwn.vhv$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd dpbwg$ ls82216 gwjwmcbf.gwl$ cd ..$ cd pmrfvzw$ lsdir mwvbpwdir wtzgjspzdir zmb$ cd mwvbpw$ ls16736 wbzjzz.mqq$ cd ..$ cd wtzgjspz$ lsdir vjb$ cd vjb$ ls301763 drchphtm$ cd ..$ cd ..$ cd zmb$ ls201978 mdjdir qgnffw147889 qzbmwpnm.gjp$ cd qgnffw$ ls17740 cwz.dhs222345 mbgfn.pmh81554 npj206597 tsnlnzh$ cd ..$ cd ..$ cd ..$ cd qsgv$ lsdir mmsnzr$ cd mmsnzr$ ls160502 tgrztm$ cd ..$ cd ..$ cd ..$ cd mwvbpw$ ls40049 qmmdv313418 qsgv.srp$ cd ..$ cd qcqrgdm$ ls202848 wtl.qbj$ cd ..$ cd ..$ cd ..$ cd vsgjds$ ls138690 npj22984 tpfbnz.sgj$ cd ..$ cd ..$ cd sqs$ lsdir zms$ cd zms$ ls152096 cvtqph.wwpdir mmwzg$ cd mmwzg$ ls100870 qsgv
const std = @import("std");const PATH = "input/day07.txt";const Str = []const u8;const MAX_DIR_SIZE = 100_000;const TOTAL = 70_000_000;const NEED = 30_000_000;pub fn first(allocator: std.mem.Allocator) !usize {var arena = std.heap.ArenaAllocator.init(allocator);defer arena.deinit();var root = try parseInput(arena.allocator(), @embedFile(PATH));var sizes = std.ArrayList(usize).init(arena.allocator());defer sizes.deinit();_ = try root.size(&sizes);var sum: usize = 0;for (sizes.items) |s| {if (s <= MAX_DIR_SIZE) sum += s;}return sum;}pub fn second(allocator: std.mem.Allocator) !usize {var arena = std.heap.ArenaAllocator.init(allocator);defer arena.deinit();var root = try parseInput(arena.allocator(), @embedFile(PATH));var sizes = std.ArrayList(usize).init(arena.allocator());defer sizes.deinit();_ = try root.size(&sizes);const diff = NEED - (TOTAL - sizes.items[sizes.items.len - 1]);std.sort.sort(usize, sizes.items, {}, std.sort.asc(usize));for (sizes.items) |s| {if (s > diff) {return s;}}unreachable;}test "day07a" {try std.testing.expectEqual(@as(usize, 1350966), try first(std.testing.allocator));}test "day07b" {try std.testing.expectEqual(@as(usize, 6296435), try second(std.testing.allocator));}const Dir = struct {parent: ?*Dir = null,files: ?std.ArrayList(File) = null,subdirs: ?std.ArrayList(Dir) = null,fn size(self: @This(), ret: *std.ArrayList(usize)) !usize {var sum: usize = 0;if (self.files != null) {for (self.files.?.items) |file| {sum += file.size;}}if (self.subdirs != null) {for (self.subdirs.?.items) |dir| {sum += try dir.size(ret);}}try ret.append(sum);return sum;}};const File = struct {size: usize,name: Str,};fn parseInput(allocator: std.mem.Allocator, in: Str) !*Dir {var curr = try allocator.create(Dir);curr.* = Dir{};var lines = std.mem.tokenize(u8, in, "\n");while (lines.next()) |line| {// std.debug.print("{s}\n", .{line});switch (line[0]) {'$' => {switch (line[2]) {'c' => {// $ cdvar words = std.mem.tokenize(u8, line, " ");_ = words.next(); // $_ = words.next(); // cdconst dest = words.next().?;switch (dest[0]) {'/' => {while (curr.parent) |p| {curr = p;}},'.' => {curr = curr.parent.?;},else => {if (curr.subdirs == null) {curr.subdirs = std.ArrayList(Dir).init(allocator);}try curr.subdirs.?.append(.{ .parent = curr });curr = &curr.subdirs.?.items[curr.subdirs.?.items.len - 1];},}},'l' => {}, // lselse => {unreachable;},}},'d' => {},'0'...'9' => {var words = std.mem.tokenize(u8, line, " ");const size = try std.fmt.parseUnsigned(usize, words.next().?, 10);const name = words.next().?;const f: File = .{ .size = size, .name = name };if (curr.files == null) {curr.files = std.ArrayList(File).init(allocator);}try curr.files.?.append(f);},else => unreachable,}}// rewind to rootwhile (curr.parent) |p| {curr = p;}return curr;}const test_input =\\$ cd /\\$ ls\\dir a\\14848514 b.txt\\8504156 c.dat\\dir d\\$ cd a\\$ ls\\dir e\\29116 f\\2557 g\\62596 h.lst\\$ cd e\\$ ls\\584 i\\$ cd ..\\$ cd ..\\$ cd d\\$ ls\\4060174 j\\8033020 d.log\\5626152 d.ext\\7214296 k;