From d2d8a02bbc28c42b0c967603133e9f9cf6bd4c69 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Thu, 19 Dec 2024 21:13:03 +0100 Subject: [PATCH] Solve day 19 --- input/19-0.in | 10 ++ input/19-1.in | 402 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/19.rs | 91 ++++++++++++ 3 files changed, 503 insertions(+) create mode 100644 input/19-0.in create mode 100644 input/19-1.in create mode 100644 src/bin/19.rs diff --git a/input/19-0.in b/input/19-0.in new file mode 100644 index 0000000..29648be --- /dev/null +++ b/input/19-0.in @@ -0,0 +1,10 @@ +r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb diff --git a/input/19-1.in b/input/19-1.in new file mode 100644 index 0000000..f3de00f --- /dev/null +++ b/input/19-1.in @@ -0,0 +1,402 @@ +rwwrww, uuwbwr, wgw, wuurr, urru, grrbr, gbg, bwgwguw, rwgruug, wbrb, ubb, brgub, bwg, rwg, uruubg, wwwbw, grr, brggug, wgbr, rurr, guwuuwur, rbrubbw, gbru, ggwu, urwbwg, bgg, buu, gggbgw, buwr, bgrb, ugr, rbwubb, gurrb, bbw, brgwgb, wrwu, gbggwru, ggbuu, wrg, rrw, gbb, gwr, gg, rgw, rwwrb, rbg, wurgww, rgr, bwub, bruw, ruwbr, rgbwww, uwbrw, buuu, ubbgg, buug, rug, bgrw, gbbr, burrrbwr, rrubug, bwguu, uuwrbu, uuur, gubr, www, rub, gbr, uggguw, bbrwu, gwgu, gug, rruuru, wwggg, gwg, gubgbrww, uwr, gb, rubb, uggbr, brrb, gu, uugr, ggg, rbu, r, rbubuwrw, bbruu, wgrb, ggrwuu, wgbub, wb, urwurb, gwwggr, wwbbr, uuu, gggrrb, bgr, bb, rwwgwg, buuwg, guurgg, uwwb, ugb, ugrr, gbw, wr, gw, rbbuwu, br, buurw, ugu, rrb, rbrw, wwubu, wrbuu, uubr, bbbruuw, rubbuwu, rubwb, ub, wbr, ru, brrw, wgwu, wubgbr, burbu, ubu, gub, wrgwrwrw, urg, gr, rrr, uuww, rwwrwuuw, ubgwwg, ggwwg, buuwr, rugbww, rrru, wbuuw, uu, gubgr, gru, buub, uruw, rugbbbrb, uugbww, bbrrru, uwgbgur, wrrr, grb, wrbbw, wgbubb, ur, bgw, bwwg, bubrb, guwgg, ggbw, ggwugrbg, gwrgur, ggwww, brr, rgbugr, uuuu, ggu, guwbw, wwwwrb, urwwu, gbrurgg, buwggwg, gurb, rbgrg, urbrgr, rwr, ugwbr, wrwg, brw, uugb, bwwu, ugub, ububbg, gbuu, rbrww, ubguwr, uuurrg, uwuugw, wrb, guu, wbu, rrgbrur, uurr, ggr, wgu, ruurug, uwrwwg, rugwg, bbbw, rbwwgrg, bub, uubb, rru, bburg, uwrwu, guwu, wwugwrr, wggbbbg, b, uubbg, rgbrg, urrb, gbgb, gwbwg, grww, uru, bgb, gwu, bbwg, burw, wggbrbru, uuwg, wurwu, wgr, brwb, bwug, ruruw, uguwu, bbb, gbgwuub, brb, ugwb, grrgb, wgbwb, wwr, wbg, wgb, rwb, bwubg, gruwb, wgg, grg, wuwb, rbrbuwb, wwgwb, bwgurww, bwwr, bgrwg, rrrgbg, wgwwguwb, rwbuw, guwgbwr, wu, uwbb, bwr, ggur, rrg, gbwuwgg, gbwwr, ubwgwwr, wwbb, ugg, gurw, uwwu, bwu, bug, rrurgg, wbrg, wgwruu, uwwugw, guw, ubrb, gbwwu, wguwbw, ggguwwb, rgu, wrw, ruu, uggbug, ubg, w, wbgw, bwrbbur, rrugbr, uug, rurbb, wur, wub, bwb, rww, bgrggrg, ggwb, brg, gwb, wwbu, rbggg, gwugr, ugwurbrb, uur, ugrwbr, bugwu, ggbgru, rgg, ugw, uwwuwwbr, ug, grgbbgg, rwbgrggb, uwur, wrgb, gur, gww, bgu, ubuub, gwwburr, ubbrwugu, rr, rbb, bwguubb, gbuuwwub, wug, wuug, wurb, rrgb, wrww, gugwgbr, ggwr, urgubwr, urr, wubwbgr, wgww, urgu, wuw, grbuw, ubwb, ubug, wru, uuurw, rgwbu, wbbuwr, wurr, ubr, bww, grwwg, u, bgrbg, uwrr, uwuwu, ggurwg, bbu, bbr, rrbgurr, bgbrggwu, rwru, rububwug, bguwwbw, gubw, rg, wwugu, buru, uwru, rrrb, rw, wbb, grgr, bggbwwwg, uwu, rbrgw, ggw, bu, bwrr, gbwuwbr, grw, bgwrw, wuur, uub, uuw, rwugg, ugrgwb, bwrrrgr, rrgrbrgw, grwruug, urw, rb, bg, bwrwwgg, bw, gwwguub, wugb, wwb, wuu, urwg, brwbb, bgbg, rwrrub, wbrwu, guur, gbu, rbbgb, buuubug, gbwruuw, wbwwrub, bru, bbg, brrbbr, rgggb, rbug, wrrrg, ubgu, grrru, buw, uurrg, bur, gbbwwg, ubw, grubrr, wrbgbgwg, ruwwgww, guwrrbu, wbrw, uwb, wrrwwg, wbw, rbbg, gwrr, rwrrwu, wrbrrw, uww, uwg, rbuur, gugwrb, bwgu, rbw, ggrwr, ggb, gbbb, uwwgru, wrgrww, rubwub, urb, rbr, ruw, wgwgw, gbub, rwu, bguub, uw + +rrggbrggwgwwrrwwuwbruurubbbgbbrwuwrrggubbuggugrubr +bgwgwwguuwgrwrwrwgwwwrgbububuwrubguwuwubbbbu +rguwwbgbgwggbwubbbbruwgubggrubgguggwgwwgugbbgwuu +guugwuwbwgugwbggbubrwbugrgrruwuggwbbrwguggbguwwwgwwbguw +buuuwuurugubwbwurgrrbbrbgrubbuguuwguggbrwwugbrgguwbggwb +ggbuuuwbbuubggwbwgwurburwggrwgbbwgbuwrbgbwggbgwur +grwwuubgrruugugurggwgugrwgrugbuwurugugbrbgrubuubr +uwrbubuwrwgbubguguurwwurbrurbwbwwwgbrwwwg +bgrrwrrbbgwgbbrbgbgwgwwuguubbwgbwrguubuuubuggb +rrwbwgubgbgrggwruwrrbbrbwwrwrrwbwurrwwuwbb +rrbuuwuuwrrggwbrrgrwgbbbbgbuwwguuruugrbwrbw +rrwuuurruugwrbburbbrwwbbrrbwwubwugbrgwgwubrbggrwbw +grwwbbbguuuburrrrruwbgbbbbrrrgguwgwubbwgbbwrgwwrwbrruuwbbg +bgwuburbbwwrgwwgbbggurwrbgbwrgbwgubbugubruwbrggrbbrubug +uwrbbrbrbbwwuwwgrggrgguwwwrgurwbwrbwuwguuuwwu +wbwuwggubgbwrbbrwrurrbwrguwgruururgruuurbrr +ugwugwburrruurrrwuubrgrbrrwrwwrgbrguwbguwwbrbwubwwrbug +rbbbguurrgurggwrgugrguwbwwgwwwbrggrbubwwrwburbrugur +bwrrrbuurrgburbuubwgrrruwwbuuuuuwbubwwububwuu +buubugrubugwgbrrbwrugrwwbburwbwwwrrbbbwbuwbwu +wrrbbwrrrgwwurgrwrbugbwuggrbrugbwrrubgwwwgguwruurwbwgb +wubwubrgwrrwbwwwuwrubwgugbbbwwbgurgrrgrgwbwwbrgbwr +rwrugwwurbgrbwuwggbbwggrwbbgbwrrugbbuguwrugwwbgruu +wugwubgbwbwgrgrbubgbggwgwrwwgwuugruggwbgbrggwuggub +rbuubwwggururwgwrbuwbbruwbrrbgubuwgrrbuugwrrgrbrgwgwwgbr +urwrbugbwwgbrggrggrgugwwbbugwwrubrubrrrrgwwugu +uburguwrrrbbbguuuuwwuwbruuwuugrrurbwbgwwbwurbgu +grururubgggbubwwruubrgggbwbrgubwuggwurwugruuugugrgrbggrr +gburubbgruwrbbrruuubwbrrrwbrgguwuuwurwbwurbbgwrrgwrbrrbbu +urbgbrrrgbrrugrrurrbbguwgburwgbbuuggrwrgbgwrbrww +rugrgwgggrgwbgggrwrbrurburgrbrgugbwuwgwgrbrbuggugb +rrgwgwbuggrbbuwwggguwrurwgbgurruwbwrrrrbbgrbwburgu +bgbrgrurrurgrgrbwuwbwgbgwggwguwbwwwurrbgbwru +uurwurwgwrgbwbrguuwgruuruwrrrugbwwubuugrrwwubbwggguuwwbuwg +rggwgbwwbrbbrrggurwwgurgwrubgrgubbwbbwwwbbgrgruwwgwggbrw +rruugbubgrrubbburgbgwbggbruggwuurwgwbwburbrgbgrwurgwbbrrw +wwrgwrwrwggbwbgrrrwuurgrwrubrbgbrrwuuwbwbrrbbggr +uwbrrbwuwwrwbwuwuggbbggbubrgrruguburgbgwrubguwgrwrrubgwrr +rwbuwurwurgrrurbbgwbrgwguwwbrbbwgbbwwugbuuwwubuuwwg +wbbwbuurrrugwgwgwwruguwbrugwubuwuguggburrggurbwwgw +wgubgubwgbgurwrrwrgggwwuwuruubruugbuubbwubrwbgrggbbgw +rrrbgrbgwugbbrurwruuuugrrwguwgwggrgguuwgruubbubgwbwrrw +bbwggbbgbrgrbrbbrurubrwrwuuwrwwgwwbbbgugbgbrurwbrgbb +gurgbbggggwwurwrwrubrwbwgbgwgrwbugbruuwwwuubguubr +brgrgbubwbrrgwwubrrrgurwbruwrruwububwuggbwuugwubbgr +bruwgwugwbwbugbuburrrugubggbwbuwbwruwuwrwrwgguwrr +guwwrwwbwbugbbgggggwuwurwruurrwugwbgbrgrwgbgbwur +gugwbwuubwgbwbwgrwrwrguwwbggurwwuurbggwugubrggguru +uurwrbwuwbbwbgbbbubgwuurbwruuurbubwbwbrgwgwgbbruwr +bwrrbubgrwwrrrurugururugrgwguguwurwruugugbb +rgwggwuguuwbuwuwwbbggbrbbwbbbwuwrwbwgggruw +wbgbwbbgwubwwbrguubbbbrugbugubrugrrubuwbbwwrwugbgb +grgbrgwgugbwuuwbwrguwrwuuurruwrugbuurrrgurrwbubwbrwuwur +grbuuuguggugbgbgrwgrrrrubugwubrwbwuuugguubuwbrbgww +wwrbuwuwruubwgburbbwwggrgubbgwwuwwrgurrbbubbbuurgwuwb +rwwrwwuwurrbgrbrurruguwbubuububurwbwugurbbuwwrrgwrbgrwrg +gbwbugbbuuugugwbbrrrurrwrrgwwgrgbubbgrgbwuggb +uwwwwugubggrugwbgggggbbrruwbggwburuuuuwrrwrbgwgrwurbguggg +ggrrurwbwbbbgrwburrgwrgruubbuwggwwgurburbr +gururggwggwrwrrbwbwubggugrwgrburruuwbwuwbbbuugb +rwwbgbwurgubwuururubugrbrbburbwgubguugrbuugwbuwgrrwrbrugb +gbgrrwrbrggwbwbbbwbbgugrgwgugbrgbubrgwrbbru +bwwbrbugrbgwgrwuugwwbguuuubwwubbgwrbuurrubbbwwwuubrwrgb +gwwurgurwurugwbwrbuuuwgrbrugbbbrbrbwbgrwbgrrbuu +wubgbwuuwwrwrbubrrrwgubgbuuuurbwuuugrugbww +rgwrrgbrgubrgbuggggurgwruwbrgurgbwgggbburbwrbwbuwbrw +ubbgwuwwubggrguuwbrwbrwrrrurugrrbubrgubgbrwwg +buwrrggbwbwrrrubwwbrrubrububrwgurrrgbgwrruugbugwrurrbrgb +wuuggubguwrwrwuuubggugwwbwbrugrwbubrrrruwbwbgwgguwwrwbwwbb +uguugwgwrugrgwurrrrbubrrbuwwrwgwgrwbrubuuubwb +ubwwrgburgrgruugggrwgwgrbwguwuwuuuurrubbuww +bgbgggruwggrruubuwwggubrbwbrbwbbubbuwgwrrwwbwruugr +guwururrwwruwurwggwwbbwgwbubwgburbwuwuurgrwrgrbr +brwurgwrwgggugbgrrbwwbgwburbuwgrbbgwwbubuubrwwuugwub +wwwwuggrwuwbbruwgbgbbbuwgubwrwwwwgbwbgbwugwrwbwurwbgg +rwrgwwrbuwwuugwuggruwgububbbgrwrrgbwwurggwg +gbwwbubgwbwrgwbgurbbbrrubuwubgwbuwggguuwruruwurbr +rbgurrrwrgbrrrbwgbguwbrbrggruwbgbrwwwubguuwgburwurrrw +wggbuwbruruuugrgwruwwuruuuurwggwbwwwwbbwuwwrugrwwbgb +wwrrrubuggubrggggwgrgurggwwbbrruggubruugbwrguu +bgbuubuggburgwrbrbwwrwrguubbrwugubbuwbrgrwwugbgwggbrbrbuwwg +uwwubbwbgggguwbuuubruwwuwwbrrugrwbubggubwugu +wrgbwrwwwbgbwgbgbrrgwuugbgrggbgrwwuuwbuwwbwg +uwurbuburwuubrwbgrgwbgrwrrbuurwrgwbrurwgwrbubgru +wbbwrggwwrububwugrrrbgrwbwwbgwrubrwbbwbwurbw +bwbwubbrugwbbggwugbrrwrrwwwwwgbbgrrwurrgrbrgwbwrbbwuurgwwwg +rbbbrwwbrgwbbbwbwbbwruugbrwgrubugbwgrwgwwrruuwru +grgruburwrruwrwwgrrgrrrrbbuwwguwwbrurubbuurrgbubu +wbwrurwbuwrwuugubwbwggguuururwgggbugggggwuwgwwruububwbwbb +uwwuguwwrgbgubgbrgrrbbwbwwgguwbwgugbgubuwggwbruurg +ubgbubgbuurbrubururwubggwgrggwruubwrubwbgwwrwrwbrb +wuwgwwguwbbrbbrwuwwburruguwuubbruuwrurrwwuurrrwwgbwg +wbrwwwwgwubugwwgurbrrwgggugrwgbbrbuuwugrbgrwbrwruwwrwgu +wwbbbrbwwrwwwbrgrrbrrwbwbwrruugbggrgggrwwggwwuwr +rrgurruwbbubgwbgruwwrrgwuruggbbgwwrubuwwggwg +buwwbwrbruurbrgbguwgwurwwburruwbwgbrurgwwgugbuwwbgg +urwwwubuuwrugwrggruuwrubguwwbgwubwrwbgwbwubwwggbu +wwubbwuwwbwbrrbwwrwbuwuggwgwgbgugbruwbwurwbbgrbu +bgwgwurbrrwuururwbwbuwgrwgrrbrwbubwrbgugbubwbguuguu +wwrwubugrurbwwwwgbggwbbwwurrwrrbwwrbruwgbubwrguugbrwbbrrbr +bgurwwwrgwgwrgurrrrrwububruuwguggrgrrggwbrgrbrgbgrgrrwuguu +ugwggrggwwgrgbuwuwbbgbwuwbgwguwurwrrubbruwbugwgwgugurubb +buguwuwwbbwrubgugwbwbrbgwbgwwbuuuwwwuwwgwuuurgbgrrrwrurgb +uwbgrwwgbugbuuwwubgrwbbrrbgrugbgwwgbggbruurw +wwuwwwbrbwbugbbrurgugbbrgbwuurgwggbwubugwuwuugggggwr +gbrwwggggrbbrwbwbuwgwwguwwurwugwbbbrrrwrbgbbgbwuuuw +gwurbgbubwgbrggbwrurgbwuuugurgguwrrgwbugrgbwgwruwwbgurgg +brbbwbgrwwwwguwuggrrugggwwbwrrubbwgggguggbrrgbrrububuwgbgw +ugggwuuubuuwuuurbggggrgwuwwguubuggwwwwrbrggwrwugggubuw +bwguwbuwwgwwrgggwwbrgrbbbgwgggbwugrrbuuurrgbbwrrbgguw +uwgurbugrbbbbbrurgrguwrwbwbwuwubwbwrububuubwur +buwugrgwruwbgubbggrwrgwwuruurwbuugguwgrrwwgwg +uurbwbuuguuwbuwbwgrugrgrgwrgrbrwgrugbbgbbuggbrbwg +brrrrwbrbgbuwrburrwgrguuguwbrugguwbrrugbugbgwggwurbrbu +wruugrbwuwrrggugugugugrwuububrwrrbrbuugbbgrggwrrrgw +bwwugggguruwuwrbgbuwbgrguurwbbwgrbwgrgubruguwubbwug +gwbbrwgrrgbgbuburggbwugrgwgubbguwgrurwuuubrrbwu +wgubwwuwwwrbgbgwgrwugubgrwbrbruwwgbubbuuwwg +urgrgbuwwburubggubruwwbrrwrbbbgrwrwbuugrrwggubbwu +rurwggwrwrrubggbuuurbubwbwbruwgwrrbgguruwuwwrwwrubgb +rrrugbbbrburubugggrbuwwuubuwwbugrwuwubugrwbbwrguugwg +bggwbrugbbbugwwgbwubrwggrbgbuwrgbrwbrwugrwbrrbrwwb +wbubuuuwggwgbggbwrugbgwbrgbubugbgwuwgbuwuubbwrbwwwrguubu +wbururwgwuwgurruwwubwgrbrgugrrrrgwwbrrwuwbwwrrrurwurg +ubrruwruwguubgruwgwgwrwggwgbguwbuuurbrrguuu +wwggurrwbrrruugurbugrgwgbrrbrbubbrgwwuruwguuwwgww +wbbgrrwwbgrubggggwuuurburuwbguuggwugbwgrrgwwg +gwrguwwrwubrrbuuwwuwwbrrwurrgbrwggruurwwg +urrrwgbbbwrwbuuburgggwrwugrurguurbgurbbubbwgubbwwubug +ubwbrubuubbrrrubbugbubwgbbggurrwbrbgwbrurbbrrwuwu +wwrgrbugbgbburubuwggggrgguuwgrrugubguwggguurrgwururwbwgrbw +gwbgbbwbwgbuuuwwgwubwbwggbbrwbwuwbgbuguugrrwwbu +rguubwbuwwbbbrgbbwwbwgrbrbugrbwrruuguuurrruwg +gwuuwwrwwugbgwwrruugugwrbrbgurruugwwbbuguwrgw +ruwwwbwuburuguugrgbbwbwrruubbrurggwubgbruuwgwgwrw +gbbwbrwugbwrugburwggwguwubwbwubwgbugrbbrruwuububrururbwg +rrwbwuurwbggrguwwbrwwbrwguugrrguwwbgburrug +wggwuuurrbwuwgbbuwbburrwwwbwrguuurburgbbbwbr +bwubgwrrbbbwrggugbuwbgwrguurbbbrgrggwrbbrbbbrbu +bgbwurgurggurgwuwbbbubwugwrwgrwwrgbuwwgrwbgburggrgwrwg +gubrwubwwrugrwgrbbrrrwwruwwuurbrwwgruuuruwb +uwwbrwggwrgrbuurugwwugugbbbggbwgugbruwgrwbbgu +bubrgrwgrwgbwbbbwrwwubrgwbgrwrggwrbbwrwurruwrwuguurbuwbwg +wrrrwbwgwgbrugrbbwwgbwuruwgbuguuwbwbgburrwgurgwwgb +bggrwbbugrwgbrgburbbrwugrgbbbwgguuwbgrwrbwurgwrwugrwwug +wbbbrrbgruwrwrgrrwurbbwgrrbuubguwrbwrrrgubrwwbrubggugrrwwwg +bbwgwbbwuggbgurggubbrgubwgwwuuwurgrbgrgbwggbwwubbwrwrbbgu +ubwwgubgwggrbgbrrurrrrbugwbwgrurugrbwgbbrwbgbbrbwu +uwwwwrwbubgrgruwbwgrwgrgurgggwrbrrwwbgubwubrwwruwwuggrugu +rrrwwgggwwuwugrrrgrbgrbwuburgbrwgrrrbwbbgbwgruwr +rruwgwbrrgbwbbbwbwgwwbuwbbggggrrguwbbburubwrwrbuww +rgbuuugrgurwburbwruugugrwwbrburgrwwguggrbgrwuuwuwguugw +rrrgbgbbbrgubrbbbbgubwrbwbuwugbrrgrrbgrugbrwbggrwg +grrubwrururbguurbrrrrwuuggrwbwwbgrwurbgwbguruggwwwbbruguug +wuwbwrbgruwgubbgbggbbgrgrwbugwwwrwgbrwgrwuuuwb +uruggwwuwrrbbrgggrgbbbuwrwrbbbuurbrrgbgbggggbwbrwrgrrgwbrw +ugruguugwwubwbbuubrurgwwubgbrwuwurururbbrubrr +wbwrbgbgubggubwbbbrwgrruwgbggbrbgwwwrwwbwugbrbwbrurwgrbbwr +buuwuuwgrbbgbuugbrgbbwbgwuwbrrurbubwuggwrwugbburgwbug +urbrwwrrwrwbrgugrburrggwbrgbwruwuuurguwwwgbwgggrwrrbuw +bbuuubwwbgrbbrrgrbbwwgwubuurwwruwuububbguubgw +uwwrrbrbwggrbrggwuuburrbwbbwgwgrurbwwgubgrbwwb +gwwbrrbwwwbwwwuwbbwwuruurububuggbubbggbbuu +rrggwgbwgugggwrwrgbuuuggwuugwwbbruubwbgguuubbubrggwwbrbrwb +rwrrgguwuwrgbuubbgguuuwwuwwrgwurrugrbburgbwggbbwgrurbuwwbw +brgbwugrurrrgrrrwwbbwbwgrrrrwggwrbrbwwgurgu +wwwbwrruuguwrgwguwurubuwrrbbbrwbrrrugbggubbwbrwugggwgwurr +ggrwrbwwgubrgwgrbbwwuuburggguwgwurwgbbubwgwrgrgubuwrw +grbbbuurwbguggbwbbgggurbbbggugwrwrrurggwbrrrgbgwugguw +brrgrbwurgbbgrbrwrbgwwguwgwbbrugbrgwubrugwugu +bgwggggbbwrwggggbgrbwgwgbrubrrugwbwbbuwbwgubgb +gbwrwwgwuuwuwbrbggguuwurgrgugbbwurrrbrbugwgggrrbrggugrwwru +grgrwrugrwrrwuuubrggrgbugwrrbrgruwurbbwgrbrgr +ubgbbbrrgrbgrugwbgwbwugububgwrbgbrurubrgwwrgwrgbgguuwggwr +rrwwruwbgwrruwwgbuuburrgrwrbbruuwggbgbbgubguuuwrrrwwbrbg +uurrgrwrwrgugwbbubugwrrrgguwbwwugwgruuguwggurrb +wwrbwurrbrubuguwgwrggburbrbguburbwrrgbwrwbrbbruwbrugu +bggrrwwggurgggrubbrwububbwgrbuugggrruurwurwwwbgbbbwubrwwg +rbrbgwrwwgrwrbruwggwrrgbugburrrwugwbrgbwgrubbuurwbwbw +rrwrubgwgwwrwwbbwgbbrrbrggugbwwbwbbrwururb +gurrgubgbwggbrbuguwuwurrbwbwwggurrrrgurgurg +uwgbgruubbgrwubguwguuwuruguuwgbrburwuuuurgggrw +gbwbggwrwbbuuwrggbrbgwrggguggrguubrubugwww +bgguuurwuggbbrbrwrguuwgbgrbbbrgrbrgrgubrwuwwg +wgrgbbuwwuugwgbruwguwuubuuguugrggbbrgbburubgbrrugwwbggbu +gwwwrwguwbgugbbwbrwwwwggruururuwwwuuugrrwgbrwurbuwrb +ruguwurgburwgugurbwruurbrgwwuburbbgbgwgbbw +bbwubuwrwwbubgbubururbwuurbbuubwwwbbwgbrgugrwburgurwuugw +grbrrwrbrgrurwgburgwwrgrrwgbbwgrbubwrgwrwrwwg +bbrrubuwrrubrubuwruurrbrrrrgwugrugruggwguubuwr +brbbubwwgrwrbrbbgbrurbrwrwuubrugbggbuwbruwggbgubwubbbwwu +wrbgwbrbggggbuwuwwwrubbuuwwrbururuwgurgbubuubrbrruugw +bgwuwurrgrguuuuwrwrwwbguwwwrwbgwgrbguruuwrrw +bwgwgrbbgrubuuwwrrrurwrbguwbuwbwwrgugbgbgwbwbr +bbubuwrwrugbwwwgwuwrgrugrbbbbubwbrrguwburubgurbgwu +wrwbbrbrurwrruwuwurugwrgurrgburrubgruubbrrrgrurrbg +wgrugrbgwbubrgwgrggggugrbburguruwbruguwrbrbggrrrbrwrwwug +ggggbbwwggrwwugggbbubwwgwbubrrurrbbwrbuuubbu +wwguwwubwbuuuggbrwguwgrrrwgrrrwburrbrbbgubr +wuguugbuwwurbbbwburuguggguwbrwbrgurubwbwbbwwruwwg +urbugrrugrgrgurbwgrbbwgwrwwgwggbubgwwgbrrugrwuuwwrwbgubwg +rbbwubgruruurbgbbuggrbrrwguugwgbbrwurburwbbwr +wbubuwuguubguguwbgrwuubrbrwwrgrbuuubururbgrw +buuwuuuuwbgbgguggwguwgggbwrwwbugwbbrubbrurgguubgwwguwbwur +ggbrguuuggguwwrgubrwrgubrubgbgggurrbrbgbwrwgwgrggw +rrbbuwbbrwuuwwbwuwurguwrwgggguuugwwbguwgruwuwrbuuwwgbwwwur +rgwguguuuwbuubbwruugwuuwwbrwrwwbugbwwburrgw +urubwbwuuggururwwurbwbguruburuwbuwggrwugrruugbubgubrb +grgwrurbwbrbbuggwubbwwurguuuuubggbgwwrwrwubrrbbgbgbr +wuwruwuwwbburwbruguugwwwbrwwrruwrbruwgwgwwbwwburguwggbuw +wbgbrwrrwrbwgbrbbubguwgwgburggwbbrggbgwwuwugwrgwrgrwruwgbr +bgwwgbrguggggwgwgrurwgugburguuwubuwrbwbwrb +brgbrurgubbrubgwburrbrwrbbububgbrggwuubuubwguwrbwgrbwru +wuugurrrrurbgrrurbbgrubrgugggbwbbrguggwgrurbbbbbwbuw +ggggwwubbbubuubbwrwwrgwwuguurbuburruruurrwbrgbbwggb +uburggguuurbrgrrgubbgbugrbrbguubgbwgrgbwrbrwg +rrrbrurbggwwrrwgbrbrbwwuuubwrugwgbgbggwuwuuwuggugb +gbgrurgwrwbwbrwugrwrurwugrrwuuwrrrwrrwwuwgrbwrggbwr +grguwbururwuruwuuggwwggwbwrwwrguubbbwugguwuruwuwgu +bruguwrrrbgrgguugrbwuwrwbrugbgbgrbgwrwwruggb +gwuuurbwgwbrrurbbrwbbwbbgwubrbrwggguuggwguwubruug +ugugrwwbwwubuubgrbrbwuuwrbwgwbugggwguruwbuw +wububbbgruwuwurgwbgruugrbrwrrgwruggurbbwwbbrgbbwbbruu +grbruwuwrrgbrbbubgwgwwguwbwwwbrgwrurruggrbbgurbgbgruu +brrwwbubgrgbwguwruwrrrrruuwuwwgbgbuugggbbbgwbggguwuubg +uggwrbbgbubwburwwgrbuuwgwrrgwgrrgurgwwuubrrwburwggbrrwg +bgwgrbubgwbububbrwuguwurguwbrggugurrgurbguwbu +rrwbgrggbbbwgbuwrrguwrbrruguwgwurbrubgrurbwrwggbwrrrrgwwg +gwwbububrrwbrbrgbuubbrggbggugwwruugwgwuubrgrgrbrbgww +wbwgbbgwubwbrrbgwrwgwugbugurwggbrbrugbrurgruugbwwbgu +grgubwurgbgbbbwrwrgrgrurwwgwrrwwbrugbbrugburgrbu +rubrbwubbgubrrrbrubrugwrbbwruwwrrbwwwrwbburrwrwuuurbrwrggg +brgbugwugbrururwbruurgbuwuwuwbrrgwbuuubbwrbgugbugg +rgwggrwwggwbrwwbwrgbuuwgrrurbwrwggbuwwwgugwwbwwbwggbub +rbbuggbguruwuuwwuuubgurugruubrrguwuuuwwg +brbgugwgbwrwwbbuwrgwbbgruguwgurbgwrrgubbbwgggurgrwbuw +bbubwwrwuwgwggwbgwuugurrgrbrugwrurguggrwburruwrwwg +ugwruugrwrwrugrguburgwwgubgrrruwbrbrugruururrgugug +buururggguwrgubgwuggwuwgurrurwwubgrbbuwruwwbbgbrwgrggggwr +rrrbggwgrggurrgbrrgwrubburuggbggwwwrurwgugrrguurwrbruwwg +wbbrrrrbubwwwuuwrbrwbwubwrwrrrugwrrurwuwbrwrrubw +buwrbgwuruwbrbrbwuwrwbbrggwugrbgbubugwurrwrruwwg +uwwbgugububurrrruuugrrubwugbrrbgwuugugrbugrwggrwgrwub +bwrbbgbbwggbugrwgrgggwrubbwgwrgububwgwwrgw +wrrwgbrbuuuugguuwgrrwruurrrwwwubggwrbgrwgrgg +urrbgrbbbbwggguguwwrugwubbgwgburbgubgrrrbbwgwwrgwg +bbbrbgwbwbbwrbbwgbbwgwrwwrugugwugburgugwwurbbuwbgug +ugwrburwuguruubwrrurwbgwrubgrubrgbguwrrgrguurrwwurbru +wwwgrbgbgbgburububurbgrbuwuwwuwgrbrwgwrbgwuggurggruwugbgwwg +ugbbwurrbubruugrbgwwurrwruugwguugwrburwbbrugwrbrbguwu +bbrwbbwwgwbuugruubwbuggwggrbrggrbgrgwurbugggrurgbwrubr +bbwburrwrwwbwgwggbrbrugrbwuwbubrbugwggbwwrwgurrwwwwurwwwg +wgrwrbgrrwwgwrwbbubrgrrwbuggbwbwbgrrugguuwwrbgrruuuw +grwwuwgguubgwbubrwwrrgbgugwrwurrbubuwuburbrrbggw +bubwrrwbuubbrrgrrruggwbugbuwwwwrbrgwubbubwugwrrwb +bgubgwuwuwbbggggrurugbbgbuurgwrwubrbgbrgrgbbb +guruuuuwwubugggwbrguwrurgbggggrurgbgwrbwggub +buwbuwgbugggurrrggbggwbuwgbwbwrggrgbrggwuugbgwb +rggwbbbwbgrwrburrrbwrwwwubgbrurwbwrggbbrggwugb +bugrwguwgbwbugbwwuwrgwwwugwwgwrubwbuwrrwbrbubuwrwgub +gggbwwgrubuubwubrwwrwuubwrrbbrrbruwuggrrbgguwr +bgwggwrbrguwuwuwbuwurgubwrbgbgwggbwubuguru +rgwwurgwuuubuuwwrrwugbubbrbuguwuwwrggbrgrgbwrrrw +ubgubuwwwuwwrwwbbrbgbbrbrrgggwubwwgbwwgurguwguugbrwgr +gbwwgguurwuuugwurubbbrrgrbgubgbuwuwurwbuggbbuwwuwbgwgbg +rrgrbrrbwuuurbruwrbuwwrwwubbrrggrgwurwubbguugwwrg +uwrbgbbrrgruuubgbuwwburgwwbrwwgbgugwrbguububurrwgrrwg +grwurwbbbwuruurgbburgbwbbrrgbwburubwruuurww +rubuuurruubuuugruuwbrgurbwwwrugwbuguwbubgbbbwbwwrwggurg +rbggwrggrguurbrwrwgbgbbwrgguggwrrggbbubgrwgrurguggrwwubu +uwgbrbwrwbrgbbugggurgruwgwbwwbguwuwrrwburwwubbggrbgbb +wggwwuugbwbwrburugbbwbubrwubgrgubbbwgbbggubrubggu +rgugwrgurbwbguwwrbuwrbbuwbuwwurwwubwburuurwwruu +wuggugugrggrgbwbbbwbggbgrbwubrbbbrbrbrwwrurbbgugrbuwrw +guuwrurwbuwwgrgwgwrwgwbuuugubwguruuggbrgrgrwbrrbbubgruu +gwurgrurwubgbugbuwrgurugbrwbbwwbrgburbrrgugwbuuwrwrubwruwb +bgrruuwwubuugwguurgrgwuuugwrwgugubrbubrgubwugwubru +bgbbrbrwguwbrgrruwuwuwuubuggwgrwbwbggrgbgrgwrw +buuuwbubbwrururrggbrbuuwrrwwwgbrbwrgurbggguuuw +ggbugbwururwgrwbgbwrrrwrwrbugwgrgggrwrgrbrrbgbggrwbggbwgg +gwwugrwrwgwwwwbwbgwbbrbgwwbbrgbbbbuwrwwgbbrwrr +wwuwruwbwuwubrbubugwbuubwwbwwbwwguuuwwrbwwgw +bguguwrugrburwrwrrwrrbggugrbgwwwwbbbbbbgwwwu +gbgggrwugugbbrwuuwuuwrbrgggwgugwgrurguwgrrru +rurwurguubwbrbwgurbbgwbrrwugurbwwuggrgugggbbggbugrrgrggruwwg +guubgrbwggwwuwrurbgbbruruurgbwbruubrgwbwugrwgrwbbbu +wubbgrrgurggwgwbbbgwbbugbbgwggrubbbuggwwbrrwbrwgrbugugbg +bgguwwuugbggrrugrubuugbuuugguurbbrrwwrwwwrrrbwbbgbrug +gwbruguruuwwrguurbgguwwuwuuwwrgguugubwwuggwg +bwrwbrrbuuwrwbrrrruwggrurwrurgururuwgrrwwwrwggw +wrgbwbbuwwggwrbbgwgwgwuurrbrbbrbwruwuuugwbwrbbburwwg +grbwwbbubrgurrgbbbbwrwgugrrubwbwuwwgggubbgub +wurbburggbwuguwugugwubruggwbburgwbrgubbwgbgugwbbrbrbwrggg +grwgbwwrugguwggwrrbruurwbbrggrbuuwuguwuurwbrg +rrgguwwwurgrwbbugbruuubrrrguguwrbwugbgrgwggugrrurrru +wwuguuwubugwrgburrubgwbugubwwurruubbwrgwgrgbggbrwgrgru +bwuruwbrgwwwuggwugrbgbrurguwbuwrgrrgubwbwrwwburggubrbg +bwrrggbbrugwrbbgwbbggubgrrbwburrrbwrburruwwwg +rwrgrwruurubbrbrgrwbbbwurrubguwggggwugwurbrbwgrrugggggbuwwg +uuubuubbbubbuwubbwwuubgbbguugrgurbwggrwgrw +urrrgwrggbbwbruwbgggwuwgrubbgwrbgbgrwbwbrgrug +uruwrgruguuwgrurbbrurbrbbggbbbgubbbgurbggbgwguuwb +uuuwrrbwrbbgurubwrrgrgubbuggurbrbggwugrbbw +ubruuwbrwuurububwuguurwbwuwwrbrwrwwbbwbbruwgbbgwuruwwwg +ubrgbwbrbrgburuwgbgrrwubgbwwwurbrwwurwbgwgrurrbgbrggwuwwwg +rbwwgrrgburrgrguguwgrgugubwuruubwrrwurgwbbbgwguwrbuugrbub +ruwuwuwugwbbwwbwbrwuwuguwbwrgbgwgwwrgurugrrbrrrwwurrwbrbu +rwuugwguurwguggwurgwbubuwggubrrwwrwguwgrwwgrrbuwbr +gbwwuburbuwbwgbruuuguuwwgwrbbbrbubwgrwgwgrbbgggrbbgrbbuu +rbbwuwbbbuuwbbrurgbwrwbgbbwbwrugbwbbgbrubgurggwbrrwgwbu +wbgwbugbgwrurwrgurwwbbgwurbgubwrbuuuggwwwuuurburuubgb +ugguwuwrugrugwbwbrwruuwwbwbgrrwgwrrguggrggr +uwrwgurgwruwwgurubruruwuwbubwrruuwbbrwuuuwr +uuwgwbbuubgbubugwwuwgwbbubruuugugrrbrwgrrwbggrbu +urgugbuurbrwbgbgggubgbrwwguuubuwuuuggwrrbrrwgu +grguwguugwrbgrrburuwugubrgbrwbwgguwruwbgbbgwwggrggburg +rwwbuuubbrbrrrurbrubbgwwgbwwwgwbwubggrgugbrrwu +wgugbbbbwwugwwuwrbugwubrurrwgbggrwgugurbgrrbwbuubwwbbgrrw +gwwuuwubgbwuurwbuuwuwwgwwbrwruurwuuurrwrbguurbuuuggu +bbbwrbgwgbburgbuwguwbwwgggwrwrgwwgbgwgwggubgwwbbguwbuw +bgrgrrgbwwwwrubwbrwbwuwwrbuwurbbbggbggruuubwgubb +wurrruuwbbugbbuuwggrurgrggbgwgbggwburwgwbw +grrbwrgbuwgbrbggbwrrwgbwwrwrgbugrrbwgguwuu +gbbwbwruubuwruburgbrrgwrwbguurbgbgwwrbbgrwbgbgbb +wbbggbwwwgrggwruwbrbwgrrwgruubuubrgrrrgrrb +wrrwgwbwubwbbururrwguwrruggbbuguuwwrgrrgbgrgwbwrggbbuuuuw +bbwgbugbubrggwrguuwwrrwgrguwbrbwggwuwbgrgbrugubwgubu +rrgugwwubbuwbwbrubbwbwbrbbbggubbwbwrwgggwbbbuugugbgg +uubgbuuwrbubbbguburgrwbrrgrwrbugbbwgwgbgrburb +wrrwbbrurrwgwwrwwbwgwbuugguururbbbwuubgugugrwbuubwwwrg +ugwrgwwugrbwggbruuurggguggguwwggwwbwwwrwbuubrwgwgb +gbwbbbbrrbrrgbuwggbrwuwruururgwwrugburgbrbgwb +wrgugwuurrrgbuguuuuwbrbwuwurbuwbbguwwwgrrbruurguggwgwu +ugbbbggugrggugurwruggurgrubggwrguggrgbgrwbgb +rrrbruwrrrgwwgrubrbugwgwubgbwguwuwwgrwgbwbrugruwgbgbbr +rrbugwwubgbwggbgbwbgbuurwwubwbuuwububwbbguw +ruruguwgbburbuwbuwbguuwugrrrgrgwwuurrwruwrrbbgrwr +urgugubwwbubbrwwwrbbbuuburwugbbbbwruubbgwbgwrrrwubgwbgr +bubbbgwrwwuwrruwgbrbrurbrrgugurrbwrguwwgwgbbg +rrggggrgrrgbrgrubrbwrbbrugrubwwuuwbrgubbbub +brgwgubrugwrguwuruubwgbggbwwwgguwwbgwguburgugruwgbruwbgwwg +grgubwurgruggrgrwbrubugbrbuguggbbgwgbgrwbggbg +guurwggurbguwgwwgubwbwubwbrbrwubbwgbuwbwgrgwbwugbubbbwrwrb +bgrubbuurgrrwgwgguurbrrgwrbwbruwububrrwbgggbwggwuugbrbwwgu +bbgggrbgrugrbgrrururgbrbwurwubuwgrrubgrwwuw +bruggwgrgbubrwugbbwbuwguuwrgugggguwbrrugubgggwwrguwwg +wrguggwuuwuubbrgwwwgubbggwggugurrguwbwgburwuwgguuu +wwwrurgrwrwbbbrbrrggubbwgbbubggrwbbbbwbwgruruwrbw +uguwuwwubgrubgbwrggrwbwwgruuugurgugruwrbuggrrwgwrbbrrg +urgurbgbggrbgrwwbbuwguwgurwrbgbubwwrwwrwuuwuwwur +wwggwgwrruwurgurruuwwwbrggwwuuwbggrggwrbbwu +wuuburbuggrururbubwubwgugwbugbrwwwwbwgrrgwb +wbruwwrrbuuurrwggrgrwrwbbbbbbguuwrrrrggbrurrbggb +wgbbuwgwwruwwgrurrugubbgugwgubwggbrbbbguuuwruwwuw +wuwbrbgbwrwbubruwbrbwubgwrrbgbuuruuwrwbrrgubgg +brbgwgrwbggguwubguuubbrbwgrwbbrwwwuwggrwrrgwww +guugrgbuwbrwubuubuwuwrrbrgrgrguwrwggwbggbrwrrwwub +rrbwwburbwrrugwugwgbuubbggbwwubwrrwggurubuurwgb +rwrugwgbrgrwurubbruuuwburbuuwurgbbgrbgrbrbwurbgu +wwrbrwwwbgbbuwrwbgubgggrrggwwwgugrgrwubwbg +bbbwugwwbubuubwgwbuurwbwbbbggbwggrruuwwgrwgb +gwgrrbwurwgbwurbubwrbwbwuwwrubuuwrbbgbrrrrwbb +bwuuuruwuwuurgrgbwrguwrgurbrrwuggbwwbwwgggubbrgbr +grbwrwrggbgbrwbgugrwrgbruruwwrugbuwwwrgbbrrwwgb +wwbguwrwwbwbrwuurbbwurubbgbubrrubbbgurubuurwgr +ubwwrbwgbruggbgugwwgrwurggruubggbrrugrwgbuubgbgbbubru +buurwuguwguwbuurwwbuwbggrrbbuwgrgrrugbrurrr +wububgwuguwrbbggbgwubwbbgrurgwwbrbbggggwuw +rbwrbburbburrrwurubwuwrrrwbguwwwrbrbbuubbuw +wrgubbrguwbgbgwuwugbrrbrrwruwwwbggbuuwbgug +wgrgwrgugrgurbrgwwgbuwbwrgrrwurubwbuuwwugbrwugubwbwwugwbr +bwrubgbbrwurrrrrgwgrgugbgguwrwrrgrwuguuwuruwbrgbwubug +uubrggwwwwrbbwwwruubgubugbgbrbugggwrgrwgrbwguwuugug +bwuuruuuuwwuwrbbwbgrbbuggrurrrrubbrbrburubgurgwrgbburuwr +urwwururgbwrrbuwbwggrrugbbbrbrwbgwuwwwwwg +gwgbggbbwwbrruuwurubwbuuwurubrgrrbbggburrubrrrrb +gbbgwgrgbugrrgbrrgbbgurbugbrurrgrwgwuggrrgwgwubuugruggrur +bgrubbugbbgbbgwrrrwwwurbbgbgwgwuruugrurubbwbwgwru +rrwwrubgwwrrwgrubuuwbbgrubrwbrrgbggbuguguwgu +ubwuburwrgubrgwrubgugbuwrugugruggbruwwbbugb +ruuurrgbwrruggurgugrrwugubbuggbguwwbrggrguuwurgruggr +bruwguwgbubbruwurugrwwbrurrwrwwrwguurrwwwwwrwuubu +wrbrwuuruwrrwwwrwbgrbwbruwgwgwwbwwubguburbuwugurr +wuwguwgrurrurburugrwwwuwwbwguubrbwuwbguwbbrugwb +wwrbrubgubrbuwuwuwburrrurbrrwwwrbgrgrrbrwgrugrgw +buwbbugrgrbrwuwbrbubuurrgwbbuwwggugrbgrrbwr +gbguwwuugruwgrbbrgrwgwrwwurgguwwruwwbrgrrwgrgbwbwwbwu +bbburbbuubrwgrbubbbgrurrrbugwggggrwrguwrggrbuggwwrru +gbgubrugrbbburguuwrurgwbrwwuubwuggwgbbbwbgbgrwub +bbrgrurrgrgrggrwgrgrgbwrrgbrrbwgrruuwbgwwg +ugwwgrbbubwwgwrugwuurugwbuwggwrubwbwbuubwgrbwrwrgrwwwwwwwg +wwbwwbrbgwuuurggububggrgwgbwbgrwrgrgrrbwwugbw +wwggwgruwurgrruurwrwwrwuuwwwugruwrubggwwruwwg +rrbguuurwuwggbrwrugrbgurgrrgrggrgbwubgruwguurrgr +wwwbwgrubrruuurgrwrwurwgwrwuurwrggbggrgwwg +bwruururuggwwubguwuuwurbrrwgubrwbwuwgwugwrrbbubwbuburwwg +rgbwuwurwrubbuugwurbrbuubrwwgrgbuurgwrrbugbbggwwubr +ubbguubwurbrbbwubugwgwuuggbuuugbrwuwwgbgbbrug +wbbubbrbwuwbwbggburbrwburbbrbbrbwugwbgrwbrbggbwbwuru +gbrbbwbwrwrurbwbbbuwwbgurwuurguuwgurwgrugwbw diff --git a/src/bin/19.rs b/src/bin/19.rs new file mode 100644 index 0000000..da034dd --- /dev/null +++ b/src/bin/19.rs @@ -0,0 +1,91 @@ +use std::collections::HashMap; + +fn to_index(c: char) -> u8 { + match c { + 'w' => 0, + 'u' => 1, + 'b' => 2, + 'r' => 3, + 'g' => 4, + _ => unreachable!(), + } +} + +fn check_front<'a>( + design: &'a [u8], + patterns: &[Vec], + cache: &mut HashMap<&'a [u8], u64>, +) -> u64 { + if let Some(&c) = cache.get(design) { + return c; + } + let mut sum = 0; + for p in patterns { + if design.len() >= p.len() && design[0..p.len()] == *p { + if design.len() == p.len() { + sum += 1; + } else { + sum += check_back(&design[p.len()..], patterns, cache); + } + } + } + + cache.insert(design, sum); + sum +} + +fn check_back<'a>( + design: &'a [u8], + patterns: &[Vec], + cache: &mut HashMap<&'a [u8], u64>, +) -> u64 { + if let Some(&c) = cache.get(design) { + return c; + } + let mut sum = 0; + for p in patterns { + if design.len() >= p.len() && design[design.len() - p.len()..] == *p { + if design.len() == p.len() { + sum += 1; + } else { + sum += check_front(&design[0..design.len() - p.len()], patterns, cache); + } + } + } + + cache.insert(design, sum); + sum +} + +fn main() { + let text = std::fs::read_to_string("input/19-1.in").unwrap(); + + let mut lines = text.lines(); + + let patterns = lines + .next() + .unwrap() + .split(',') + .map(|p| p.trim().chars().map(to_index).collect::>()) + .collect::>(); + + let mut cache = HashMap::new(); + + let mut t = 0; + let designs = lines + .skip(1) + .map(|l| l.chars().map(to_index).collect::>()) + .collect::>(); + + let sum = designs + .iter() + .map(|d| check_front(d, &patterns, &mut cache)) + .inspect(|&i| { + if i > 0 { + t += 1 + } + }) + .sum::(); + + println!("{t}\n{sum}"); +}