From f06c75a2e23546bbdad4fa57a0516d715eaaefed Mon Sep 17 00:00:00 2001 From: Jack Jackson Date: Mon, 20 Jan 2025 13:02:20 -0800 Subject: [PATCH] Solution 19-1 --- inputs/19/real.txt | 402 +++++++++++++++++++++++++++++++++++++++++++++ inputs/19/test.txt | 10 ++ solutions/18.zig | 16 +- solutions/19.zig | 88 ++++++++++ 4 files changed, 508 insertions(+), 8 deletions(-) create mode 100644 inputs/19/real.txt create mode 100644 inputs/19/test.txt create mode 100644 solutions/19.zig diff --git a/inputs/19/real.txt b/inputs/19/real.txt new file mode 100644 index 0000000..82f4833 --- /dev/null +++ b/inputs/19/real.txt @@ -0,0 +1,402 @@ +guwgbuug, bubbb, grw, wwrbbgug, wrruwb, wgw, wgubbrwu, rrgb, gbrr, gbbgb, rrr, grbrgrur, bgrrub, uubrbwwr, ubwug, rgggg, gwggb, rruwbbbw, uubr, gugwwru, rwru, bgg, rrbgug, brgrw, brwwgrg, ubrrb, wugb, ggrg, buu, bwu, urru, rguw, uuwu, wbr, wuw, rwubww, uwgggb, gbb, guubur, ruw, bwwgrbur, bbbrbbbw, wbrbg, rwgrw, bwgb, uwubwug, bur, bbuwgbug, uurw, rwwbrr, ggur, ugr, wwu, uwbwbu, brg, bw, urg, ubwgguu, wwbuwug, bbgbw, ubrgu, wub, rruur, ggg, rgwgr, wgrrg, wwbr, gbgbru, uuugru, ggbwrbw, rbbrg, bgwrb, rgrgubb, wwbug, wrrrwbwr, b, gurb, rurwg, wuwb, rrw, rbub, gwr, bwr, wuwuwbw, uugb, ugggu, gw, ugubbw, wurwwr, ubw, bbw, brugru, wuwuu, buruw, rwrru, wwurubr, gwu, ugrr, wuu, wgbgg, ugrw, bwgbwu, rwuu, uwbb, bgggr, wwgbu, uwgwwuwr, bwb, gwrwg, wbrb, bgbuug, gwwwgb, uwu, ggr, ubuguu, gbuurb, ugbuu, wrbgww, rrbugug, ruru, rruwr, guug, rwb, gbwurg, uuurgwwg, ruwrb, gbg, guur, gwb, gb, uwwbrb, gww, ggbwrg, grr, uubu, urbb, ugu, ggwb, buurw, bgr, rbw, uwr, urw, bgugrrg, rguuwb, wrggg, brw, urgbbw, wwrb, bgrw, ugug, brrbbb, wbwwuu, bbbu, bww, wrg, bwbgu, rgu, urrwr, gugwu, rrub, buw, ubb, rrgu, ubu, grrug, ubugbrb, uruub, gwwrg, ugg, wuuuurr, bubwwu, gbr, rwgurw, wrw, uruw, rbr, grgb, wwg, rr, ugrb, rgb, ggrw, wg, wrgwrw, rgwb, rbb, rgw, bwgw, gggg, ruu, grww, rgur, gwuu, rwwg, bwgwr, rg, bgrgu, bu, uru, ubg, gur, ubbur, rb, ggwuugw, gg, wruu, wbb, gwrrgr, bgb, bug, ruuub, ug, brr, uwg, urgub, rwu, wubr, bbbbur, bg, rub, wgu, bbwbbgw, uur, bbb, rwr, g, wbwb, urgrurgr, wgg, wbgug, ugbbb, bbr, uug, rgg, gguub, bgwg, rwurubgw, wwuwu, ubgr, bbu, bgww, uuu, bgugugg, wbbruwug, rwgg, uuurb, bwubw, bb, urrbb, grbbbb, buru, gbbg, wruuw, wwbwug, urwbrbwg, gwrb, rgug, bru, wrrbwrg, www, rur, gggw, wwgwww, grb, rgwg, wgur, wwrwrr, gru, grwug, bwuw, rru, wuruw, guw, uu, brrbgg, ggrr, ww, bwbbrw, ururgrwb, wu, rwbg, gbw, wgr, rgru, gbrg, wbub, ggb, brww, ggu, brwgu, bbwbrrg, gbwgrub, rgr, gubwrb, rbgg, rrbu, rbrw, guuuub, bwwwb, uwggww, rrg, wwwub, rrwwu, rbbr, ur, rubrurg, brb, rrwubww, rrwru, gbru, u, wr, ruwu, uruuggg, gu, uubwg, bggr, wurggw, uuwwurb, rurbuuu, wbu, gug, bbuw, urrubb, bugwrwr, urb, bggbb, ugrrrg, ugwwgg, rwg, wwrwbb, wbg, rrbrg, uwuw, rug, ugrwgbw, gwbgu, rgubbw, wbw, gwww, brruu, gwgw, uugbrub, gwwruwr, rbg, gwwwg, ru, grg, wwurg, uubbb, ugw, gruwr, uubg, gubw, wru, rwwwg, urrgwg, ugb, wbbbuug, urgrrur, ugwwguw, w, uww, urrwwu, bwgr, ugbbbwg, uub, urbww, uwwb, gubrub, uwrg, urr, gwru, uugg, uwb, uuwb, burbbu, wb, uurr, gubuu, uwuu, rbwu, wrr, wwrub, bbg, brgrb, ggw, rbu, wwbburur, wrggbwww, gbu, ugrbrr, ruurrwgu, grwrwb, uwruru, uuw, guu, gbur, ub, gbwwg, wguu, gr, ubuubr, uwgu, bub, rbwgruu, wbwrgrr, ururu, bwg, rbggg, gbubrw, wrb, buwbr, grrr, gwgbu, buug, rbrbrwg, bruurrb, brrw, ubbb, wwr, rw, bwbw, grrb, wrwbuu, ruuugru, wgwwgwg, wwb, urbw, rbrwbb, uwub, gbugg, gwbr, rwrrb, urwruuw, buuwg, rww, guburw, bggubg, wug, urggbr, rrwwg, bgw, gwg, ubrgwur, gub + +ubwwwrggbwwwburgrwbugggubwrgwwrwuwwgrbrgwuwwurwrggrbggubr +ruwbwwgrgrwwwgwrgrrbrrurrwggrgrbrururgwruw +gbguggwwuggbubugbugurwbuwbuggwgrbrrbugrburggubr +uwgrrbggugrurrruugrgwrwgubrwrgggwrrrbbbruwb +gwruuugwgbbgbwrwgubbbuguwwgrruubwbrgugbgwwbwbbbrgwbubr +gggwbggwgurugbwbgwwwggbwuggbwgbbgbuwrururwwbuwwbgg +uwwburbrburwrrbwbrwwubrggggbbwwggbbugwbbwbggrrgbwgggu +gwruruguwuuburuugrgguuuwgwrgwubbgruguwrbwubrrubr +bgrbwbbbgwwwbrbbrbbbuugbwugbburuuwbbbbrgwwgrrgg +ugguuugbrubwrwbuwbgwwgbbbgurggwwuwwwbwgubuwruurbr +rurbwbrrbwrwrruurgubuubuubbgwrrwwbbugrwggwurrrbggwrbgwbrug +bbggburbbuggbrrwgugubwguugwbguuurguwrrwgwrgrg +ugbuuwgwgwwurrwbggugwburbgwubuwwbgugruwrubr +rbwurbrggbbrwggbbrrrgbgrurrwggubwgwwwrrgwrrguurug +rgwwrgwguubwruuuurwgwbwrgbubrubwwugbggugrbugggrwwgwbrw +buwrgbbrrgbwbrgwbubrgugwbgbgbwbwbwwrgrwbwgurbuwu +rubbwbrgwggbbgwgburrbrbrwbggbgugbgurbbwbuwbbbbubg +rgggbubwggubgrbgwuugburbubbguwuurwububwubuwrbugbuuugwgr +wuurgugwrwwwgwuwugrugrwbbburbwrruwbwgggguwgbruwbg +bggurbrwbuggugwbubguuwwguwguwwubwwrwrubgggug +rrbgbrgwwgrururwbgbbubururruubggrrurwuurbbgubr +wugrgbbuwuwgruruwwbgwuguurgbwugrwbbuwwgbuwugugbubwgwgr +brwwwguwrubgwgrrguwrrgrbbguuwbrruwwbgbwuwbgwurgwbgb +grggugugrwrwurbwrggrurrbubbrwgwwrurwgrbrgrurbwrgubr +wrrurrwubbgbbbuurbruggrrwgguuwbuurgruwbuugwrwgwuuugurgru +grrbbbwwuwurgwrbrwugubbrrguwbguggwugurbbrrrb +wugbguugbgwuubrgguuubbubbbbgburrwgrurbrbbu +wwuurwwwgbbwrwgbgrrgrwrgbubbuubgwwurwgbwbubwrwrbbbgbub +wggbwurgrurgrrwuugbwuwwuuwgbwwrgruwrgwuwwbububr +gwuurguwbrrbwgbwrbbgubbggrwwrbbuwuuburrwgugbububr +ugbrubwgugwwrugbrgubbbuurguuggwwubgggbrbwbwbwwgb +gbbuuwbrrggbbrugrwbbbbgrurgbbguurggwurwbrwuguwwwgrbubuw +wubbrwgbbgwguwggwrbgwbrgbrbwwugbbbrrwrbubr +bggwbggrbrggrurrgrbbuwrwggrwbuuurguubrwbwuwrwuwr +bururguuuuwwrgwububrrugwuuwwwwwugwwwgrugbggwrgrgrurgubrwug +gwbgrguwurgrbgrwuwgwwuwruurrbbugrwwbbwbwgwuggbbgbgwugww +grggbbwurgrrbugbwbgrrruubwgbugggrwwgwuuwwuwrgugwwwgg +wrwbrgbwbrwbuwwwrrgggbbguuuuubuwurgwguuwurrggbwwrwugwgbrg +gbuwgurgrwwbgbwuwgbwrruuwrrgrgbguguwbrgwrgrgrr +uuurugbgrwrrubwbwbgugguurrguguuurrgrrwbbgwurwwwrbgwgw +rgwrugrugrgbwwburwwwbggwwwwbwbwgrgbrgurbguubbguguubrb +uggrwguwurubwbwrugguwggbbrrrrwwbruugwbrrgurubrgwbgwggr +wbwggwwrbgbubgrwbubggwbwbbuggrrbgggbgrrurwggwwbbrrubr +rrrbguburwgubrbubuwwwrgwwugbrwwwbuwuwrgrburbw +rgrguwrgruuuwrgggbrgwgwwwgwrgwwurubuwurruurrwgubgwbwbgubr +bwwgrwwrwrrgrbuuurrugrugurgwrurwrubgwwwurwuug +rgwrggbrrbbgguwbbwwubggrbggugwrwbrgrruwuurgbwwu +wwuurwugrwuguuubuwwurrgrrggggurrbbuwwbgrbrwwgurgrbggrruwg +ugugwwwrggbgguwgwgwwgbggbwbgbgurrugugubr +brrubwwgugwrrugugurruwrwbuuuruubrbbguwggurbrwuwg +wgbbuwbgbgwuurwbbuuwgbuurbuggrwwugbgwgurwu +gwwgguuugugruubrwbwbbwwgurrgrrgrwrbbuguruub +wbuuuwrbbbbbbbwgwubuugggrubwubgurbwugrgrubwrw +gurwrruwbguwrurwrbwrbggbbrwwgrbwrbrbururbubwbrurwwbubu +rrggbbbrrrrwbbwgwrbbwwwwururgrwbgbguubgbwruru +bgrwggurgwuubbrbgwgwguubrbwwwbrggwgbgrbwrrgwwubrgug +bgwwgwgugrgrgwwbbgubwgugbuugrgrruugwwggwbr +rbrugrgurbwwrburbgrugugrubbgrgrrugwggwgubbrru +urwwbwgbuguurbbugrwrgugwwwgwuwgbuwwugbgbgrrrwbgrggrwbwu +wrwubbwwrgrbrurwrgwrgwuwbubrwuugwggbwbbrrugrgbwwbubu +rgbrubuurubgbwgbrgwrurgbggwgruruwwruurwugwwwurbbgwburguur +gbrruwrgbwwubrbwgruuwuurbwugwruuubgruggwubugrbrrbrgwburgbb +bggbwbgbwrgggrrggrbgubgwbbuwwrrwwggrwruwrbbbb +brwbwrgggbbuwwrrgrgwguwbbwuburwwrgwggrggwbrgwububrrbr +burburuwgwbguuwwugububgugbrbbbwwbuwggguwgwuwwbwugubr +uwbrwwgbwwgbbrguubbrurbwgwwwgwugggruugrwrbwrugbw +ggururbbrbbuubwbgbwurggggurrwubwurrrrrrgrbwgubgwrwbbgrggw +wgwubuguwuuggwuwwgugbgugbwbgguggwugugguuurwbgwwwbururgwwru +rgbrwgurwbwwgbguuuubuuuwuurrrguwwbwwgbruwbubu +brwgbwwrubguwwbbruugbbugurbrwgbrgbrrwguubwuuuubgggwwgr +gwrwburubgwwwgggubrbrguburbuuuggbwrrubugrgbguuwgubrgbr +uwuwgwugwuwurgrrgwwurbwubbgbubgwwwggruguwbgwgbuggrrrbuwggr +wbwwuurbbbubbbbubwuwrwgwuuguwwgwgrrwrrbruwbrw +brrbrbbbuwbwrrbrrwurubrrgrwwbwuwbrwrwuururwgr +wwbwubgbbugwgubbuwrugbwrurwwuruwbruuuguggbwrurgruuugbwwgww +gbwbruuurgwwgwrbgrbrubgwbbruwurwrgurbugwubbuubuwguu +gwwwugurbrburbbbbugrwwguwgbuugrgubgburuururwrrubwugurr +bwggwurggguubbbggwrbbuwgwbrwgugburbrbwwrwu +gurrrrgburbwwguuwburbwgwgwrwgwwwrrrbrgrgrwwbgg +wbubbwwrggrururgrbwuwuwrurggrwbbwwrgwrbbguuwwwbrrububbrubr +ruuwbrguwwguwwrwrrrbwrrgruggguurgrbwruugrrgwrwwbwrrbrbwbubr +grgwubggbbgwwggubgbwwrbbuugwrbwuruuwubggwuuw +bwwwurbburrgubbggbbugubwbgruguwugrrbggrurbwwru +uruuugbbbuwrrwbugbggrwwurbbrbrwbwuwbuwuugwuwrb +ubrggrgrrbbbbrbbbwwuubbrwrwugbrbbrggggbgrrwrgurbbbgb +grwugbbbwrburgwguwrrbbgwgrwwbubrbbrrgbbgruwrwurbrgugubrwbr +uburrrrwugububrbwugbugwggggwbgwugugbbrbwbwwggbbg +ruwwbbuwwwrrbwbugbrurbrbbrrbguwrrrrwrwbwbubgggbbwrurwrbw +gguugbuburbrggwuburwrrwggbbrwgguwrrrwbugwbwwuubrwggbubr +gwrbgwuwrrbuguuuuuururgrwbbbrurgbgbuuubbrbububgggbrubr +bbgggubgwgrwgguubuurbbugruwbwgbrbuuugggbwbburwwruuwwrwg +uburbwrwguuruuwrbuwrbwruuwrgggwrgugurbbgrrgrbguu +rgubwbbbbgwugburbrrugruwruwgwururbugrrwrguu +rbgbgrgwggwbguggwuuwbuwruguguwwbuwwuurbbgrruwbugwwgbrg +gwwbggwwrubwurbrubgurgrrwbgrwuwgbwuwrbgbwbrwrgbugwrgwrgub +uubwwrwrbuubbwguuwwrurrurwbgurgwuuwbgbbrgubggr +gwrwgwwbwrwugrbwgrgbbwrrrwbwrwgwuwbrbwrugrwuruuwrbbuuurubr +brwuwbrgbuubwbwwbgbwrwugbgwgbbubrbwgruuwbwubgururbuggggur +gwwbburwgwwrrgrwbwurrwbugrgwwwbgbgbwwwbrgbrwugbrrub +wrbubbrgwwwgbgbuurgrwurrgwgrubwubrggrwuubbrwrbbrwgwrggbwww +buuuwgruggwwwgggwbggwwrbruuubruubbbrwggggrgbbrwrwr +ggbbwgwurrwuuwubrbwuguggbrugrgggwwrgubbuuwrburrwgr +rwbwurbrwbrbuugbuggubbgggwwbrgbrrggugruurbr +bggrgwuuguuwbruuurrwwbgwbgrgrbugbbrurbbwgurwwrwrrgr +uwwuwbwuuwbwbburburbrwbrggbggurruurwrrwuwuubguuwbrbrgubr +rrwuwuwwruwwbgwrgbbbrbrrbguguurubbwuurguugubbr +wrwrbwbrurwwwbggwrbwrrrgrubgrurrwubwbugrrwrbgguwubruu +rwuuubrruuwuggrruubrrgguwwwgbwbrgwguuwubbguru +rbrubburggbrwbgrwrgbruggrbggrurrrwrbuurbubbuw +rbbbwwrurrrgubbrwrrgrrwuwgrrwbbuuubgrwubgbbuug +rrwgwbggggbrrrgubbbrbbbwbwwbbbwwgububwugwbubwbrbwubwwgubr +urggbwurwbwwuubrwuurbuubbgbwuwwugrubrubwbwwrwrrubr +uuwrgrgbrwuurgrgrrbbbwrbubgwgbwgwbuuwgbrurburbrbrruurub +rurrrgbwwbbrubgrbwbbggrwubrwurubgwgwwuwrwbrbwgugugbubgbg +rwurbrruwuruburgugwwbggrurugwggbgwuwgbwwurbuub +ggrwbbgbuburwguuuruwbbbrububuwbburugwgrgwbbb +wbgbrugurgbugwwruwggubrrbgruguwrbrgbwgrwuburrrurw +gbwugugbbgburgurbrugbwrgbwwwgwurbbrwwgugrubwgrwwbuugrubr +wrbuuwbrubbbrwwwwrgrrwubgrrrwwuwubrrruugbrurrrgugg +bbwwbwuubbgbgbrrwruwruwbbwggrwubguruwwwrguggwwwgrugrgwww +wwwrbwrgrbugbrrrbrrrwburuwguruwwwrgrbrugurrwbug +grgbbwbrggrbrwrbuuururrwgruggwbrwwgbwbrwgwgruggbggwrwbbggg +wwurgbbgwrrwuubguuugguubwbrgubggwrwggwbwwrgrugbwbg +uwugrgubrwwwgugwrwgbggwbggbwbuuurguwwggbrrgwgwuggrgruuu +wuwrububwgrgbbuubrwbrguwbwubbwuwwuubggwwwuggbw +rgrbgwubgrrwbbbuwrwrrbbwwburubbbguwbgrbgwgrubggubr +wgbwwgbrwurwrwrrrburbwgurwbwbwbbugrwrbguwwgubwbrugruuu +uwrrbbubbggbgbwuruggrugwbwrrgrubwbrgbwbwguurrubrb +wbggwgggbrbwurwbubuwwggrwugbgrgruugrurrrwuuwwrbugubr +rbgwrrurrurgrrgwburbrgbugbwurwbbgurubuwruuwbbwbwgr +ruburgwrgugurgbwwbugrbrruwrugugwuwwbguwurbugguubrwugubr +rwwuwgbwgbggburgwwugrrbbbgwbwgrbgrrwgugbgrr +ugbgbggbwwuwggrgwrwwwwuurwrbwbwrggbwwrwwrrrbwwuwbrgbggurb +uuwrwrwuwrguwuwwbbwbggugguwrrbbuuurugrubr +gggggbuwbggbugbrrwubrrbwuuwbbrugbbwrrgbwrugwgubr +bbrgwrwwbggbbwbwrrwwbbwubgguwgugrrgbrwgbrgurggwwbuwuwwu +grgwgrbugurburbrggwugrrbwwguwbwgrrrwurwbbbggwbbbggu +rwbbgwuwwrwbwbgrbgrrguuwbbrubbgrbgbbuwwrbggubggrugur +ubwrgrwwgbwgwbgwbbuwbuurgwgruwrrurubwbgbuww +rggrwrbbwwrgbbgggurugugugbwbuurrrgrguugwwwubgwugubr +grrgruuwurgwrbwbrubwugrggwgubruuubgwbrrwggrbrwr +gubbruwubwuwwbrbwgbguuwbguwwgwwbbwubwwbwururbbrwurru +gwwbbuuwwrggruguubbbwurwwgwwbrbrrubrrbwwrrrbwrrgburwgwg +ubrugrgurrgugwrubwrgbbuwwgggugwuugruwbbbbu +uwgwuuuguugbruugwbrgwugburwbrbggbbwgbgwbrgwwbrbbwbbww +wwbrguurbrrrwbwurrwrgwbrrwurrgwwuwbbbwwwgbrbguubgbguwgu +ugggrgbwwwrwubbbgurrwuwuuwwwwwgrugwubbbggugugrrbubr +wuwbguugwbrgrgugwuwbgrgrgugurgbbwrrubruguwrwbburrwgbuwwr +gwburgbgrwwwwrrubgwubruggrubgubwruwwrwruggubrgrwrubb +gbrwbwgwwwbbggwubwggggwbwbuwuurwggwurbwwgburuw +uurgurgwwwgwbrgbgbwwwrrgugrbwwuguwbwbwwuwurb +urrrgrrguruububwugwrwgurggwbbrbbrguuwbrbrwbwburgrwb +ruurwgbwbwrbwbgrwrbbwggwrbbgrubrbwwgbrwgbwuuuwbuwrwrwwg +gbuuuwuggrwuwgwubbububbuwgwgwrrwgguwwgwgurrwubbb +urrubgbrbugrgwguwbubugwbrwwrurrrrwgrwuwuurrru +gbbrwbggwbbbwguwwrwwwwgbrbrgururubgrbbuugbwggrwgurbrbuuub +wgwgrugbrgbbwuuggbugbgugurbgruuugrgwwwuugwr +guurbbbruububgrurrgbwuwwrbugbrguwrwubwbwgbwurrrguwuuuwrugr +ggrrrrwwgwwbruurbrgguguwuuurgbggubrbrwguurubr +brgbbbwwruwrrwbbbbwwwrrbwbrbwbwubwbrrbwgur +rrruwbwbgruugbugurgrgwgwbrwgwgrrrgbbgruugbwuuggrrubu +wggrbuwbuurbwububwrurgrugwgggwruburbrwrrgwu +rubrbuurggrwwrggrrguruwwbugbgugrbrbbuubugrggurw +rbwrrrwwugwuruuugwbwbwwgrburgruubbrurwwrubr +gbgwurwurrubuubbbbrbubwuruurbwwubgrrwbuuburgrgbwwbuug +gbgwbrrwurwrrubggwwbbuwgbuggubwrubbggwbuuwwburgbrbgrgrwrrw +ugwbggbuwbgwrwugrbwbggrrggwbgugruruwrgbguwrwuubgur +urwggbwggrgggwgubgrbururgwwbrgbubbbgbrugubgggwrbr +wrwbwuguwgbrwuuwwbwbbgwuwwgbuuwbubuggbwwbgwwurrbrgwr +buwubwgbguwuggruurrurgrgrugrwggrgwrrrwbwrwburugwgbgwwg +gruwwugwrrurbggrrbbbbbuguuwurwbgurgwgggrbubggbgrwrwwwbr +uwubwubgwwuwuubbuburruwwruwbubugruurrbrburwgwbbwuwwrgwr +wuwrugruggrbgggwugwwubuuuwgbbbbrrgbuubrururbrrurwwruurbggr +wrrwwrbugurgbuwggbguuuwbbruwugwugugwruruubbrgbgubr +bggwuggbbbgurguruubgwbuwuurgrrwurwwwwrguwwggbrgbrwgbuwuub +rwugugrbrgbwrbrugbwwrrbrrwbgrwguwrgubgubwgbrgubr +bwubgwwugbwgurgwgbwrbwugbrgwrgwgwwbbubugrwbggwbgwubg +gbwbuubbubbbwbgbwuburbbwubbwwwubuwbrbbrurwwbggwuwgrugwbwrubr +rbbbrrgbugugwgbuwwbrrbwwuurwbwwbgbgwuububr +wwbubggrubrbbwugurwrwbuuurgrgwuggbbgbubr +wrwrubbuuurgbbwgrgrugugbwuwwurbgwwrbbrbwgugrurwuruguwbbr +buwgwgggubuwrrruwgwggrrurwuwrbwgugbrrgrruuwrrugugw +rgwbrubrwwwwugugbbgrrruwgrggubwgrwwrbbgugbrugwwguwr +gurbruguwwgrwrwubbgbwwgbuubbruuuuwgwwuwrrgubgbrubrrbr +ubrbuuugwgguwugwgbgwwburwurrggrggubrurggugwwbbrrgbr +ruububuuwbggrbugrwbrbrwrrwbruugubrurrrgugguwbr +rbguguwbbbuwwwruruwbgrugugwbuwbuwwrbugwrrrrubr +wwgbwuwwgrgurguwbrrrwbgwwggbggggbuuwwrbwwgrwrgurgwrwrwrwww +wbgrgubguwrbwbgggbwbrwwrgubbrruuugwgbbrwggwwbwru +uugbwrgbrwrbruwguurggggugggbbrrwbwbruwgrubwgr +uwwbbuwguggrurgguurbuuuwbrguurbbbrrbruurgubr +gbguwruubrurwrgbrwgrgwugbgbbgugbbrgbrwurggb +ugbuggubbwgwrruubwugwwugbuwrbrrugrwgrbrbrggbwwuwu +grrwgwbubuwwuugrwgubbrwurwrbguwrrwbwwwrwbggg +bgguggwbwrbwrbubbbubgwgwbuwrwggwggrbuuwguubbrbguugrurrwu +rbgrguugrururggwwwurwgwggrrbrrwguwubgurwubbbubrrgwu +ubwgururrugggbwuuwwbruggubuuruwwbruurrwuwuwrwrwwuuw +wuuwrwburwgwubrbwurbbgrbrbwuurgbwbbugrbgrgugbrbrbubgguwr +uugbbrbburrwwwgwugwwrbgrbbuburuggbwrrugrbbrbugwgwgwrbg +rubuwgwburbggbugbggbbuggurwbgrwgwubggbgwwgwwr +bubbrwgwwwbrwggrrbbrgrbgugggwbwugbwbbrrgwbgggbbuwrbgr +bggbwgubgwrgrbbggwgwwwwgrrwrwwbbugwurugwwgubrbwgbgbb +wgrgrrrgubwgrwbguwrgbwuggwuruwggbuggwuwugrwwugguwgwburrrg +bbwuwwbuuwbbgwuubbrrrbgubrubrrrrruuuguurguuwbuwguubu +uugwruwubbugguubgubgubwrguwgrrwbbbbruwbwbwub +wbrwwgubugrwubbuubgrwwwrubgrwubrwgrrbgguburrubbwuggguu +bbrwggwrrrggggrwwruggwrguubwrggrwbugwwuguw +wruruubrbugbgbrwwrrgurrbuugbuubuwguuwgugru +gurbwbbrububuwwgwuurwwbwuuuwbuuugbbbuururrwuubbwwgb +brrrrwurbrrbbbbbuwbrwgrwubwwwbbguwbbrubgugugwbburrbburguu +uguwggwubbgurwwrrrgwbuwgwbwwwgubggruuurgrurgrwrr +bgbbgwbbbwgbbwrrrgurbuwugbwuwbgwuurgbbrrrrguwwuw +wrrruwuwwgrwbrwbgguuubwubuggbrbrwwgwbwrbgwrwbrwrburw +wwgurwrwbbwgubburwgrguububbguuwbrubrrgubbbr +rwbgwwbbrugrgbbgguruwrruwbbwuuuuuubgrgrgbuurrrurrrggbu +rugbuuuuugurwgrgubggbgrgwggwbuwgwrwbubrgwgrwwgubbrw +wgbwbbrbbbbbwggbuuggguwwguwruuuwwguugubr +grwuwbwbgbrwgwggbburwbrurbuwurwbwwugwwwbwwwgggwwrrbgu +wwbrurbgbugrggrrwgubggubwrbbbgbrbwrwwuggbgruububbwuwgu +bwuburbwbuguuuuwrwrguuwrbbuuwbrrwgrrgugrrbbuwbgwugwgg +wbwguubwbugruwgburruuwrbbrwbwbubrbwwrgrbwbuw +rgwurubrrbgrbburwbgugrrrbgbrbgwruwubbuuwrg +wbgwwwbrgurbbrwuuwbggwwgugwrbbgwugubbgrwbgrrgwgg +ugugggrggrwwbubrbrbgbgwgrgbuburbgggbugbwbu +bgguwuwbbwbrrwburggggbbwrrwubwuuuuuurubr +wgbwbrwggbuguwwuwrwgwgruwrrgwbgwwguburwrubububrguuguw +wbwrugrgbwrurbguwggbguwrurrgrwwwrrbubuwwwrwbwwwrgrgbrr +wuguuubrbgwguwwrgbwwwgbubuurrrgwrgrgbuugugrrbwbugrwurgg +rgrrgwuwugurgbwrrwrubwbguwgwbguwugggwwgrrbrwrgwburbrwu +bwbwwguwubrrgbrrbwrwwgbuuuwbrrgwbwrrgbggwuwrugrwwbwbburu +uggwuwruugwbbruwuggurgwburwrrgbuurwbbgrwuwrgugguw +wrggrbuuwbbbwugbbuugbgbwwbgbwuwrurwbugbrgurbbubgurrgg +guwbbgbwbugubgrbwgrrugwbbgggwwbbbrwrwuguurrurwbrbwgubb +brbrurwburugwbwgwgrwbrrwggbbbbubrrubwrbbbbwgurbbbwwbrbubr +wbwrubgruuubgbrurguuwwbubbwuuwgrbugbguwrbruruwgrug +bgwuugrgbuwgwgbuubbrruubwwwgrrububggggwrrrbgrugwguburrrbrr +urgbgwwgwgwubbugbbugwbrrguubbgrgrwugurgugrrububrwgwbwub +rwwrwbggwbbwwgwgrbgrbgrgugruubgwrrwuggugugbgu +gruurrwgubbggububbrbrrubgrguwwuwbgburrwrrw +grguugwrrrurbwgguurbuwrbuwrwuuubruggbbwbubuubgwbbg +ugwuurwggrwwwggbugwgbwurrrbbgwwgbuuwwburrbbw +ggwwuugrgwwrbgburggrrgbbbggrrugruwbgrgbwgbwbuwbuurgrbru +urwrrbrrggububguuwbbrbrbruwbbrugrgwubuggggrgwgbubbwburuwr +bwwwgrguurgwgurururgwbrwrurrgbrrrurwrguuuwgrbrwwubuwubrug +wrwbbwgugubbwbwgbwggrruuwrbrbggurubbrrrgbw +bururrwrbbgruwuggwgrwgrwwgwwuuwbbbgwuwgrwuwwbubgbgwrrrbw +brrrbrwgrrrgrwrrugbugubruububrwwwgrwwgwubbbrrggrugwwbbgww +rbrbuubuurugggubugwrgbggurugwbruwurwuuwgurbbbrwgw +ugbugrrbwwbwrwrrwrurwwwgurgwgubwgwwrrwgrbbrbgwbbu +uurbruwwwbrugbwwgrubrwbruuuggrbwwggbwbugurwgwubbrbbgwbww +uruwugrubuwguwurwwwubruwwrgwrwuubrggbrguuwrrbggru +wbbrwrrruwbbbwwwurrubuuggwgrwrgggbwubgruubwrruwgubr +gwwwgrwwgururguwwbrwgwuuwrubgbwwrbwubbbwwbbr +guwbrbwrwggugggwuwgurbrruubrbbwrrbwuguubwubuurbgrbuu +bgguubbwgbwuwwwrgwgwbuurwgrbrwwbguuwwruwgrr +bbrbuwrgurrburuwrwrwurugrwwwbruuuwrrrbbubr +burrurbbwurrrbbgrubgwrbbrguwrwwwugggbruuwurgw +rgguruuwgbgbrwwwurugugugurrugbbrrugwgbuwguwgbuugwbubbbbrubr +ugbwubrwgbggbugwuubwruurwgbrrwgurwggbrwrurubbgwrru +wbgugubuwbwrugwwwguburguugwrwgrrwwgrwwrwwrggbbgubr +rbwwrgwguubbgrbguuwggrbbgbugbgwurrrrwbwwbr +grgbugbwugbbuggwgwwurguwbwuwwurbwrurrrwgwwwuguurbwgwub +ubwbrurrwguwguburrubrrrwwwggwgbbbwrurubwbuugbbrbgwuruwbubr +rgrgwrgbguuugwgrrbgrubwwwbrbwuguggbgbuwuwuu +wugguubgwbbbwbgwgbwrubuugbbbgwrruwwugrbuubbuubr +bbrbgbwurubugurbuuruwuuuwbwrgbubggbwbuwwbwbwuwbrbwrbg +brbubwrgugwwgurbbburbrrbrgwgrbugubrguuuurgwwgrugbgubr +ggrggwguwwuuggurugbwwwgrbbgrburrwguubrwrbg +rrbwgurrwruurwrbugbubggbggugwurbwgbgwbwgbgwrrbrgubr +wwgwruugubbwwuwbwuuwbrgbbbbwwuburwwugwrrwrwugwrrgubr +wrgwurwuubruwbuuwbwuwbrggrbgrgbugguwrbbwbu +rgbbrgugggwurwurggbrugwuwggrbbwwrgugbburuguwrggrwguw +wrbbrwbgrbwbrwgrrwrwurgwggbbbrgubwwgubbrwuwbgwbrubr +uwurbgbwrrbwbrbrubuurgubwuwrrbrbbgwggwrubbgwbwrgburrrggr +brugruwbrburugbbgwuguurrrgbgubrbgwwurubruw +grguggwrgbgbwbuurwbuwbgbrwruurbburrwggbrubgrwurbwbgb +ubugwrgbgrwgwwgwguugugrbuubbrguggbgbwuurbwbburwurgwbugrubr +bgrwbuwruwrwgwwggrugbwrwrwggugbbuwgbugwrwwgurrgwwbbubr +gwbuubrrwugrrbuuurggurruugwbwwbrrbbrbwbbwbbbr +rbguwgbwrrgbububgwbrrwbgwwrgbbrbuguwwggwbu +ubwubwrwbgrggggrbrgbruggbuubwgwuwwbrgrgggubggugbgg +wuruubbuugbbrwubguwgrgwbbgrbuuugwrwbgwgwgwbbwrgrbgrbw +rbbuwuwwrwgbwwwurgwrurggwrrrbrruuwbwwgwgwggrbrrrbbwgrwr +wrgbgbgrggbrurrbrwrbbruwbrwbrrggurrrguwuubwuwuwb +bbrrubwbwguruggwrwrbrggrwwgrgbwrwwgbwuurubrurgugwrbgbubr +rbwwurugwuuwwbbwgbbugrbbggbrguuuguwrbuuruwu +ggrrwwruwrbugwgurgrggwwbugrgurwbwuuwwburwbubub +rrruuuurbwbwbwguurgubrrrgwbbwrrububbrrbbbbrugwwwg +uguwwwbrwurruuugrbrguuwbgwububugbgwruguuuurbruwrrrgwugb +rggrbuuurrrwbbgwbwruuburbgggrurguwbgbrrruuguuww +bwbrgububugbrwgggurrbubbubbgggwwburgbrubr +rrurgrruwbbbwuwgrurwurgbbggbuwbbgrwggrwbrrrgwuubr +rrururbgbuwrrwuggubwwwgbrurgubgwgwbwwguuwgubr +uuguwbwrgbugrbgwguuwrgbrrwuggrwwburrgwguwbrrwubru +wbrbgbwwbbbrbguugbrwgbbuuuugwwrururrrgrwgw +ggwurrgrburbbrrrguwgurgwwguuuubggrubbwguwbru +rwruwrwbbbwwbbwgwgwgruuwbbguuuggwbrbrurrgrgrgwuw +ggwwwrrrbrrwgbugrggbbwrrrbggwuwgwrrwbgwuwbuguwuur +urgrgbrgugugbbwggbugwwgrubgrgwbwurggrwwrbbbub +rgbrwgurbbwbgbbguwwrrbbguwburuwrgrwubrrgguwur +rggubwuuwgugubuggwbwrbggrgubbbubwurwwwurwguggbbgubguu +wuubgrrrugrgbubuwuuruuurrwbuuuwburrubuggruguwurwbbb +wrbbuuggrbrbwbbubugrubwurgrggwgrwbwgrugbubbbgbbrgwu +gwuwbrwrwurubgwgbrwruguugurrugwrgbbubgrurgbrgbrwbwgugbubr +gwuggguuwwwuburwggruwwbubrgwugrububrgurrgu +buwgwwgbwuwrwugubwgggbbwuwrurbgugwrgwrugbwgbrgu +bgbuguurbrugubuggbgrrubbguurgbbbbburubwgwbrgbubrw +bwbrwrguburrguwrubwrwguuugguwbbgubbrbrburugbuugrrrrw +wruuwbwbgggwrwwuwwugbbuuburbwurgbruwbggwgu +bbruwrwugwurgwwwrbwgbbuuugbrgrwggwbubugwwgwwubwrbbrrguggru +wugrrugwwbggrbggrrwwwgbrbgrgbuguggwuwuwwubwbruurbgwrbbwrbg +grgwuwruwbgwbugbuuwgrurbwwwwguuwuwwuurwbuubg +urbwuurggbgwgrgburbbrubwgrbrrgrbbuggbrwwuuuuuuuwbu +gwwbgbubbwuwrwwwuwwrwrgubwwgggubrugwbgrwwbbggububr +wwwugwgbwwbwrrrbgrggrugugwruwbwbwwwubbbrwuguwuwgurrwuwrr +wubrgwwbgwbrwurugrbrgrururrugrbrggwgbwbugbrugguggurgwbwugb +rbbrgwurbbruubgbbgwwwbwwwurbrruugwubrwuubbuwgbguwwg +rurrwgrwbbwrububrruwrubuwugwrbrgbrrwuuwrguwgwururw +ubbgrrgrrrwbwgurugrrgrwrugwgrwgwruurrgwguwuwubbugggurbu +rrbbrrbuwbrbwwwbbuwgwwgrwbugrwbuwgggbbbwguuwgbburbb +wgbrbrrbbugbrwbbugwrbwurbwugrguwwrrurrbwbrguuwrurwwwbguggubr +bwguwgrrurbbwuugbbwgwwurgrrrwwrurggwrggrubuu +ugubrwrwgbuwwgbgugwgrrubuwruwgbgrgbubwwgwwwurr +rurrwgrwrbwwgrbuwrwguuubbbbguurbgrugbgrwurwurrwbwgrwbbuw +uwwuugrwubuwubuuubrwuwbbuwwrwubrrbgwwgrbuwgggubr +gbruwrugbbubggburwgrrbgubbuwbuwbbgguwrggwrrrgur +gbuwwgrubbwwgugwwbgbwrbwwgrburrgruggugrwwwrggurwggbwbgub +ubguuruuwwruubrrwbwuwggbburgwrbwggbguburrrb +bwrrwggubgbgbrrwgruwburrubbrrbrugrbwwggbrurwgub +rruruuwgguugrugwguuwwgguggrwuuuwrbgbbuwwruwrwrrrbubgurg +rbugrrbwrrbrbrruwbbubrubwbrbgggwrgbbuurgrgbwbb +rggwbbuwrwwuwubbbrwrgwruugbwgwgwgwwuwuwbggwbubr +ggrubugurrbugwgrgbbrrwrwgrwbwgubwgwubwuwrrrgb +grrgbubuwwgruwbuburgbwgbgbgrbwubgwbwggbugwwuwbrguwrg +wgwwrwrgbrwugbuwuubgrggrwrurwwgurbrwuurbwgwgbgggubr +bgbwbrrurwggbwwugrrgrwwrwurgwruuuuuwwggrgggwugbrrwwrwgg +wwrwrgugwbwbuguwguugwubwrwwbwggggwgrubrgggbu +wrwgrubrrrrbgwbbwbwuuwrrwruurgbbbwbwbwgwuwggubr +wrrruuwggrwwwwrgugbwbrwwbwuurwguugugbbgrbb +guwguguwugrwrugbrwwrwuugwgrwbuubuwbbuwrbrbbbbgbwwrbrggbwb +ugrbwbgwubruwwgwruwwgbgubgbguggwrrgbguwbrbgwuwg +wrwbubrwrruburubwrugbwwwuuggbrbbbwrrbwgbugurbuguwugrw +rgrurwbrbwgwwrbwubgwrwbubgbgbrubbwbuuubbgrbgbwbrubrwg +wrbbgbrwrrwurbuwruuuugwrgrwgrguwwubwrugbwrwwgwurw +uuwuugbrwgugbgbrrbwrgwbwubggbrrwwwggwbubuubrbwg +ggwruwrwgurwggggruurugbgrrbbwbrugguuugrbbbwg +gugwruwrrubgrubrgburwrbbwgbrrbuuwggbuuwrubrbbgbgbbrg +gurguuwbbbgbubrwgwuuwwwgbwgrwwrrubgurugwwrbwwubrw +wwubuuurbgwbwubggbbrbugbgwugwwuwbgruwwbbgubbguuwbwwwwbbubr +wugwuurbbwgrwrrrbrwbgwrrrwbwrwguwruuuwwuwrgrbgrbru +wgrbububurugwwrbrwrrwbwbggrurwwwbrwgrbuuurwwwr +ubburgububwrrbuurugwuuubgrrbggwrrgwwrgrurubrwgrrwr +burrwgbwggwrrbgwrgwrrgbbbbrgwubugwgrrugbrugr +gwggrguuwgbubrugurrrwrwuwrugwuguuggbbbwrwg +ggrbwuurwbrwrbgbbubwbgwurggrgguurwrbuugbguuwwrrb +rurrgrwuwguuururgurbgwgruuwwwbbururrrubbruugbbbubr +urgurbwrrgurgwwbbwwruguwgbwrubwwbwbbrwuwugrrwuw +ugwrurrwgrubuuuwwwrrrruwubugwwwrgbwrwwubbggrrwgwuwbwwwruu +wuwguuwwbrgubgwbgruwwrbbgugubgbrgbbbwurgrbwbuwrbbubr +rwrguuwbuwbrgrgbbrrbbwubrggrggwbguuwurgggwuguubb +guubrbwwrrgbgrwwrgbrgubgwbggrubuubgubruubr +brubwwgruguwbwwugrwubugrwgbbuwwuwbgrrgbgrrgw +rgrggwbwurwbwrwwubggwrbbbrgbgbwbgrurgrurbgurrgwgburbgbbgbu +rrrrggbrwuggbruwwwgwggubwwuugbbubbuurgrbgrgwrwrubrg +ruuburbwrruwwrgwuwbwguggwguurgburwurugubgrrgbw +urgrbuggugrgubbwuwwwuwuuuguugbrurgwuugrwbgggub +rbrgrgrrwuuwubbbgwbuuwbrbgbrgwuburwrbuuwgbgrug +gbrwubuggwruuwbwwburrurggububurbguugbuwrgggbgubwrugwurwbbr +buwwbrrugwgbgurwbgrwbubwrwbruubwgrrwrwrrrr +ruwuburrrgrgbbwggguwbwwruruurgugwbrwgubwguuwwburg +uururubbrgrugrbwuurrgugrruwrgugrbuuuurwrwwbbgubr +brwrbugruwbgrwurbbbbubbbbbbgwwuggrwrgwrbrruubrbwwrwuurr +rrgbggururubuggwrurwrwwrububruguuurgugbbgbugwggguurw +uwgbwwwrwubgbwbrrgwgbruuwrurrgrwgburwbrbwgbrrwrrubr +ubwruwuuuuubwwrwubguuwrwrrwbuguwurwrbuurbrwruwuurwubgww +gbbbwggrgwrgubgrrrwuggbwwgbwbubrwbgurrgbrrrguuw +gwbwugbwgbubwwbwbuuuuwwggrbgwuggurgwgubr +wgbwugrguwuubgrburbwuwguurwrggrbrgburubr +ruwwgbbuubgrwubgwwbgugwbbrugwuugurrgrrwbgubwgwwrrwbgbgrbu +wurrrguwggwbwuuuurwbbruwbuubbbugwgwgrwbgurrrrburrwuwbwrbb +bgbbggwubgbgwwguwwbgrrgrbrgbbbgbgwgbggrrbwbuubrgguwububr +wwbrwggbbuggruurrbuugwbgbwrugguuurguugwgwbwguug +bgbrbrrrbwbuuurgwuwbugugubbgbruuuwbwwgruguggbg +rwbuuburgbuwuuubgwrbguugbwrbgubwbwbwrrgwurgbwg +wbggrwugbggrrbwwwbgwurgbbuwbwbrrrbrwbwrrugbwgggrbw +bbwbgugurbrwgbrrgugugwruubbwbgguwrggrbgbgwrbbgrbuguwrubr +uwgrwbwgrggwwwuuuubwwgbbgrbrbwggrbbwwbwrrrbwgbwrurgurrrrubr +guwurbbwgrwurwuggwwgwgwbwbuuwgubuguggburbruggbrgrrrw +ggbrubgwgubbbrgruuwggwbrggrgbuguwbwwwurbggwrwbruuubrww +uwruwrrwwurwggwruurwbubrrbgwrbwruuwwwrgggwuuur +grbgwbrbbwbgbruwwbbbrwgurbrgbgbbwurgugwbgbwgbwurw +uwbrrggwugrgwrrgbbgggbggrugrbggwbgbrwgwuwgwubgurwugruwgur +uubggbwwwggubbrurubbgbgrwuwuuurbrgubwbwrbuwwgwgbr +gbwwbwwbuguwugwrurrbbbwurwurggurguguguruwuwgb +uurububbgruwguwurbrgrruuuurruwwuburwrrbbgrgugrgggwrwrrg +rbgruwuugbgbrgrgugrgrrrwruuggubbwrbruubbbr +rrrrwugrrrrrubrbrgwgrrgwrubgwuuuburburburwrrgbwu +ruwgugbguwuwgrwbrbgwruwurbugwwgbwwugbrrbwguur +ugrrwbbwwbwwbbururwguuwwurwrguggggugrwbugwwgwgg +gbwurruuubuurrwurbuwwwubbwbwbbrgrbrwbbwrrrbruwrwubbrbgwbwb diff --git a/inputs/19/test.txt b/inputs/19/test.txt new file mode 100644 index 0000000..ad43a74 --- /dev/null +++ b/inputs/19/test.txt @@ -0,0 +1,10 @@ +r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb \ No newline at end of file diff --git a/solutions/18.zig b/solutions/18.zig index 0fc12c6..dd5b257 100644 --- a/solutions/18.zig +++ b/solutions/18.zig @@ -155,15 +155,15 @@ fn buildMap(dimension: usize, allocator: std.mem.Allocator) [][]u8 { return map_list.toOwnedSlice() catch unreachable; } -// test "partOne" { -// var gpa = std.heap.GeneralPurposeAllocator(.{}){}; -// defer _ = gpa.deinit(); -// const allocator = gpa.allocator(); +test "partOne" { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const allocator = gpa.allocator(); -// const response = try partOne(true, true, allocator); -// print("Response is {}\n", .{response}); -// try expect(response == 22); -// } + const response = try partOne(true, true, allocator); + print("Response is {}\n", .{response}); + try expect(response == 22); +} // Outline of logic: // * (Without any bytes fallen) find the shortest path. Make sure you note the _path_, not just the length diff --git a/solutions/19.zig b/solutions/19.zig new file mode 100644 index 0000000..8e47202 --- /dev/null +++ b/solutions/19.zig @@ -0,0 +1,88 @@ +const std = @import("std"); +const print = std.debug.print; +const util = @import("util.zig"); +const log = util.log; +const expect = std.testing.expect; + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const allocator = gpa.allocator(); + + const response = try partOne(false, false, allocator); + print("{}\n", .{response}); +} + +fn partOne(is_test_case: bool, debug: bool, allocator: std.mem.Allocator) !u16 { + const input_file = try util.getInputFile("19", is_test_case); + const data = try util.readAllInputWithAllocator(input_file, allocator); + defer allocator.free(data); + + var data_lines_it = std.mem.splitScalar(u8, data, '\n'); + const towels = parseTowels(data_lines_it.next().?, allocator); + defer allocator.free(towels); + + _ = data_lines_it.next(); + + var known_valid_designs = std.StringHashMap(void).init(allocator); + defer known_valid_designs.deinit(); + var known_invalid_designs = std.StringHashMap(void).init(allocator); + defer known_invalid_designs.deinit(); + for (towels) |towel| { + known_valid_designs.put(towel, {}) catch unreachable; + } + log("Parsed the towels\n", .{}, debug); + + var count: u16 = 0; + while (data_lines_it.next()) |design| { + if (isDesignValid(design, towels, &known_valid_designs, &known_invalid_designs, debug)) { + count += 1; + } + print("Checked a design. Known valid designs now has size {}, and known invalid designs {}\n", .{ known_valid_designs.count(), known_invalid_designs.count() }); + } + return count; +} + +fn isDesignValid(design: []const u8, towels: [][]const u8, known_valid_designs: *std.StringHashMap(void), known_invalid_designs: *std.StringHashMap(void), debug: bool) bool { + log("Checking validity of {s}, with {d} known valid designs and {d} known invalid designs\n", .{ design, known_valid_designs.count(), known_invalid_designs.count() }, debug); + if (known_valid_designs.contains(design)) { + log("***** Already found {s} to be a valid design *****\n", .{design}, debug); + return true; + } + if (known_invalid_designs.contains(design)) { + log("***** Already found {s} to be an INVALID design *****\n", .{design}, debug); + return false; + } + for (towels) |towel| { + if (design.len >= towel.len and std.mem.eql(u8, towel, design[0..towel.len])) { + log("{s} is a valid prefix of {s}, so iterating down from there\n", .{ towel, design }, debug); + const remainder = design[towel.len..]; + if (isDesignValid(remainder, towels, known_valid_designs, known_invalid_designs, debug)) { + known_valid_designs.put(design, {}) catch unreachable; + log("===== Adding {s} to known valid designs =====\n", .{design}, debug); + return true; + } + } + } + known_invalid_designs.put(design, {}) catch unreachable; + return false; +} + +fn parseTowels(line: []const u8, allocator: std.mem.Allocator) [][]const u8 { + var response = std.ArrayList([]const u8).init(allocator); + var line_it = std.mem.splitSequence(u8, line, ", "); + while (line_it.next()) |towel| { + response.append(towel) catch unreachable; + } + return response.toOwnedSlice() catch unreachable; +} + +test "partOne" { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + const allocator = gpa.allocator(); + + const response = try partOne(true, true, allocator); + print("Part One response is {}\n", .{response}); + try expect(response == 6); +}