advent-of-code-2022

My solutions for AoC 2022
git clone https://git.sr.ht/~jbauer/advent-of-code-2022
Log | Files | Refs | README | LICENSE

commit e5d2fd9819893ecd4b0766d29f4706fbb41f2660
parent 061f6232d6d6b3d3c3fd1cebdb23c78273479be7
Author: Jake Bauer <jbauer@paritybit.ca>
Date:   Thu,  8 Dec 2022 23:06:58 -0500

Day 7 challenge complete

Diffstat:
Aday7/input.txt | 1013+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday7/main.c | 160+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday7/realinput | 1013+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday7/testinput | 23+++++++++++++++++++++++
4 files changed, 2209 insertions(+), 0 deletions(-)

diff --git a/day7/input.txt b/day7/input.txt @@ -0,0 +1,1013 @@ +$ ls +dir bjrbjh +dir dppgvlh +dir fcfqp +dir mtbt +95962 mzvb +dir qtfmf +dir sfjrs +dir trtl +$ cd bjrbjh +$ ls +80731 ctprm.bpc +$ cd .. +$ cd dppgvlh +$ ls +180122 bbjw +210923 ctprm.bpc +304465 hhg +dir rtdnhb +$ cd rtdnhb +$ ls +295880 ctprm.bpc +$ cd .. +$ cd .. +$ cd fcfqp +$ ls +dir cts +dir gjzdf +61601 hqvhrpnv +27922 hqvhrpnv.sgf +dir hvsnr +191405 mzvb +263646 nbjp.fdm +dir qmsllmtw +dir rpvstz +dir vbhh +dir zwllwsq +$ cd cts +$ ls +47983 nhzpb +$ cd .. +$ cd gjzdf +$ ls +dir fcfqp +161310 vtrhs.mlh +$ cd fcfqp +$ ls +145412 vcbnl +$ cd .. +$ cd .. +$ cd hvsnr +$ ls +dir sftjlqbm +$ cd sftjlqbm +$ ls +96517 qlgp +$ cd .. +$ cd .. +$ cd qmsllmtw +$ ls +172998 hhg +$ cd .. +$ cd rpvstz +$ ls +dir nccm +dir tsstr +$ cd nccm +$ ls +181998 fcfqp +$ cd .. +$ cd tsstr +$ ls +258571 tsstr +$ cd .. +$ cd .. +$ cd vbhh +$ ls +317169 ctprm.bpc +dir rpvstz +dir scsclh +307868 vcbnl +118337 zbltwtj +$ cd rpvstz +$ ls +dir fcfqp +dir nzg +dir pmhprnbb +dir szshbn +$ cd fcfqp +$ ls +dir hrhftz +$ cd hrhftz +$ ls +163301 vlrjptvv.fsr +$ cd .. +$ cd .. +$ cd nzg +$ ls +230765 hhg +235220 ptg.dbs +dir qsbpc +220737 vtttmhf.dcl +$ cd qsbpc +$ ls +74559 hqvhrpnv.phh +322306 tqb.wnl +$ cd .. +$ cd .. +$ cd pmhprnbb +$ ls +293892 hhg +$ cd .. +$ cd szshbn +$ ls +303519 tsstr.pml +$ cd .. +$ cd .. +$ cd scsclh +$ ls +dir rdznzm +$ cd rdznzm +$ ls +dir hthgb +dir vgfhz +270085 zjlcp +$ cd hthgb +$ ls +2762 gjgczrpm.hlw +$ cd .. +$ cd vgfhz +$ ls +160621 svplfhqh.rfr +27592 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zwllwsq +$ ls +dir bmgpnmbt +dir fbphbmbb +217873 hhg +dir hqvhrpnv +$ cd bmgpnmbt +$ ls +dir fcfqp +67327 hhg +175579 qrgrtg.gtn +185356 rdrtvn +$ cd fcfqp +$ ls +16285 wqtnzw.cvj +$ cd .. +$ cd .. +$ cd fbphbmbb +$ ls +dir fpnwjb +dir hqvhrpnv +dir jbm +dir jsfscjd +dir qmpbb +dir sjhrg +dir tsstr +79487 tsstr.czd +226172 tvdpb.vss +$ cd fpnwjb +$ ls +78102 pgv.snz +32886 wqtnzw.szw +$ cd .. +$ cd hqvhrpnv +$ ls +247435 ctprm.bpc +dir drpffn +dir fvqzjjhp +312573 hqvhrpnv +103964 swbvbwd +dir szdbbtw +129434 trjpn.htm +33772 vgjnhmbc.hcr +dir vvrhmrbs +$ cd drpffn +$ ls +204660 wdhl.dgs +$ cd .. +$ cd fvqzjjhp +$ ls +dir qtc +$ cd qtc +$ ls +74576 wgfffz +$ cd .. +$ cd .. +$ cd szdbbtw +$ ls +dir fcfqp +$ cd fcfqp +$ ls +56006 bthq.wlm +$ cd .. +$ cd .. +$ cd vvrhmrbs +$ ls +dir sqwfj +21051 vcbnl +$ cd sqwfj +$ ls +dir chjpwmb +170226 fcfqp.wrn +$ cd chjpwmb +$ ls +305407 ctprm.bpc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd jbm +$ ls +138219 fcfqp +dir jwbrhmzj +67905 mbvpfmgs.lbq +125465 mzvb +dir tsstr +211711 vrqpss.qtr +$ cd jwbrhmzj +$ ls +22219 zqmldh.jwc +$ cd .. +$ cd tsstr +$ ls +141377 ctprm.bpc +28965 jhwr.tvf +dir rmbpb +$ cd rmbpb +$ ls +185176 mzvb +204877 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd jsfscjd +$ ls +210670 jqwcrvg +263796 qcv.crz +23224 slcgw.hmz +dir tws +$ cd tws +$ ls +244925 dnrswnh +307737 vcbnl +$ cd .. +$ cd .. +$ cd qmpbb +$ ls +175766 fcfqp.pgc +155950 nnrgl.qtd +215226 rjjw +218856 rpvstz.cls +$ cd .. +$ cd sjhrg +$ ls +dir dbdc +dir jprmnvv +dir wbqrzrcd +$ cd dbdc +$ ls +159323 cqfmgtr.fpp +$ cd .. +$ cd jprmnvv +$ ls +314162 ctprm.bpc +$ cd .. +$ cd wbqrzrcd +$ ls +177804 mzvb +11757 wfmhd.srn +$ cd .. +$ cd .. +$ cd tsstr +$ ls +303871 hhg +311124 mzvb +$ cd .. +$ cd .. +$ cd hqvhrpnv +$ ls +75235 mzvb +$ cd .. +$ cd .. +$ cd .. +$ cd mtbt +$ ls +277478 bqvdgj.tdt +dir gtgdhl +100015 hnmvhb.dqb +dir hqvhrpnv +dir pdhn +dir ptmpqgj +dir qfdmhqhm +dir tsstr +178843 tsstr.crd +dir ttjltb +45660 vbqjdj.znj +204359 vch.zrz +$ cd gtgdhl +$ ls +305753 hsjc +$ cd .. +$ cd hqvhrpnv +$ ls +131065 cvt.pwb +dir dzrlrdc +dir fcfqp +175755 hqvhrpnv.gjg +313719 jjpnjhqz.wtf +3622 nhr.vtv +dir spz +$ cd dzrlrdc +$ ls +65797 wqtnzw.tpr +$ cd .. +$ cd fcfqp +$ ls +141146 hhg +$ cd .. +$ cd spz +$ ls +292906 gjgczrpm.hlw +202319 gjn.ptw +311120 vcbnl +93748 wqtnzw +$ cd .. +$ cd .. +$ cd pdhn +$ ls +dir rjgsq +$ cd rjgsq +$ ls +424 ctprm.bpc +$ cd .. +$ cd .. +$ cd ptmpqgj +$ ls +10127 mdnllcs +178992 npbr +dir rpvstz +dir wqtnzw +$ cd rpvstz +$ ls +248549 gjnpwldn.jsh +31443 nstp.jpj +$ cd .. +$ cd wqtnzw +$ ls +47276 mzvb +$ cd .. +$ cd .. +$ cd qfdmhqhm +$ ls +254322 wqtnzw.qrn +$ cd .. +$ cd tsstr +$ ls +265555 cqbs.thq +273707 ggnr +$ cd .. +$ cd ttjltb +$ ls +82810 cmln.qlj +23429 mzvb +$ cd .. +$ cd .. +$ cd qtfmf +$ ls +108080 hqvhrpnv +dir hrl +dir mnb +85284 qrfjg +dir rfghjdj +dir tsstr +dir wqtnzw +$ cd hrl +$ ls +dir dwgnv +dir lgn +dir qhcjcc +dir rpvstz +dir zrqf +$ cd dwgnv +$ ls +dir mrhvqqc +$ cd mrhvqqc +$ ls +113150 qbhmdfwg.wrt +$ cd .. +$ cd .. +$ cd lgn +$ ls +293311 gzzdwd.wnn +$ cd .. +$ cd qhcjcc +$ ls +298893 fcfqp +253573 lvb.brw +301515 ndbrjbw.ssq +236001 vmdgmm.gmh +124715 wqtnzw.cqd +$ cd .. +$ cd rpvstz +$ ls +dir hqvhrpnv +dir rpvstz +dir tbdnjbmr +$ cd hqvhrpnv +$ ls +271956 vrtgr.vdt +$ cd .. +$ cd rpvstz +$ ls +185836 cjcf.rwc +289321 vcbnl +$ cd .. +$ cd tbdnjbmr +$ ls +124297 ctprm.bpc +323010 hhg +$ cd .. +$ cd .. +$ cd zrqf +$ ls +dir fcfqp +dir vrp +$ cd fcfqp +$ ls +1896 cdfldlv.ptw +$ cd .. +$ cd vrp +$ ls +5610 fmmvbft.rjq +$ cd .. +$ cd .. +$ cd .. +$ cd mnb +$ ls +64404 ctprm.bpc +dir tsstr +$ cd tsstr +$ ls +172859 gjgczrpm.hlw +$ cd .. +$ cd .. +$ cd rfghjdj +$ ls +78613 cpfclgj.wqh +$ cd .. +$ cd tsstr +$ ls +dir cjdbwvn +135418 gjgczrpm.hlw +dir lsv +$ cd cjdbwvn +$ ls +dir hqvhrpnv +264636 wqtnzw.gcq +124125 zvpwlrbr.nnz +$ cd hqvhrpnv +$ ls +43899 tdzsmzw +$ cd .. +$ cd .. +$ cd lsv +$ ls +202987 hhg +251479 vcbnl +dir vdltrlzg +$ cd vdltrlzg +$ ls +dir nlchndbr +$ cd nlchndbr +$ ls +134010 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +dir hqvhrpnv +$ cd hqvhrpnv +$ ls +50703 ctprm.bpc +$ cd .. +$ cd .. +$ cd .. +$ cd sfjrs +$ ls +dir cgl +dir cjjls +184472 hhg +241700 pdswzfq.scs +dir rfwnnr +dir rpvstz +dir tsstr +$ cd cgl +$ ls +dir tdwn +$ cd tdwn +$ ls +119119 lzqfb.tgc +$ cd .. +$ cd .. +$ cd cjjls +$ ls +dir hgppstcv +$ cd hgppstcv +$ ls +223932 bvt +85898 hhg +195499 ppbrb.vtq +$ cd .. +$ cd .. +$ cd rfwnnr +$ ls +96712 gmzchms.wst +271527 mzvb +$ cd .. +$ cd rpvstz +$ ls +78920 cbj.mlh +$ cd .. +$ cd tsstr +$ ls +17373 bdlrvwv +50170 vcbnl +$ cd .. +$ cd .. +$ cd trtl +$ ls +dir dflwctzs +dir gsl +168166 hhg +dir jlfrcp +97874 mzvb +dir pfnlc +dir pjj +186837 qzlwgts +132833 tnb.mpv +dir vmjljc +$ cd dflwctzs +$ ls +6196 fcfqp.qcg +181057 mrjvtvl.hmm +$ cd .. +$ cd gsl +$ ls +dir gmlp +dir mjrs +dir rpvstz +91777 wqtnzw.hpl +$ cd gmlp +$ ls +167819 qmtmtppc +254187 sbn.chs +119156 tbhhgmz.vqs +31966 tptqzrqr.zgh +$ cd .. +$ cd mjrs +$ ls +167756 fcfqp.jgz +221559 tzj.rfb +$ cd .. +$ cd rpvstz +$ ls +93065 hhg +$ cd .. +$ cd .. +$ cd jlfrcp +$ ls +dir fcfqp +dir hmlmvqc +256413 mrtwp +141186 mzvb +106340 nvwfhv.rvt +dir pqmfswh +dir qghq +274275 qmmgnjh +dir trhs +dir tsstr +55881 wbtf +$ cd fcfqp +$ ls +265006 fcfqp.dtr +dir tdflqz +dir thjdsqmw +136055 vshqb +$ cd tdflqz +$ ls +dir dtvnrl +$ cd dtvnrl +$ ls +277524 mzvb +$ cd .. +$ cd .. +$ cd thjdsqmw +$ ls +dir chhf +dir hsnrrc +218719 qgt.sdb +dir tsstr +134210 twvn +dir wqtnzw +$ cd chhf +$ ls +6278 ctprm.bpc +$ cd .. +$ cd hsnrrc +$ ls +dir bphrpw +dir dmjvnrhz +dir rpvstz +dir wqtnzw +$ cd bphrpw +$ ls +dir brj +dir hqvhrpnv +dir rpvstz +$ cd brj +$ ls +13067 rpvstz.bqh +$ cd .. +$ cd hqvhrpnv +$ ls +148840 ctprm.bpc +dir fsvgbd +94116 hghq.gqm +$ cd fsvgbd +$ ls +222743 ctprm.bpc +80460 vwp.nnq +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +287030 ctprm.bpc +145932 rhpt +$ cd .. +$ cd .. +$ cd dmjvnrhz +$ ls +dir mlh +$ cd mlh +$ ls +238301 tsstr.vfl +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +59172 mcv +$ cd .. +$ cd wqtnzw +$ ls +50806 tlwnzqgb.dqq +$ cd .. +$ cd .. +$ cd tsstr +$ ls +dir rpvstz +$ cd rpvstz +$ ls +109284 mzvb +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +dir hwpdsfg +dir mrn +183742 rpvstz.pdq +$ cd hwpdsfg +$ ls +295333 vbbrvhqm.mvj +$ cd .. +$ cd mrn +$ ls +46589 mzvb +235773 pppwz +69304 rsrbq.qdl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd hmlmvqc +$ ls +77344 ctprm.bpc +291828 hhg +226384 rpvstz.qfl +10758 tpmdrpg.hcj +$ cd .. +$ cd pqmfswh +$ ls +127361 bczcpjln.ffs +208033 ctprm.bpc +144048 hqvhrpnv.bzm +88561 pgf.ltz +149879 twj.drs +$ cd .. +$ cd qghq +$ ls +165758 hqvhrpnv.mqb +$ cd .. +$ cd trhs +$ ls +dir bnrqbrv +177929 rlnln.gcv +60631 rpvstz +dir snd +$ cd bnrqbrv +$ ls +150034 ltjjfp +$ cd .. +$ cd snd +$ ls +21614 hqvhrpnv +95241 wvtc +$ cd .. +$ cd .. +$ cd tsstr +$ ls +dir cdvgvc +dir mbmn +dir mprbjtnd +dir rvwqgn +8263 tsstr +dir tvtddch +$ cd cdvgvc +$ ls +dir gvssnh +121417 hqvhrpnv +180690 hqvhrpnv.dnl +dir nhrvzn +266104 psj.fdv +dir rpvstz +278434 rww.nbt +dir wqtnzw +$ cd gvssnh +$ ls +20979 fpqgb.nbl +$ cd .. +$ cd nhrvzn +$ ls +dir hqvhrpnv +dir nlv +$ cd hqvhrpnv +$ ls +202973 hhg +$ cd .. +$ cd nlv +$ ls +235158 hqvhrpnv +246378 hqvhrpnv.vmg +278166 rfzjcbpv.crc +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +181642 tsstr.wjh +$ cd .. +$ cd wqtnzw +$ ls +dir pgnzftwn +$ cd pgnzftwn +$ ls +dir njtgddhw +217983 sqwmjb +149152 wqtnzw.pzv +$ cd njtgddhw +$ ls +75203 fvbr +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mbmn +$ ls +82237 hhg +36010 hqvhrpnv.hcf +$ cd .. +$ cd mprbjtnd +$ ls +23927 gbrvbz.rgc +20857 hqvhrpnv +203364 zpbhr.svj +$ cd .. +$ cd rvwqgn +$ ls +291142 fcfqp.mdf +124256 gjgczrpm.hlw +235579 mzvb +$ cd .. +$ cd tvtddch +$ ls +317689 dshzl.plf +44518 vphnqd +$ cd .. +$ cd .. +$ cd .. +$ cd pfnlc +$ ls +dir vdsjh +dir wfvgc +$ cd vdsjh +$ ls +202584 pzs +$ cd .. +$ cd wfvgc +$ ls +315910 ctmrb.qsq +$ cd .. +$ cd .. +$ cd pjj +$ ls +242824 qhngjlvt.pcb +dir wzv +$ cd wzv +$ ls +221150 clrchzw.vbj +$ cd .. +$ cd .. +$ cd vmjljc +$ ls +dir blm +31640 dbtnn +dir fcfqp +dir frjdzh +dir scjhzc +dir tmz +dir vpvh +dir zcwpb +$ cd blm +$ ls +249527 hjsjqbw.rst +dir hqvhrpnv +dir pvnrmvb +dir pvt +dir rjpcb +161576 slp.gbn +dir srrzgt +97355 wtps.brr +$ cd hqvhrpnv +$ ls +dir tsstr +dir wqtnzw +dir zphvcch +$ cd tsstr +$ ls +dir fzrpgcn +$ cd fzrpgcn +$ ls +10603 hhg +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +56612 ctprm.bpc +22521 fljtffmz.rcl +$ cd .. +$ cd zphvcch +$ ls +dir fcfqp +$ cd fcfqp +$ ls +171787 ctprm.bpc +134010 mzvb +$ cd .. +$ cd .. +$ cd .. +$ cd pvnrmvb +$ ls +100624 fcfqp.nzt +120945 mzvb +$ cd .. +$ cd pvt +$ ls +dir lslcvfv +8511 mzvb +81176 srnqlrn.lvg +315976 ttzwwnn.fmz +dir wvhrf +$ cd lslcvfv +$ ls +dir gmj +13666 tcbf +$ cd gmj +$ ls +174220 drpztfvs.shg +$ cd .. +$ cd .. +$ cd wvhrf +$ ls +19033 gqggsrc +270841 hhg +dir nvvpbmgm +$ cd nvvpbmgm +$ ls +241543 pzht +72906 rmhrd +dir tllpvrdv +$ cd tllpvrdv +$ ls +309970 lmqcbbz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rjpcb +$ ls +215654 fcfqp.gjw +241891 gjgczrpm.hlw +dir gqql +101620 sqjtc +$ cd gqql +$ ls +214991 wctr.qnb +$ cd .. +$ cd .. +$ cd srrzgt +$ ls +dir bwfnrbs +147738 hhg +dir qdctrw +dir svpm +dir tsstr +$ cd bwfnrbs +$ ls +133922 gpsmlzbp.ghd +$ cd .. +$ cd qdctrw +$ ls +56213 ppp +$ cd .. +$ cd svpm +$ ls +205352 hhg +$ cd .. +$ cd tsstr +$ ls +248839 fcfqp.hlg +299835 lfdlfrhs.vjz +$ cd .. +$ cd .. +$ cd .. +$ cd fcfqp +$ ls +dir ctbbgw +dir rpvstz +265076 wqtnzw.cts +$ cd ctbbgw +$ ls +306172 vcbnl +$ cd .. +$ cd rpvstz +$ ls +40277 hhg +225110 mllhtfm.jwd +$ cd .. +$ cd .. +$ cd frjdzh +$ ls +69285 jlscvz.lsw +$ cd .. +$ cd scjhzc +$ ls +221073 gjgczrpm.hlw +$ cd .. +$ cd tmz +$ ls +35287 fcfqp +146224 mnz.zwd +189997 mzvb +dir tsn +31655 ttwjfbl.jbb +dir wjszmnp +170705 wqtnzw.slq +$ cd tsn +$ ls +196121 mzvb +$ cd .. +$ cd wjszmnp +$ ls +dir pbtmjghf +dir smbbnl +$ cd pbtmjghf +$ ls +151036 vcbnl +$ cd .. +$ cd smbbnl +$ ls +299800 mbt +dir wqtnzw +$ cd wqtnzw +$ ls +203547 hhg +220352 wqtnzw.dgs +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd vpvh +$ ls +69506 vbgrhzjs.tdb +$ cd .. +$ cd zcwpb +$ ls +73403 fcfqp.hpq diff --git a/day7/main.c b/day7/main.c @@ -0,0 +1,160 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <err.h> + +int totalSize = 0; +int unusedSpace = 0; +int smallestDirSize = 30000000; + +struct node { + char name[32]; + char type; + int size; + int numChildren; + struct node *parent; + struct node *children[16]; +}; + +void +splitString(char *string, char delim, char **result) +{ + int index = 0; + for (int i = 0; i < strlen(string); i++) + { + if (string[i] == delim) + index++; + else + strncat(result[index], &string[i], 1); + } +} + +void +sumDirSizeLT100k(struct node *node) +{ + for (int i = 0; i < node->numChildren; i++) + sumDirSizeLT100k(node->children[i]); + + if (node->type == 'd' && node->size <= 100000) + totalSize += node->size; +} + +void +findSmallestDirToDelete(struct node *node) +{ + for (int i = 0; i < node->numChildren; i++) + findSmallestDirToDelete(node->children[i]); + + if (node->type == 'd' && node->size+unusedSpace >= 30000000 + && node->size <= smallestDirSize) + smallestDirSize = node->size; +} + +void +calculateDirSizes(struct node *node) +{ + for (int i = 0; i < node->numChildren; i++) + { + calculateDirSizes(node->children[i]); + node->size += node->children[i]->size; + } +} + +int +main (void) +{ + FILE *fp = fopen("input.txt", "r"); + if (fp == NULL) + { + err(1, "Failed to open input.txt"); + exit(EXIT_FAILURE); + } + + struct node *rootDir = (struct node*)malloc(sizeof(struct node)); + strcpy(rootDir->name, "/"); + rootDir->type = 'd'; + rootDir->size = 0; + rootDir->numChildren = 0; + rootDir->parent = NULL; + + struct node *currentDir = rootDir; + + char *line = NULL; + size_t linesize = 0; + ssize_t linelen = 0; + while ((linelen = getline(&line, &linesize, fp)) != -1) + { + line[--linelen] = '\0'; + + char *strings[3]; + strings[0] = (char *)malloc(32); + strings[1] = (char *)malloc(32); + strings[2] = (char *)malloc(32); + + // Line is either: + // $ cd <dir> + // $ ls + // dir name + // <size> filename + if (line[0] == '$' && line[2] == 'c') + { + if (line[5] == '.') + { + currentDir = currentDir->parent; + } + else + { + splitString(line, ' ', strings); + for (int i = 0; i < currentDir->numChildren; i++) + { + if (!strcmp(currentDir->children[i]->name, strings[2])) + { + currentDir = currentDir->children[i]; + break; + } + } + } + + } + else if (line[0] == '$' && line[2] == 'l') + { + continue; + } + else + { + splitString(line, ' ', strings); + + struct node *newNode = (struct node*)malloc(sizeof(struct node)); + strcpy(newNode->name, strings[1]); + newNode->numChildren = 0; + newNode->parent = currentDir; + currentDir->children[currentDir->numChildren++] = newNode; + + if (strings[0][0] == 'd') + { + newNode->type = 'd'; + newNode->size = 0; + } + else + { + newNode->type = 'f'; + newNode->size = atoi(strings[0]); + } + } + } + free(line); + if (ferror(fp)) + err(1, "getline"); + fclose(fp); + + calculateDirSizes(rootDir); + + sumDirSizeLT100k(rootDir); + printf("Part 1: %d\n", totalSize); + + unusedSpace = 70000000 - rootDir->size; + findSmallestDirToDelete(rootDir); + printf("Part 2: %d\n", smallestDirSize); + + exit(EXIT_SUCCESS); +} diff --git a/day7/realinput b/day7/realinput @@ -0,0 +1,1013 @@ +$ ls +dir bjrbjh +dir dppgvlh +dir fcfqp +dir mtbt +95962 mzvb +dir qtfmf +dir sfjrs +dir trtl +$ cd bjrbjh +$ ls +80731 ctprm.bpc +$ cd .. +$ cd dppgvlh +$ ls +180122 bbjw +210923 ctprm.bpc +304465 hhg +dir rtdnhb +$ cd rtdnhb +$ ls +295880 ctprm.bpc +$ cd .. +$ cd .. +$ cd fcfqp +$ ls +dir cts +dir gjzdf +61601 hqvhrpnv +27922 hqvhrpnv.sgf +dir hvsnr +191405 mzvb +263646 nbjp.fdm +dir qmsllmtw +dir rpvstz +dir vbhh +dir zwllwsq +$ cd cts +$ ls +47983 nhzpb +$ cd .. +$ cd gjzdf +$ ls +dir fcfqp +161310 vtrhs.mlh +$ cd fcfqp +$ ls +145412 vcbnl +$ cd .. +$ cd .. +$ cd hvsnr +$ ls +dir sftjlqbm +$ cd sftjlqbm +$ ls +96517 qlgp +$ cd .. +$ cd .. +$ cd qmsllmtw +$ ls +172998 hhg +$ cd .. +$ cd rpvstz +$ ls +dir nccm +dir tsstr +$ cd nccm +$ ls +181998 fcfqp +$ cd .. +$ cd tsstr +$ ls +258571 tsstr +$ cd .. +$ cd .. +$ cd vbhh +$ ls +317169 ctprm.bpc +dir rpvstz +dir scsclh +307868 vcbnl +118337 zbltwtj +$ cd rpvstz +$ ls +dir fcfqp +dir nzg +dir pmhprnbb +dir szshbn +$ cd fcfqp +$ ls +dir hrhftz +$ cd hrhftz +$ ls +163301 vlrjptvv.fsr +$ cd .. +$ cd .. +$ cd nzg +$ ls +230765 hhg +235220 ptg.dbs +dir qsbpc +220737 vtttmhf.dcl +$ cd qsbpc +$ ls +74559 hqvhrpnv.phh +322306 tqb.wnl +$ cd .. +$ cd .. +$ cd pmhprnbb +$ ls +293892 hhg +$ cd .. +$ cd szshbn +$ ls +303519 tsstr.pml +$ cd .. +$ cd .. +$ cd scsclh +$ ls +dir rdznzm +$ cd rdznzm +$ ls +dir hthgb +dir vgfhz +270085 zjlcp +$ cd hthgb +$ ls +2762 gjgczrpm.hlw +$ cd .. +$ cd vgfhz +$ ls +160621 svplfhqh.rfr +27592 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zwllwsq +$ ls +dir bmgpnmbt +dir fbphbmbb +217873 hhg +dir hqvhrpnv +$ cd bmgpnmbt +$ ls +dir fcfqp +67327 hhg +175579 qrgrtg.gtn +185356 rdrtvn +$ cd fcfqp +$ ls +16285 wqtnzw.cvj +$ cd .. +$ cd .. +$ cd fbphbmbb +$ ls +dir fpnwjb +dir hqvhrpnv +dir jbm +dir jsfscjd +dir qmpbb +dir sjhrg +dir tsstr +79487 tsstr.czd +226172 tvdpb.vss +$ cd fpnwjb +$ ls +78102 pgv.snz +32886 wqtnzw.szw +$ cd .. +$ cd hqvhrpnv +$ ls +247435 ctprm.bpc +dir drpffn +dir fvqzjjhp +312573 hqvhrpnv +103964 swbvbwd +dir szdbbtw +129434 trjpn.htm +33772 vgjnhmbc.hcr +dir vvrhmrbs +$ cd drpffn +$ ls +204660 wdhl.dgs +$ cd .. +$ cd fvqzjjhp +$ ls +dir qtc +$ cd qtc +$ ls +74576 wgfffz +$ cd .. +$ cd .. +$ cd szdbbtw +$ ls +dir fcfqp +$ cd fcfqp +$ ls +56006 bthq.wlm +$ cd .. +$ cd .. +$ cd vvrhmrbs +$ ls +dir sqwfj +21051 vcbnl +$ cd sqwfj +$ ls +dir chjpwmb +170226 fcfqp.wrn +$ cd chjpwmb +$ ls +305407 ctprm.bpc +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd jbm +$ ls +138219 fcfqp +dir jwbrhmzj +67905 mbvpfmgs.lbq +125465 mzvb +dir tsstr +211711 vrqpss.qtr +$ cd jwbrhmzj +$ ls +22219 zqmldh.jwc +$ cd .. +$ cd tsstr +$ ls +141377 ctprm.bpc +28965 jhwr.tvf +dir rmbpb +$ cd rmbpb +$ ls +185176 mzvb +204877 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd jsfscjd +$ ls +210670 jqwcrvg +263796 qcv.crz +23224 slcgw.hmz +dir tws +$ cd tws +$ ls +244925 dnrswnh +307737 vcbnl +$ cd .. +$ cd .. +$ cd qmpbb +$ ls +175766 fcfqp.pgc +155950 nnrgl.qtd +215226 rjjw +218856 rpvstz.cls +$ cd .. +$ cd sjhrg +$ ls +dir dbdc +dir jprmnvv +dir wbqrzrcd +$ cd dbdc +$ ls +159323 cqfmgtr.fpp +$ cd .. +$ cd jprmnvv +$ ls +314162 ctprm.bpc +$ cd .. +$ cd wbqrzrcd +$ ls +177804 mzvb +11757 wfmhd.srn +$ cd .. +$ cd .. +$ cd tsstr +$ ls +303871 hhg +311124 mzvb +$ cd .. +$ cd .. +$ cd hqvhrpnv +$ ls +75235 mzvb +$ cd .. +$ cd .. +$ cd .. +$ cd mtbt +$ ls +277478 bqvdgj.tdt +dir gtgdhl +100015 hnmvhb.dqb +dir hqvhrpnv +dir pdhn +dir ptmpqgj +dir qfdmhqhm +dir tsstr +178843 tsstr.crd +dir ttjltb +45660 vbqjdj.znj +204359 vch.zrz +$ cd gtgdhl +$ ls +305753 hsjc +$ cd .. +$ cd hqvhrpnv +$ ls +131065 cvt.pwb +dir dzrlrdc +dir fcfqp +175755 hqvhrpnv.gjg +313719 jjpnjhqz.wtf +3622 nhr.vtv +dir spz +$ cd dzrlrdc +$ ls +65797 wqtnzw.tpr +$ cd .. +$ cd fcfqp +$ ls +141146 hhg +$ cd .. +$ cd spz +$ ls +292906 gjgczrpm.hlw +202319 gjn.ptw +311120 vcbnl +93748 wqtnzw +$ cd .. +$ cd .. +$ cd pdhn +$ ls +dir rjgsq +$ cd rjgsq +$ ls +424 ctprm.bpc +$ cd .. +$ cd .. +$ cd ptmpqgj +$ ls +10127 mdnllcs +178992 npbr +dir rpvstz +dir wqtnzw +$ cd rpvstz +$ ls +248549 gjnpwldn.jsh +31443 nstp.jpj +$ cd .. +$ cd wqtnzw +$ ls +47276 mzvb +$ cd .. +$ cd .. +$ cd qfdmhqhm +$ ls +254322 wqtnzw.qrn +$ cd .. +$ cd tsstr +$ ls +265555 cqbs.thq +273707 ggnr +$ cd .. +$ cd ttjltb +$ ls +82810 cmln.qlj +23429 mzvb +$ cd .. +$ cd .. +$ cd qtfmf +$ ls +108080 hqvhrpnv +dir hrl +dir mnb +85284 qrfjg +dir rfghjdj +dir tsstr +dir wqtnzw +$ cd hrl +$ ls +dir dwgnv +dir lgn +dir qhcjcc +dir rpvstz +dir zrqf +$ cd dwgnv +$ ls +dir mrhvqqc +$ cd mrhvqqc +$ ls +113150 qbhmdfwg.wrt +$ cd .. +$ cd .. +$ cd lgn +$ ls +293311 gzzdwd.wnn +$ cd .. +$ cd qhcjcc +$ ls +298893 fcfqp +253573 lvb.brw +301515 ndbrjbw.ssq +236001 vmdgmm.gmh +124715 wqtnzw.cqd +$ cd .. +$ cd rpvstz +$ ls +dir hqvhrpnv +dir rpvstz +dir tbdnjbmr +$ cd hqvhrpnv +$ ls +271956 vrtgr.vdt +$ cd .. +$ cd rpvstz +$ ls +185836 cjcf.rwc +289321 vcbnl +$ cd .. +$ cd tbdnjbmr +$ ls +124297 ctprm.bpc +323010 hhg +$ cd .. +$ cd .. +$ cd zrqf +$ ls +dir fcfqp +dir vrp +$ cd fcfqp +$ ls +1896 cdfldlv.ptw +$ cd .. +$ cd vrp +$ ls +5610 fmmvbft.rjq +$ cd .. +$ cd .. +$ cd .. +$ cd mnb +$ ls +64404 ctprm.bpc +dir tsstr +$ cd tsstr +$ ls +172859 gjgczrpm.hlw +$ cd .. +$ cd .. +$ cd rfghjdj +$ ls +78613 cpfclgj.wqh +$ cd .. +$ cd tsstr +$ ls +dir cjdbwvn +135418 gjgczrpm.hlw +dir lsv +$ cd cjdbwvn +$ ls +dir hqvhrpnv +264636 wqtnzw.gcq +124125 zvpwlrbr.nnz +$ cd hqvhrpnv +$ ls +43899 tdzsmzw +$ cd .. +$ cd .. +$ cd lsv +$ ls +202987 hhg +251479 vcbnl +dir vdltrlzg +$ cd vdltrlzg +$ ls +dir nlchndbr +$ cd nlchndbr +$ ls +134010 vcbnl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +dir hqvhrpnv +$ cd hqvhrpnv +$ ls +50703 ctprm.bpc +$ cd .. +$ cd .. +$ cd .. +$ cd sfjrs +$ ls +dir cgl +dir cjjls +184472 hhg +241700 pdswzfq.scs +dir rfwnnr +dir rpvstz +dir tsstr +$ cd cgl +$ ls +dir tdwn +$ cd tdwn +$ ls +119119 lzqfb.tgc +$ cd .. +$ cd .. +$ cd cjjls +$ ls +dir hgppstcv +$ cd hgppstcv +$ ls +223932 bvt +85898 hhg +195499 ppbrb.vtq +$ cd .. +$ cd .. +$ cd rfwnnr +$ ls +96712 gmzchms.wst +271527 mzvb +$ cd .. +$ cd rpvstz +$ ls +78920 cbj.mlh +$ cd .. +$ cd tsstr +$ ls +17373 bdlrvwv +50170 vcbnl +$ cd .. +$ cd .. +$ cd trtl +$ ls +dir dflwctzs +dir gsl +168166 hhg +dir jlfrcp +97874 mzvb +dir pfnlc +dir pjj +186837 qzlwgts +132833 tnb.mpv +dir vmjljc +$ cd dflwctzs +$ ls +6196 fcfqp.qcg +181057 mrjvtvl.hmm +$ cd .. +$ cd gsl +$ ls +dir gmlp +dir mjrs +dir rpvstz +91777 wqtnzw.hpl +$ cd gmlp +$ ls +167819 qmtmtppc +254187 sbn.chs +119156 tbhhgmz.vqs +31966 tptqzrqr.zgh +$ cd .. +$ cd mjrs +$ ls +167756 fcfqp.jgz +221559 tzj.rfb +$ cd .. +$ cd rpvstz +$ ls +93065 hhg +$ cd .. +$ cd .. +$ cd jlfrcp +$ ls +dir fcfqp +dir hmlmvqc +256413 mrtwp +141186 mzvb +106340 nvwfhv.rvt +dir pqmfswh +dir qghq +274275 qmmgnjh +dir trhs +dir tsstr +55881 wbtf +$ cd fcfqp +$ ls +265006 fcfqp.dtr +dir tdflqz +dir thjdsqmw +136055 vshqb +$ cd tdflqz +$ ls +dir dtvnrl +$ cd dtvnrl +$ ls +277524 mzvb +$ cd .. +$ cd .. +$ cd thjdsqmw +$ ls +dir chhf +dir hsnrrc +218719 qgt.sdb +dir tsstr +134210 twvn +dir wqtnzw +$ cd chhf +$ ls +6278 ctprm.bpc +$ cd .. +$ cd hsnrrc +$ ls +dir bphrpw +dir dmjvnrhz +dir rpvstz +dir wqtnzw +$ cd bphrpw +$ ls +dir brj +dir hqvhrpnv +dir rpvstz +$ cd brj +$ ls +13067 rpvstz.bqh +$ cd .. +$ cd hqvhrpnv +$ ls +148840 ctprm.bpc +dir fsvgbd +94116 hghq.gqm +$ cd fsvgbd +$ ls +222743 ctprm.bpc +80460 vwp.nnq +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +287030 ctprm.bpc +145932 rhpt +$ cd .. +$ cd .. +$ cd dmjvnrhz +$ ls +dir mlh +$ cd mlh +$ ls +238301 tsstr.vfl +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +59172 mcv +$ cd .. +$ cd wqtnzw +$ ls +50806 tlwnzqgb.dqq +$ cd .. +$ cd .. +$ cd tsstr +$ ls +dir rpvstz +$ cd rpvstz +$ ls +109284 mzvb +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +dir hwpdsfg +dir mrn +183742 rpvstz.pdq +$ cd hwpdsfg +$ ls +295333 vbbrvhqm.mvj +$ cd .. +$ cd mrn +$ ls +46589 mzvb +235773 pppwz +69304 rsrbq.qdl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd hmlmvqc +$ ls +77344 ctprm.bpc +291828 hhg +226384 rpvstz.qfl +10758 tpmdrpg.hcj +$ cd .. +$ cd pqmfswh +$ ls +127361 bczcpjln.ffs +208033 ctprm.bpc +144048 hqvhrpnv.bzm +88561 pgf.ltz +149879 twj.drs +$ cd .. +$ cd qghq +$ ls +165758 hqvhrpnv.mqb +$ cd .. +$ cd trhs +$ ls +dir bnrqbrv +177929 rlnln.gcv +60631 rpvstz +dir snd +$ cd bnrqbrv +$ ls +150034 ltjjfp +$ cd .. +$ cd snd +$ ls +21614 hqvhrpnv +95241 wvtc +$ cd .. +$ cd .. +$ cd tsstr +$ ls +dir cdvgvc +dir mbmn +dir mprbjtnd +dir rvwqgn +8263 tsstr +dir tvtddch +$ cd cdvgvc +$ ls +dir gvssnh +121417 hqvhrpnv +180690 hqvhrpnv.dnl +dir nhrvzn +266104 psj.fdv +dir rpvstz +278434 rww.nbt +dir wqtnzw +$ cd gvssnh +$ ls +20979 fpqgb.nbl +$ cd .. +$ cd nhrvzn +$ ls +dir hqvhrpnv +dir nlv +$ cd hqvhrpnv +$ ls +202973 hhg +$ cd .. +$ cd nlv +$ ls +235158 hqvhrpnv +246378 hqvhrpnv.vmg +278166 rfzjcbpv.crc +$ cd .. +$ cd .. +$ cd rpvstz +$ ls +181642 tsstr.wjh +$ cd .. +$ cd wqtnzw +$ ls +dir pgnzftwn +$ cd pgnzftwn +$ ls +dir njtgddhw +217983 sqwmjb +149152 wqtnzw.pzv +$ cd njtgddhw +$ ls +75203 fvbr +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mbmn +$ ls +82237 hhg +36010 hqvhrpnv.hcf +$ cd .. +$ cd mprbjtnd +$ ls +23927 gbrvbz.rgc +20857 hqvhrpnv +203364 zpbhr.svj +$ cd .. +$ cd rvwqgn +$ ls +291142 fcfqp.mdf +124256 gjgczrpm.hlw +235579 mzvb +$ cd .. +$ cd tvtddch +$ ls +317689 dshzl.plf +44518 vphnqd +$ cd .. +$ cd .. +$ cd .. +$ cd pfnlc +$ ls +dir vdsjh +dir wfvgc +$ cd vdsjh +$ ls +202584 pzs +$ cd .. +$ cd wfvgc +$ ls +315910 ctmrb.qsq +$ cd .. +$ cd .. +$ cd pjj +$ ls +242824 qhngjlvt.pcb +dir wzv +$ cd wzv +$ ls +221150 clrchzw.vbj +$ cd .. +$ cd .. +$ cd vmjljc +$ ls +dir blm +31640 dbtnn +dir fcfqp +dir frjdzh +dir scjhzc +dir tmz +dir vpvh +dir zcwpb +$ cd blm +$ ls +249527 hjsjqbw.rst +dir hqvhrpnv +dir pvnrmvb +dir pvt +dir rjpcb +161576 slp.gbn +dir srrzgt +97355 wtps.brr +$ cd hqvhrpnv +$ ls +dir tsstr +dir wqtnzw +dir zphvcch +$ cd tsstr +$ ls +dir fzrpgcn +$ cd fzrpgcn +$ ls +10603 hhg +$ cd .. +$ cd .. +$ cd wqtnzw +$ ls +56612 ctprm.bpc +22521 fljtffmz.rcl +$ cd .. +$ cd zphvcch +$ ls +dir fcfqp +$ cd fcfqp +$ ls +171787 ctprm.bpc +134010 mzvb +$ cd .. +$ cd .. +$ cd .. +$ cd pvnrmvb +$ ls +100624 fcfqp.nzt +120945 mzvb +$ cd .. +$ cd pvt +$ ls +dir lslcvfv +8511 mzvb +81176 srnqlrn.lvg +315976 ttzwwnn.fmz +dir wvhrf +$ cd lslcvfv +$ ls +dir gmj +13666 tcbf +$ cd gmj +$ ls +174220 drpztfvs.shg +$ cd .. +$ cd .. +$ cd wvhrf +$ ls +19033 gqggsrc +270841 hhg +dir nvvpbmgm +$ cd nvvpbmgm +$ ls +241543 pzht +72906 rmhrd +dir tllpvrdv +$ cd tllpvrdv +$ ls +309970 lmqcbbz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rjpcb +$ ls +215654 fcfqp.gjw +241891 gjgczrpm.hlw +dir gqql +101620 sqjtc +$ cd gqql +$ ls +214991 wctr.qnb +$ cd .. +$ cd .. +$ cd srrzgt +$ ls +dir bwfnrbs +147738 hhg +dir qdctrw +dir svpm +dir tsstr +$ cd bwfnrbs +$ ls +133922 gpsmlzbp.ghd +$ cd .. +$ cd qdctrw +$ ls +56213 ppp +$ cd .. +$ cd svpm +$ ls +205352 hhg +$ cd .. +$ cd tsstr +$ ls +248839 fcfqp.hlg +299835 lfdlfrhs.vjz +$ cd .. +$ cd .. +$ cd .. +$ cd fcfqp +$ ls +dir ctbbgw +dir rpvstz +265076 wqtnzw.cts +$ cd ctbbgw +$ ls +306172 vcbnl +$ cd .. +$ cd rpvstz +$ ls +40277 hhg +225110 mllhtfm.jwd +$ cd .. +$ cd .. +$ cd frjdzh +$ ls +69285 jlscvz.lsw +$ cd .. +$ cd scjhzc +$ ls +221073 gjgczrpm.hlw +$ cd .. +$ cd tmz +$ ls +35287 fcfqp +146224 mnz.zwd +189997 mzvb +dir tsn +31655 ttwjfbl.jbb +dir wjszmnp +170705 wqtnzw.slq +$ cd tsn +$ ls +196121 mzvb +$ cd .. +$ cd wjszmnp +$ ls +dir pbtmjghf +dir smbbnl +$ cd pbtmjghf +$ ls +151036 vcbnl +$ cd .. +$ cd smbbnl +$ ls +299800 mbt +dir wqtnzw +$ cd wqtnzw +$ ls +203547 hhg +220352 wqtnzw.dgs +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd vpvh +$ ls +69506 vbgrhzjs.tdb +$ cd .. +$ cd zcwpb +$ ls +73403 fcfqp.hpq diff --git a/day7/testinput b/day7/testinput @@ -0,0 +1,23 @@ +$ 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