diff --git a/input/12-0a.in b/input/12-0a.in new file mode 100644 index 0000000..b41163a --- /dev/null +++ b/input/12-0a.in @@ -0,0 +1,4 @@ +AAAA +BBCD +BBCC +EEEC diff --git a/input/12-0b.in b/input/12-0b.in new file mode 100644 index 0000000..50a7304 --- /dev/null +++ b/input/12-0b.in @@ -0,0 +1,5 @@ +OOOOO +OXOXO +OOOOO +OXOXO +OOOOO diff --git a/input/12-0c.in b/input/12-0c.in new file mode 100644 index 0000000..85b768f --- /dev/null +++ b/input/12-0c.in @@ -0,0 +1,10 @@ +RRRRIICCFF +RRRRIICCCF +VVRRRCCFFF +VVRCCCJFFF +VVVVCJJCFE +VVIVCCJJEE +VVIIICJJEE +MIIIIIJJEE +MIIISIJEEE +MMMISSJEEE diff --git a/input/12-0d.in b/input/12-0d.in new file mode 100644 index 0000000..5818d30 --- /dev/null +++ b/input/12-0d.in @@ -0,0 +1,5 @@ +EEEEE +EXXXX +EEEEE +EXXXX +EEEEE diff --git a/input/12-0e.in b/input/12-0e.in new file mode 100644 index 0000000..f7cd38f --- /dev/null +++ b/input/12-0e.in @@ -0,0 +1,6 @@ +AAAAAA +AAABBA +AAABBA +ABBAAA +ABBAAA +AAAAAA diff --git a/input/12-1.in b/input/12-1.in new file mode 100644 index 0000000..66723e0 --- /dev/null +++ b/input/12-1.in @@ -0,0 +1,140 @@ +GGGGOOOOOOOOXXXXXXXXXXXXXXXXXSSSSSSSSSSSWWWWWWWWWWYYYYYYYYYYYYYYVVVVVVVVVVVVVVAGEEEEEEEEGGGGGGGGGGGGGEEBEQEYYYYYYYYBSSSBBBBBBBBBBBBBBBBBBBBB +GOOOOOOOOOOOOXXXXXXXXXXXXXXXXSSSSSSSSSSWWSWWWWWWYWYYYYYYYYYYYYYYYPVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGGEGGEEEEEEYYYYYYYYBBBBBBBBBBBBBBBBBBBBBBBBB +GGGGOOOOOOOOOXXXXXXXXXXXXXXXSSSSSSSSSSSWSSWWWWWWYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGEEEEEEEEEEEYYUYYYYBBBBBBBBBBBBBDBBBOOBBBBBI +GGGGGOOOOOOOXXXXXXXXXXXXXXXSSSSSSSSSSSSSSSQQWWRWYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVVEEEEEEEEGGGGGGGGGNEEEEEEEEEEYUUUUUUBBBBBBBBBDDDDDBBBOOBBBBII +GGGOOOOOOOOOXXXXXXXXXXXXXSSSSSSSSSSSSSSSSSQQQRRRYYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVEEEEEEEEGGGNGGGGGNTTEEEEEEEEUUUUSSSBBBBBBDDDDDDDDDDOOOBBBBBI +GGGGOOOOOOOXXXXXXXXXXXXXXSSSSSSSSSSSSSSSSRMMQRRRYYYYYYYYYYYYYYYYYYYVVVVVVVVVVVVVEEEEEEEEGGNNGGGGGNTTEEEEEEEEEUUSSQQQOBDDDDDDDDDDDDDDOBBBBBBB +GGGGGOOOOOOXXXXXXXXXXXXXXSSSSSSSSSSSSSSSRRRRRRRRRJQQYQYYYYYYYYYYYVVVVVVVVVVVVVVVEEEEEEEEGGNNNNNGNNNEEJUUUUUUUUUUQQQQQDDDDDDDDDDDDDDBBBBBBBBB +GGGYGYOOOOOOXXXXXXXXXXXXXXXSYYSSSSSSSSSRRRRRRRRRJJJQQQCYYYYYIVYBBVVVNNNNNVVVVVVVEEEEEEEEGGNNNNNNNNNEJJUUUUUUUUUUQQQQQQQDDDDDDDDDDDDBBBBBBSSK +GGGYYYOOOOOYYYXXXGGXXXGGGGGYYYYYSSSSOSSRRRRRRRRRRQQQQQQYYYEEIIIBBVVVNNNNNVVVVVEEEEEEEEEEGGGNNNNNNNNNNJGGUUUUUUUUNQQQQQYDDDDDDDDDDDDSSKSSSSSS +GGGGGYYOYOOYYXXXGGGGGGZGGGYYYYSSSSSSSSSSRRRRRRRRAVVQQQYYYYEIIIBBBVVVNNNNNNVVEEEEEEEGGGGGGGGNNNNNNNNNJJGGUUUUUUUUUQQQQQQDDDDDDDDDDDDDSSSSSSSS +GGGGGYYYYYYYYYXXXXGGGGGGGGGGYYYSSSYYYSSRRRRRRRRRVVVQQQQIYYIIIIIIBBVNNNNNNNVVEEEEEEEUUUGGGGGNNLGNNNNGGGGGGUUUUUHHQQQQTQQDDDDADDDDNDBBBSSSSSSS +GGYGYYYYYYYYYYXXXXGGGGGGGGGGYYYYYYYRRSRRRRRRRRRRRRVVVQQIIVIIIIIIIGNNNNNNNNMMEEEEEEEEEGGEEERRRGGGGGGGGGGUUUUUUUHGQSQTTTCDDDXXDDDDNDBSSSSSSSSS +YYYYYYYYYYYYYYXXXGGGGGGGGGGGYYYYYYYRRRRRRRRRRRRRRRVVVVQQQVXIIIIIQGNNNNNNNNUMEEEEEEEEEEEEEEEERGGGGGGGGGGUUUIUUHHHHTTTTTCDDDXXDDDDNNSSSSSSSSSS +YYYYYYYYYYYYYYYXXGGGGGGGGGGGGYYYYTRRRTRRRRRRRRRRRRRVVVVVVVIIIGIGGGGNNNNNNNNAEEEEEEEEEEEEEEEERGGGGGGGGGGIIUIIGGHHHTTTTTCDDDXXXXNDDNSSSSSSSSSS +YYYYYYYYYYYYYYYXGGGGGGGGGGGGGGGGYTKTTTTRRRRRRRRRRRVVVVVVVVVVIGGGGGGGNNNNNNZMMEEEEEEEEEEEEEEERRRGGGGGRRIIIIIIIIOHHTTTTTTTXXXXXXNNNNSSSSSSSSSS +YYYYYYYYYYYYYYYGGGGGGGGGGGGGGGTTTTTTTTGTRRRCRRRUUUUUUUUUVVGVGGGGGGGGGNNNNMMMMMMEEEMEEEEEEERRRRGGGGRRRRRIIIIIXITHHTTTTTSSSXXXXXNUUNSSSSSSSSSS +OOYYYYYYYYYYYSYGGGGGGGGGGGGGGGGGGTTTTTTTTCCCRRRUUUUUUUUUVVGGGGGGGGGGGGGGTTMMMMMEEEMMEEEEEEERRRGRRRRRRRRIIIIIXTTTTTTTTSSSXXXXXXUUUNNNSSSSSSSS +OYYYYYYYYYYYSSGGGSSSGGSGGGGGGGGTZTTTTTTTTCCCCCRUUUUUUUUUVVVTGGGGGGGGGGGGMMMMMMMMMMMEEEEEEDDTTRRRRRRRRRBIIIIITTTTTTTSSSSSXXXXXXUUNNNNSSSSSSSS +OYYYYYYYYYYYSSSSSSSSSSSSGGGGGHGTTTTTTTTTTTTCCCYUUUUUUUUUZVNOOGGGGGGGGGGGGMMMMMMMMMMEEEEEUTTTTRRRRRRRRRBIIIIIPTTTTTSSSSSSXXXXXUUUNNNNNNSSSSSS +OOYOYYYYYSSSSSSSSSSSSSSSGGGGGHHHTTTDTTTTTCTUUUUUUUUUUUUUODOOOGGGGGGGGGGMMMMMMMMMMMMZUUUUUTTTTTTRRRRRRRBBIIIBBBBTTSSSSSSSSXXNNUNNNNNNNNNSSSSN +OOYOOYYYGSSSSSSSSSSSSSSSGGGGGHHHHTTTTTZCCCTUUUUUUUUUUUUUOOOOOOOGGGGGGGGYMTMMMMMMMMMMUUUUATTTTTTRRRRRRRBBBBBBSBBSTTSSSSSSSSXXNNNNNNNNNNNSNNNN +OBOOOOYBGGSSSSSSSSSSSSSSTGUGHHHHHHHTTTCCCCCUUUUUUUUUBBBOOOOOOOOPOOGGGGGYYYMMMLMMMMMMUUUUAATTTTTTRRRRRRBBBBBSSDSSTSSSSSSSSSXNNNNNNNNNNNNNNNNN +BBBOOYYBGSSSSSSSSSSSSSSSTTIKIHRHHHIIECCCCCCUUUUUUUUUBBBOOOOOOOOOOOIOGGYYYYYLLLMMMMMMUUUUATTTTTTTRRRRRRRBBBBSSSSSSSSSSSSJJJJNNNNNJNNNNNNNNNNN +BBBBBBBBBBSZSSSSSSSSSSSSIIIIIRRRRHISCCCCCCCUUUUUUUUUBOBBBOOOOOOOOOOOOOYYYYYYLLMMMMMMMUUUGGTTTTTTGRRRRRRBBBBSSSSSSSSSSSSJJJJJJJJJJNNNNNNNBBNN +BBBBBBBBBBSZSSSSLSLSSSSSIIIIIRRRIIIICCYCCCCUUUUUUUUUBOBBSOOOOOOOOOOYYYYYYYYYLLUUUMZMMUUUUGKTTGTTGGRRRRRRBBSSSSSSSSSSSSSJJJJJJJJJJJNBBBBBBBNN +BBBBBBBBBVSSSSSSLLLLSSIIIIIIRRIRIIIAACCCCCTUUUUUUUUUVOOBSOOOOOOOOOTTYYYYYYLLLUUUUUUUUUUUGGGTGGGGGGGGRRRRBBSSSSSSSSSSSSSJJJJJJJJJJJJJBBBBBBNN +BBBBBBBBBSSSSSSSLLLLLIIIIIIIRIIRIIIJAAJJCCCUUUUUUUUUOOOOOOOOOOOOOOYYYYYYYYYLLUUUUUUUUUQUGGGGGGGGGGGCCRRRBBSSSSSSSSSSSSSJJJJJJJJJJJJJBBBBBBBN +BBBBBBBBBSBBSSSLLLLLAAAILIIIIIIIIJJJAJJJCJJUUUUUUUUUVVVOOOOOOOOOOYYYYYYYYYYYYYUUUUUUUUQQGGGGGGGGGGGGCRCCSSSSSSSSSSSSSJJJJJJJJJJJJJJBBBBBBBBN +BBBBBBBBBBBSSSLLLLLLLLLLLLIIIIIIJJJJJJJJCJJUUUUUUUUUVVVOOOOOOOOOOYJJYYYYYPYYYNNUUUUUQQQGGGGGGGGGGGGCCCCCSSSSSSSSSSSHSSJJJJJJJJJJJJJBBBBBBBNN +BBBBBBBBBBBSSSSLLLLLLLLLLLIIIIIIXXJJJJJJJJJUUUUUUUJJVVVLQQQOOOOOOOOJYYYYYPPPPPNNUUUUUQQQUGGGGGGGGGGGCCCCSSSSSSSSSSSHHSJJJJJJJJJJJJJBBBBBBBBB +BBBBBBBBBBBGSSLLLLLLLLLLLIIIIIIIXXJEEJJJJJJUUUUUUUJJJVVLQQXQOOOOOOUYYYYYYPNPPPNPPPUUUQQQQGGGGGGGGGGGCCSSSSSSSSSSHHHHHSOJJJJJJJJJJJJBBBBBBBBN +BBBBBBBBBBPWLLLLLLLLLLLLLIIIIIIIXXXXEDDJJJJUUUUUUUJJJJQQQQQQQQQQQOUUYYYYYQPPPLPPPPOOQQQQGGGGGGCCCGGCCCSSSSSSSSSSHHHHHOOOJJJJJJJJJJJBBBBBBNBN +BBBBBBBBWWWWWWALLLLLLLLLIIIIIIIXXXXXXDDJJJVUUUUUUUJJJQQQQQQQQAAUUUUUUUUYYQPPPPPPPPOSSSSSSSGGGGCCCCCCCCCCSSSSSHHHHHHHHHOOOJJJJJJJJJJJBBNNNNBN +BBBBBBBBBBBWWWALLLLLLLLLLIIIIIIIXDXXXDDDVVVVVVVJJJJJJQQQQQQQAAAUUUUUUUYYYYPPPPPPPPPSSSSSSSGGICCCCCCCCCSSSSSSSSSSHHHHHOOOOJJJJJKKJJJJLSNSNNNN +BBBBBBBBBBWWWWJJJLLLLLLLLLLIIIIIDDDXDDVIIVVVVVVVJJJJJTQQQQQQAUUUUUUUUUUUYUUPPPPPSSPSSSSSSSGGGCCCCCCCCCCSSSSSSSSHHHHGHOOJJJJJJKKJJLJLLSNSNNNN +BBBBBBBBBWWWWJJJJJLLWLRJSIIIIIDDDDDDDDVVVVVVVVVPJJJJQQQQQQQQQGUUUUUUUUUUUUPPPPPPPSSSSSSSSSGCCCCCCCCCCCSSSSSSSSSSSSSSMJJJJJJJJJJLLLLLLSSSNNNN +BBDDBBBDBWJJJJJJJJJJJJJJJIIIIIDDDDDDDDVVVVVVVVVVVJJQQQQQQQQQQQUUUUUUUUUUUUPPPPPPPSCSSSSSSSGCCCCCCCCCCCCSSCSSSSSSSSSSJJJJJJJJJJJLLLSSSSSSSSNS +BPDDDDDDWWWJJJJJJJJJJJJIIIIIIIWDDDDDDDVVVVVVVVVVJJJQQQQQQQQQQQJUUUUUUUUUUUUUPPPPPPCSSSSSSSCCCCCCCCCCCCCCCCCSSSSSSSSSPJJJJJJJJJJJLLLSSSSSSSSS +PPPNNDWWWWWJJJJJJJJJJJJIIIIIIWWWDDDDDDDDVVVVVVVVJJQQQQQQQQQJJJJUUUUUUUUUUUUPGPPPDDSSSSSSSSSSJJCCCCCCCCCCCSSSSSSSSSSSSJJJJJJJJJJJJSSSSSSSSSSS +PNNNNNNWWRWJJJJJJJJJJJJJIIIIIWWWWDDDDDDDCVVVVVJJJJJJQJQJQJJJJJJUUUUUUUUUUUPPPPPPDSSSSSSSSSSACCCCCCCCCCCCCSSSSSSSLSSSJJAJJJJJJJOOOOSSSSSSSSSS +PPNNNNNWRRWWJJJJJJJJJJJIIIIIIWWWWDDDDDDDCVVVVVVJJJJJQJQJJJJSJJJUUUUUUUUUUUPUFFPPDDSVSSSSSASAAACCCCCCCWWOSSSSSSSSSSSSSAAJJJAJJTSSSSSSSSSSSSSS +PPNNNNNNNRWRRJJJJJJJJXJIIIIIIWWWWWDDDDDDDVWVVVVVJJJJJJJJJJJSJJJLLUUUUHUUUUUUFFPPFSSFSSSAAAAAAACCIIIJCWWWWSSSSSSSSSSSAAAAAAAAATTSSSSSSSSSSSSS +PPNNNNNNRRRRJJJJJJJJXXXIIAIWWWWWWHDDADDIIVWWWWVJJJJJJJJJJJJSSSSSSUUUUUUUUUUUUFFJFFFFFFAAAAAAAAAIIIIIWWWWWSUUUUUUUUUAAAAAAAAAATTSSSSSSSSSSSSS +NNNNNNNNNRRRRJJGGJXXXXXIAAAAWWWWGDDDAADLLWWWLLMLLLJJJJJJJJSSSSSSSSUUUUUUUUUUUJJJJFFFFFFFFAAKAAAIIIIIWWWWLSUUUUUUUUUAAAAAAAAAATTSSSSSSSSSSSSS +NNNNNNNNNRRRRRGGGJXXXAAAAAAAWAWADDDDAADLLLWWLLLLLLLLJJJJJJSSSSSSSSSOPUUUUUKKCCJJJFFFFFFFFFAKKAIIIIIIWWWWWSUUUUUUUUUAAAAAAAAAATTTSSSSSSSSSSSS +NNNNNNNNNRRRRGGGGGXXAAAAAAAAWAWAADDAAAAALLLLLLLLLLLLJJJJJJJBSSSSSSSPPPPUUKBKCKFFFFFFFFFFKKKKKAAAAIIIIWWAAAUUUUUUUUUAAAAAAAAAATTTTSSSJJSSSSSS +NNNNNNNNNRRRRRRGGGGGAAAAAAAAAAAAAAAAYYYALLLLLLLLLLLJJJJJJJBBBSSSSSSSPPPKKKKKKKFFFFFFFFFFKKKKKKAAIIIIUUWAAAUUUUUUUUUAAAAAAAATATTTTTTSJJSSSSSS +NNNNNNRNRRRRRRRGGGGWAAAAAAAAAAAAAAAAYYYZLLLLLLLLLHHHJJJJJJBBBSSSSSPPPPPPPTKKKKKKKKKKKFKKKKKKKKKLLIIIIIWWWYUUUUUUUUUAAAAAAATTTTTTTTJJJJJSJSJS +NNNNNRRNRRRRRRRGGGGGGGGAAAAAAAAAAAAYYYYYLLLLLLLLLLHHHHJJJBBBFSXSSSSPPPPPPPCKKKKKKKKKKKKKKKKKKAALLIIIIILZYYUUUUUUUUUAAAAAAATTTTTTJJJJJJJSJJJS +SQQNUURRRRRRRRRGGGGGGGGGAAAAAAAAAAYYYYYLLLLLLLLLLLLHHHJJJJBBBBBBSSPPPPPPPPKKKKKKKKKKKKKKKKKKKAALLIIIWWLZYYYYYYYAAAAAAAAAAATTTTTTJEJJJJJJJJJS +QQQQQUUUURRRRRGGGGGGGGGGAAAAAAYYYYYYYYYLLLLLLLLLLLLHHHYJJJBBBBBBDPPPPSPPPAKKKKKKKKKKKKKKKKLKAALLLLLLLLLLYYYYYYYAAAAAAAAAATTTTTTJLJJJJJJJJJJE +VQQQQQUUURRRRGGGGGGGGGGGGAAAAAYYYYYYYYYLLLLLLLLLLLLHHYYYYNBBBBBBDPPPPSPPPAKKKKKKKKKKKKKKKKLAALLLLLLLLLLLLLYYYYYAAAAAAATTATTTTTTJJJJJJJJJJJJJ +VVVQQUUUUURRRRGGGGGGGGGGGAAAAAYYYYYYYYLLLLLLLLLLLLLHYYYYBBBBBBBBDPSSSSSPPAAKTKKKKKKKKKKLLLLLLLLLLLLLLLLLLYYYYYYYAAAAATTTTTTTTTTTJJJJJJJJJJCJ +VVVVUUUUTRRRRRRGGGGGGGGGAAAEAYYYYYYYYYLLLLLLLLLLLLLYYYYYBBBBBBEBDSSSSSSSAAATTKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLYYYYYYAAAAAAATAZZZZTTTJJJJJJJJJJM +VVVUUUUUTTRRRRRRGJGGGUGXRRRERRRRYYYYYYYLLLLLLLLLLKYYYYYYYBBTWWEEWSSSSSSSSTTTTTTKKTKKKKLLLLLLLLLLLLLLLLLLLLFYYYYYYYYAAAAAAAZZZZZZZJJJJJJJJMMM +VVVUUUUUUTRRRRUUJJUUUUXXXRRRRRRRYYYYZZYYYLLLLKKKKKKYYYYYYYWWWWWWWSSSSSSSSWWTTTTTKTKKKKLLLLLLLLLLLLLLLLLLLLYYYYYYYYGGGGGGGGGGZZZZZZJJJJJJJMMM +VVVVUUUTTTRRRRUUUUUUUUXXXRRRRRRRVYZZZZZYYLLLLLKKKKYYYYYYYYWWWWWWWWSSSSSSSTTTTTTTTTTTKPPLLLLPZIZLLLLLLLLLLLYYYYYYYYGGGGGGGGGGZZZZZZZZZJJJJJMM +VVVVQUTTTTRTRRUUUUUUUUXXRRRRRRRVVZZZZZZZYYLLKKKKKKKYYYYWYYWWWWWWWWWSSSSSTTTTTTTTTTTTKPPLPPPPZZZZZLLLLLLLTTYYYYYYYPGGGGGGGGGGZZZZZZZZMMJMMMMM +VVVVVUTTTTTTRRUUUUUUUUUUURRRRRRRRRZZZZZZYGGLGKKKKKKWWWWWWWWWWWWWWWWWSSTTTTTTTTTTTTTTTPPPPPPPZZZZZZLLLLLLYYYYYYYYYPGGGGGGGGGGGGGGZZZZZMMMMMMM +VVVVVTTTTTTTRUUUUUUUUUUUURRRRRRRRBZZZZZZZGGGGKGKKKKWWWWWWWWWWWWWWWSSSVRTTTTTTTTTTTTPPPPPPPPZZZZZZNLLLLZZYYYYYYYPPPGGGGGGGGGGGGGGZZMMMMMMMMMM +YYYVTTTTTTTTRRUUUUUUUUUUURRRRRRRZBZZZZZZGGGGGGGGGKKKWWWWWWWWWWWWWVVVVVVTTTTTTTTTTTTTTPPPPZZZZZZZZNNNNLLPPYYYYYYPPPGGGGGGGGGGGGGGZZMMMMMMMMMM +YYYYYTTTTTTTTUUUUUUUUURURRRRRRRZZZZZZZZGGZGGGGGGKKKKWWWWWWWWWWWVVVVVVVVTXTTTTTTTTTTQPPPPPZZZZZZZZNNNNLNPPYYYYPYPPPGGGGGGGGGGGGGGZZZMMMMMMMMM +YYYYTTTTTTTTMMMUUUUHRRRRRRRRRRRRVZZZZZZZZZZGGGGBBBBKWWWWWWWWWWVVVVVVVVVVVVTTTTTTTTQQQPPPZZZZZZZZZZNNNNNPPYZYYPYPPPGGGGGGGGGGGGGGOOZZZZMMMMMM +YYVVIIETTTTTMMMUUUURRRRRRRRRRQCQQAAZZZZZZZGGGGGBBKKKKKMWWWWWWWWVVVVVVVVVTTTTTTTTTHQQZZZZZZZZZZZZZZNJNPPPPPYYYPPPPLLLLLLGGGGGGGGGOOZZZZMMMMMM +YYVIIIETTTTTTMMUUURRRRRRRRRRQQQQQQQQZZZZZZXGGGKKKKKKKMMMWWWWWWWWVVVVVVVVTTTTTTTTTTQQQZZZZZZZZZZJZZJJNJPPPPPYPPPPPLLLLLLGGGGGGGGGOOZZZMMMMMMM +VVVVVEETTTTTTTMMMMRRRRRRRRQQQQQQQMQXZZXXXXXGGKKKKKKKMMMMMMWWWWWWWVVVVVVVTVTTTTTTTTQQQQQZZZZZZZZJJZZJJJPPPPPYIIPPPPLLDLLGGGGGGGGGZZZZZMZMMMMM +VVVJVEEGTTTTTMMMMMRRRRRRRRRQQQQQQQXXXZXXXKKKGKKKKKKKMMMMMMWWWWWWUUVVVVVVTVTTTTTTTTQQQWQQQZZQZZZJJJJJPPPPPPIIIIIIIPPLLLLGGGGGGGGGVZZZZZZZMMMM +VVVVOEEEEETTTMMMMMMRRRRRRRRQPQQQQQXXXZZXXKKKKKKKKKKKMMMMMMMMWWWWWUBBVVVVTVTTTTJTWWWWQWWQQQZQZZZJJJJPPPPPPPPIIIIIPPPPPLLLLHHOOOOOZZZZZZZZMMMM +VVVVVVEEETTTTMMMMMMMRRRRRRPPPQQQQXXXXXXXXKKKKKKKKKKKMMMMMMBMBWBBBBBBVVVVVKKUUTJJWWWWWWWQQQQQQZJJJJJPPPPPPPPPPIPPPPPPPHHHHHOOOOOOOZZZZZZZZZMM +VVVVVVEEEETTTMMMMMMMRRRRRPPPPAQQXXAXXXXXXAAAKKKKKKKMMMMMMMBBBBBBBBBBBKKKKKKUUUWWWWWWWWWQQQQQQZZJJJJJJPPPPPPPPPPPPPPPPHHHHHOOOOOOZZZZZZZZZMMM +PVVVVVSEEEEEMMMMMMMMMRRRRPPPPAAAAAAAXXXXXAAAAAAAKARMMMMRRMHBBBBBBBBBKKKKKKUUUWWWWWWWWWWWQQQQQZZJJNJPPPPPPPPPPPEEPPLPHHHHHOOOOOOOZZZZZZZZZMMM +VVVVVVSEEEEEUUUUUMMMMMRRRPPPPAAAAAAAXXXXAAAAAAAAAARMRRRRRRRRBCBBBBBBKKKKKKKWWWWWWWWWWWWWQQQQQNNNNNJPPPPPPPPPPPEEZPPHHHSSHOOOOOOOZZZZZZAZAAMM +VVVVVVVUUHHHGGUUUUMMMMRPRPPPPAAAGKKAAXXAAAAAAAAAAARRRRRRRRRRVBBBBBBBKKKKKKKWWWWWWWWWWWWQQQQQQNNNNNJPPPPPPPPPPPEEEPPEEHSSOOOOOOOOOZZZZZAAAAMM +VVVVVVVUUHHHGHUUUUUUUUPPPPPPPGGGGKKAXXAAAAAAAAAAAARRRRRRRRRRRBBBBBBBBKKKKKKUTWWWWWWWWWQQQQQQQQNNNJJPPPPPPPPPPPREEEEESSSSSSOOOOOOOZZZZZAAAAAA +VVVVVJVUUHHHHHUUUUUPPPPPPPPPPGGGKKGXXXAAAAAAAAAAAARRRRRRRRRRREEBBEEEBBKKKLKTTTTWWWWWWWWWQQQQQQQQNJJJJJPPPPPPPPEEEEEEESSSSOOOOOOOOOOZZAAAAAAA +VVVVVJVUUHHHHHHUUUUPWWPPPPPPPPGGGGGGXXAAAAAAAAAAAAARRRRRRRRRREEWWWWWWWWKKKTTTTTWWWWWWQQQQQQQQQQNNNNJJJPPPPPPPEEEEEEEESSSSOOOOOOOOOOWAAAAAAAA +UUUUUUUUUUHHHUUUUUPPPWPPPPPPPPGGGGGGXXAAAAAAAAAAAYRRRRRRRREEEEFWWWWWWWWKKTTTTTTWWWWWWQQQQQQQQQQUUNNJJJJJJPPPEEEEEEEOSSSSSNNNNNNONOOOAAAAAAAA +UUUUUUUUUHHHHUUUUUPPPWWPPPPPPPGGGGZZAAAAAAAAAAAAAYYRRRRREEEEWWWWWWWWWWWKKKKKKKKKKWWWWQQQQQQQQQQUYNNYYYJJJPPPXEEEEEOOOSSONNNNNNNNNNNAAAAAAAAA +UUUUUUUUHHHHHHUUUUUUUWWPPPPPPPPGGGPPAAAAAAGZAAZZYYYRRRRRREEEWWWWWWWWWWWKOKKKKKKKKIIIIQQQQQQQWWUUYYYYYYYJJYXXXEEFOYOOOOOOONNNNNNNNNNAAAAAAAAA +UUUFEFBBBHWWUUUUUUWWWWWWWPPQPPPPPPPPEAAFAAZZVZZZYYYRRRRREEEFWWWWWWWWWWWWWWWWWWWWKIIIHQQQQQQQWWUUYYYYYYYYYYXXXEXOOOOOOOONNNNNNNNNANAAAAAAAAAA +FFUFFFBBBBWWWWUUUWWWWWWWWPPQQQPPPPPPPPYZZZZZZZZZYYYFREEEEEFFWWWWWWWWWWWWWWWWWWWWKIHIHQQQQQWWWWYYYYYYYYYYYYXXXXXOOOOOOONNNNNNNNNNAAAAAAAAAAAA +FFFOFFFBBWWWWUUUWWWWWWWKKQPQQQPPPPPPPPYYZZZZZZZZZYFFEEEEEFFFFWWWWWWWWWWWWWWWWWWWKIHHHQQQQQWWWWWWWYYYYYYYYYYYYYOOOOOOOONNNNNNNNNNNAAAAAAAAAAA +FFOOFFBBBWWWWWWWWWWWWKKKKQQQQQPPPPPPPPPYYZZZZZZZZZFFEEEEEFFFFWWWWWWWWWWWWWWWWWWWKHHHHQHHHWWWWWWWWWWWYYYYYYYYYIOOOOOOOOOONNNNNNNNNEAIIAAAAAAA +FFFFFFFBFFFWWWWWWWWWWKKKKQKQPQPPPPPPPPPPPZZZZZZWWWFFFFFFFOFFFWWWWWWWWWWMKKKKKKKKKHHHHHHHWWWWWWWWWWWWYYYYYYYIIIIOOOOOOONNNNNNNNNNEEEEEIAAAAAA +XFFFFFFFFFFWWWWWWWWWWWKKKKKQPPPPSSPPFPPZZZZZZZZWWWFFFFFFFFFFFWWWWWWWWWWKKKKKKKKKJJJHHHHHHWWWWWWWWRYYYYYYYYYIIIIIOOOOOONNNNNNNNNEEEEEEAAAAAAA +XFFFFFFFFFFFFWWWWWWWWKKKKKKKSPPSSSSSSSPPZZZZZWWWWWFFFFFFFFFFFWWWWWWWWWWKKKKKKKKKJJTTYHHHHHWWWWWWWWJYYYYYYYIIIIIIOOOOONNNNNNNNNNEEEEEENAAAAAA +FFFFFFFFFFFWWWWWWWWKKKKKKKKPSSSSSSSSSSPZZZZZZZZWWWWFFFFFFFFWWWWWWWWWMMKKKKKKKKKKJJJTYHHHHWWWWWWWWWYYYYYYYYIIIIIIOOOOOONNNNNNNNNEEREEEEAAAAAB +FFFFFFFFFRRRRRRRWKKKKKKKKKPPSSSSSSSSSZZZZZZZZZZZWWWFFFFFFFFWWWWWWWFFJJKKKKKKKKKKJJJJYYYYHWWWWWWWWWWWYYYYYYYYIIIIOOOOOOONVVNNNEEEEEEEEEAATABB +FFFFFFFFFFRRYRRRKKKKKKKKKKKKDSSSSSSSSZZZZZZZZVWWWVVFFFFFFUFWWWWWWWVFFJKKKJJJJJJJJJJJYYYYYFWWWWWWWWWWYYYYYYYYIIIIOOOOOOOOAVVNNNEEEEEEEEEEEAEB +FFFFFFFFFFRRRRRRRVKKKKKKKKKSSSSSSSSXSSZZZZZZZVVVVVVFFFFFFUFWWWWWWWVVVJJJJJJJJJJJJJJFYYYYWWWWWWWWWWYYYYYYYYYIIIIIIOOOBBVOVVVVVEEEEEEEEEEEEEEE +FFFFFFFFFFFRRRRRRVRKKKKKKKKKKSSSSSSSSZZZZZZZRRVVVVZZFFVVVFFWWWWWWWVVVJJJJJJJJJJJJJNNNNNWWWWWLWWWWYYYYYYYYIIIIIIIIIOBBVVVVVVVVVEEEEEEEEEEEEEE +FFFFFFFPPPRRRRRRRRRRKKKKKKKKKSSSSSSSSSZZZZZZRRVVVVVZZZVVVVVWWWWWWVVVJJJJJJJJJJJJJJJJNNNNWWWWWLLWLLLLLLYIIIIIIIIIIMMBBVVVVVJJJJJEEEEEEEEEEEEE +FFFFFFFPPPRRRRRRRRKKKKKKKKKKKKSSSSSSSSHZZZZZRVVVVVVVVVVVVVVVVVVVVVVVVVJJJJJJJJJJJJJJJNNNNNWWWWLLLLLLLLIIIIBIIIIIMMMMBVVVJJJJJJJJEEEEEEEEEQED +FFFFFFRPPPRRRRRRRRRKKKKKKKKKKHHSHSHHLLBXZBRRRRRVVVVVVVVVVVVVVVVVUVVVVJJJJJJJJJJJJJJJNNNNNWWWWWLLLLLLLLIIIBBBIIIIMMMMBVVJJJJJJJJJJJEEEEEEEEED +FEFFFFRPPPRRRRRRRRRKKKKKKKKAHHLHHHHHBLBBBBRRRRVVVVVVVVUUVUUUUUUUUUBBBBBJJJJJJJJJJNNNNNNNNWWWLLLLLLBLBBBSSBBBBBIIMMMMMVFJJJJJJJJJJJJJEEEEEEEE +EEBBBFRPPPRRRRRRRRRRHKKKJKKJJHHHHHHHBBBBBBRRVRRVVVVVVUUUVVUUUUUUUUUEBBBBBBJJBBBNNNNNNNNZNWWWLLLLLLBLBBBBBBBBBIIIMMMMMMEAJJJJJJJJJHJJEEEEEEEE +EEBBBBRPPPRRRRRRRRRRHHHHJKKJCHHHHHHVBBBBBBBRVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBNNNNNNNZZZWWWWLZLLLBBBBBBBBBBOOIIIIMDDMEEJJJJJJJJJJJJOJQQEQSE +EEBLBMMPPPRRRRRRRRRRHHJJJJJJCHHHHHHVBBBBBBBVVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBNBBNNNNNZZWWWWWZZZBBBBBBBBBBOOOIIIIDDDMEDJJJJJJJJJJJJJJQQQQQH +EEBBBBBPPPRRRRRRRRRRRHHJJJJJJHHHHHVVBBBBBBYYVVVVVVVVVUUUUUUUUUUUUUUBBBBBBBBBBBBBBBNNNZZZZZZZZZZZZBBBBBBBBOOOOOIIIODDDDEDJJJJJJJJJJJJJJQQQQQH +EEEBBBBPPPRRRRRRRRPPPJJJJJJJJJHHHHVBBBBBBBVVVVVVVVVVVVUUUUUUUUUUUUBBBBBBBBBBBSBBBZZZZZZZZZZZZZZZZZBBBBBOGOOOOOOOOOODDDDDJJJJJJJJJJJSSQQQQQQQ +BBBBBBBBJBRPPRRRRRPPPJPJJJJJJJJKHVVBBGGBGBGGVVVVVVVVVVVUUUUUUUUUUUBBBBBBBBBBBSBXXZZZZZZZZZZZZZZZZBBBBBBOOOOOOOOOOODDDDDDJJJJJJJJJJJQQQQQQQQQ +KBBBBBBBBBDPPPRRRPPPPPPPPPPJJJJKHHVBBHGGGGGVVLVVVVVVVVUUUUUUUUUKKUKBBBBBBBBBSSSSSSSZZZZZZZZZZZZZZBBBBOOOOOOOOOOOOODDDDDDDDDDJJJJJJJJQQQQQQQQ +KBBBBBBBBBDPDPRRPPPPPPPPPPPJJWJJHWBBBHHGGMGVVVVVVVVVVVVUUUUUUUUKKKKBBBBBBBBSSSSSSSSSZZZZZZZZZZZZBBBBBBOOOOOOOOOOOIOODDDDDDDDDDDDDQQQQQQQQQQQ +BBBBBBBBBBDDDPRPPPPPPPPPPPPJPWWWWWWWHHHGMZZZZZZZZVVVVVVHKKKKKKKKKKKUEBBBBBBSSSSSSSSSZZZZZZZZZZZZBBBBBBOOOOOOOOOOOOOODDDVDDDDDDDDDDQQQQQQQQQQ +BBBBBBBBBBDDDDDDPPPPPPPPPPPPPWWWWHHHHHHHMZZZZZZZZVVBVVVHCKKKKKKKKUUUUGGBBBSSSSSSSSSSZZZZZZZZZZZZZZOOOBOOOOOOOOOOOOOOVVVVDDDDDDDDDDDDDQQQQQQQ +BBBBBBBBBDDDDDDDPPPPPPPPPPPPPWWWHHHHHHHMMZZZZZZZZVVVQQCCCKKKKKKKKUUUUUBBBBYYSSSSSSNZZZZZZZTZZZZZOOOOOOOOOOOOOOOOOOOVVVVZZZZDDDDDDQQDDQQQQQQQ +BBBBBBBBBBDDDDDDDPPPPPPPPPPPWWWWHHHHHHHHHZZZZZZZZWWMMQCCCCCKKKWKUUUUUUUBBBBYYSYSSSSSZZZZZZTTTTTTTSOOOOMOXOOOOOOOOOOVVVVVZZZZDDDDDQQDQQQQQQQQ +MBBBBBBBBJDDDDDDDDLPPPPPPPPPPPPWHHHHHHHHHZZZZZZZZMMMMCCCCKKKKKKKUUUUUUUYYYYYYYYSSSSSZZZZZTTTTTTTTOOOOOOOXOOOOOOOOOOVVVVVZZZZZZDDQQQQQQQQQQQQ +MMJJJJJJJJJJDJJDDDLLLLLPPAQQPQQHHHHHHHHHHZZZZZZZZMMMMCCCCJKKDDDDUIUUUUUYYYYYYYYSSUUZZZZZZTTTTTTTAAOOOOOOOOOOOOOOOOBVVVSSSZZZZDDDDDDQQQQQQQQR +MMJJJJJJJJJJJJJJJLLLLLLLPAQQPQQQQQHHHHHHHHGGMMMMMMMMMNCCCCCCDDDDFFUUUUUYFFYYYYYYSZUZZZZZTTXTTJJJJJOOOOOOOOOOOOOOOBBVVVSSSSZZDDDEEDEQQQQQQQQR +MMJJJJJJJJJJJJJJJJJJLLLLPAQQQQQQQQHHHHVVVHGGMMMMMMMMMMMCCCCCDDDDDFFFUUFYFFYYYYYZYZZZZZZZZZJJJJJJJOOOOOOODLOOLLROOBBBVVSVVSSSEEEEEEEQQQQRQRRR +MMJJJJJJYJJJJJJJJJLLLLLLQAQQQQQQQQHVVHVVVGGGGMMMMMMMMMMMNCCCWDDWDFFFUFFYFFYYYYYZZZZZZZZZZZJJJJJJJOOOOOOOLLLLLLLOBBBVVVVVSSSSEEEEEEEQQQQRRRRR +MMMJJJJJJJJJJJJJJLLLLLLLQQQQQQQQVVHVVHVVVGGMMMMMMMMMMMMMMNCSWDDWWFFFFFFFFFFYYYYZZZZZZZZZZZZYYYYJJOOOOOOLLLLLLLLLLVVVVVVYESSSSEEEEEEEFERRRRRR +MMJJJJJJJJJJJJJJJLLLLLQQQQQQQQQQVVVVVVVVVVVMMMMMMMMMMMMMMMCSWWWWWFFFFFFFFFFYYYZZZZZZZZZZZJAYYYYJJJOOOOALQLLLLLLLKVVVVVVYEEEEEEEEEEEEEERRRRRR +MMGGJJJJSSJJJLJLJLLLLLLQQQQQQQQQQQVVVVVVVVVVMMMMMMMMMMMMMWSSWWWWWFFFFFFFFFFYYYZZZZZZZZZZZJJYYYYJJBOOOOOOSSLLLLLKKVVVVVVEEEEEEEEEEEEEEAERRRRR +MMGGJJSSSSSJJLLLLLLLLLLQQQQQQQQQQVVVVVVVVVVVMMMMMMMMMMMMMWWWWWWWWFFFFFFFFFFFYYYZZZZZZZZZZZYYYYYJJJWOOOCCSSLLLELKKKVVVVVEEEEEEEEEEEEEEEERRRRR +MMGGJSSLLSLLJLLLLLLLLLLQQQQQQQVVVVVVVVVVVVVVVJJMMMMMMMMWWWWWWWWWWFFFFFFFFFYFYYYYZZZZZZZZZZYYYYYJJJJSSSSCSSSLLEEVVVVVVVVVEEEEEEEEEEEEEEERRRRR +MMMMSSSLLLLLJLLBLLLLLQLQQQQQQVVVVVVVVVIVVVVZZJJMMMMMMMWWWWWWWWWWFFFFFFFFFYYYYYYYZZZZZZZZZZYYYYYJJJSSSSSSSSSSEEEVVVVVVVVVEEEEEEEEEEEEEEEERRRR +SSSMSLLLLLLLLLBBBLLLLQFFFFFFFFFVVVVVVVIVVVZZJJJJJMMMMMMMWWWWWWWWFFFFFFFFFFFYYYYYZZZZZZZZZZYYYYYJRJSSSSSSSSSSSRRRRRRRRVVVVWEEEEEEEEEEEEERRRRR +SSSSSSLLLLLLBBBBBBBBBBFFFFFFFFFVVVVVVVIIIIZZJJJJMMMMMMMMWWWWWWWWFFFFFFFFFFFYYYYYYYFFWZZZZLYYYYYJRRSSSSSSSSSSSRRRRRRRRVVVWWEETEEEEEEEGEEERRRR +SSSSSLLLLLLLLBBBBBBBBBFFFFFFFFFVVVVVIVIIIZZZJJJJXXXXWMMMWWWWWWWWAFFFFFFFFFFFVVYYVVFFFFFLLLYYYYYJRRSSSSSSSSSSSRRRRRRRRVVVVEEIEEEEIEEEEERRRRRR +SYYSSLLLLLLLBBBBBBBBBBFFFFFFFFFFFFVIIIIISZZJJJJJXXXWWMMMMWWWWWEFFFFFFFFFDFVVVVVVVAFFFFFFFLYYYYYJJSSSSSSSSSSSSRRRRRRRRVVVVIIIEEEIIEEEXERRRRRR +SYYYSSSSLLSLBBBBBBBBBBBFFFFFFFFFFFVIIIISSSSSJJJXXXXWWWWWWWWWWXXFFFFFFFFDDDDVVVVVAAFFFFFFFFYYYYJJJSSSSSSSSSSSSRRRRRRRRNNVVVIEEEIIIIRRRRRRRRRR +SYSSSSSSSSSSBBBBBBBBBBTFFFFFFFFFFFVIIIIIISSSSXXXXXXWWWWWWWWMWXXFFFFFFFFDDDDVVVVVVAFFFFFFFFYYYYJJJSSSSSSSSSSSSRRRRRRRRNIIIIIIIIIIIIRRRRRRRRRR +SYSSSSSSSSSBBBBBBBBBBBTFFFFFFFFFFFIIIIIISSSXXXXXXXXXWWWWWWWMXXXMMFFFFFDDDDDVDVVVVFFFFFFFFYYYYYYJYSSSOOSSSSSSSRRRRRRRRNNIIIIIIIIIIRRRRRRRRRRR +SSXXXSSXSSSSSUBBBBBBBTTFFFFFFFFFFFIIPPPPXSSSXXXXIXXXWWWWWMMMMMMMMFFFFDDDDDDDDVVVFFFFFFFFFYFFYYYYYYYOOOSSSSOSURRRRRRRRRRIIIIIIIIIIIRRRRRRRWRW +SSSXXXXXSSSSUUBBBBBBBTTTTTFFFFFFFFAPPPPLLLLLLLLLIIWWWWWWMMMMMMMMMMFMMDDDDDDDDDDQQFFFFFFFFFFYYYYYOOOOOOOOOOOUUUGGGGRRRRRNLIIIILIIIIRGWRRRWWWW +SSSXXXXXSSSUUUUBBBBBBTTTTTTTBBBBBAAAPPPLLLLLLLLLIIIWWWWWIIIMMMMMMMMMMDDDDDDDDDDQZFFFFFFFFFFYYYYYOOOOOOOOOOOUUGGGGDRRRRRNLLLLLLIIIIGGWWWWWWWW +SSSXXXXXSSSUUUUBBBBTTTTTTTTTBBBBBAAFFFFLLLLLLLLLIIIIIIIIIIIMMMMMMMMMMDDDDDDDQQQQQQFFFFFFQFFYYYBBBOOOOOOOOOUUGGGGGDRRRRRNNLLLLLLLIIGGGWWWWGWW +SSXXXXXXSSSUUUUUBBBTTTTTTTTTTRRBBBABFFFLLLLLLLLLIIIIIIIIIIIMLMMMMMMMMDDDDDDDQQQQQQFFFFQQQFQYQBBBBOOOOOOOOOOOOGGGGDRRRRROLLLLLLLLLIGGGWWWGGWW +XXXXXXXXSSUUUUUUUUUGGTTTTTTTTRRRRBBBFFFLLLLLLLLLIIIIIIIIILLLLLMMMMMMMDDDDQDDDDQQQQFQFFQQQQQQQQBBBOOOOOOOOTTYGGGGOORRRRROOLLLLLLLLGGGGGGGGGGG +XXXXXXXXSXUUUUUUUUUGGTTTTTTTTRRRBBBBFFFLLLLLLLLLIIIIIIIIIILLLLMMMMMMMDDVDQQQDQQQQQQQFQQQQQQQQQBBOOOOOPOJJYYYGGGGGORRRRROOLLLLLLLLLGGGGGGGGGG +XXXXXXXXXXUUUUUUGGGGGTTTTTTTRRRRRBBBBFFFFFFFFFFFIIIIIIILLLLLVLLLLMLMVVVVVFQQQQQQQQQQQQQQQQQQQQBBOOOOOOOJJJYYYYGYGOOOOOOOOOOLLLLLLIGGGGGGGGGG +XXXXXXXXXUUUUUUUUGNNGGTTTTTTTTKRBBBBBBFFFFFFFFFIIIIIIIIIVLLLVVLLLLLLVVVVVFFQQQQQQQQQQQQQQQQBQBBBOOOOOOJJJJYYYYYYGOOOOOOOOOOLLGGGGGGGGGGGGGGG +XXXXXXXXXUUUUUUUGGNNGGTTTTTTTTTRBBBBBBFFFFFFFFFIFFIIIRRRVVVVVVVLVVLLVVVVFFFQSQQQQQQQQQQQQQQBBBBBBBOOOJJJJJYYYYYYGGGOOOOOOOLLLLGGGGGGGGGGGGGG +XXXXXXXXXXXUUUUUUNNNNTTTTTTTTTTBBBBBBBBRFFFFFFFFFFFIIRRRVAVVVVVLVVVVVVVFFFFFQQQQQQQQQQQNQZQBBBBBBBOOOJJJJJYYYYYYYGOOOOOOOOOLLLGGGGGGGGGGGGGG +XXXXXXXXXXXUUUUNNNNNNNTTTTTTTTTTTBRRRRRRFFFFFFFFFRRRRRRRVVVVVZZVVVVVVVVVVFFFFFQQQQQQQQQQQQBBBBBBBBOOOJJJJJYYSYYYYGGOOOOOWOOLLLGGKGGGGGGGGGGG +XXXXXXXXXXXXUUUNNNNNNTTTWTTHHHTTHRRRRRRRFFFFFFFFFRRRRRRRVVVVVVZZVVVVVVVVVFFFFFFQQQQQUQQBBBBBBBBBBBORBQQQQQQQYYGGYGGOOOOOWOOLLLLGGGGGGGGGGGGG +XXXXXXXXXXXXUUNNNNNNNNTWWTTHHHHHHHRRRRRRRRRRRRRRRRRRRRRRRVVVOVVVVVVVVVVVVVFFFFFFFFFQBBBBBBBBBBBBBBBBBWWQQQQQYGGGGGOOOOOOOOOLLLLGGGGGGGGGGGGG +XXXXXXXXXXXUUUUNNNNNNNNNWWTTHHHHHHRRRRRRRRRRRRRRRRRRRRRRRVOOOOVVVVVVVVBBVVFFFFFFFFFFBBBBBBBBBBBBBBBBBWQQQQQQYGGGGGOOOPPPOLLLLLLLLGGGGGGGGGGG diff --git a/src/bin/12.rs b/src/bin/12.rs new file mode 100644 index 0000000..b423c83 --- /dev/null +++ b/src/bin/12.rs @@ -0,0 +1,157 @@ +use std::collections::HashSet; + +static DIRECTIONS: [(isize, isize); 4] = [(1, 0), (0, 1), (-1, 0), (0, -1)]; + +fn dfs(map: &[Vec], visited: &mut [Vec], x: usize, y: usize) -> (usize, usize) { + visited[y][x] = true; + + let mut area = 1; + let mut perimiter = 0; + for (nx, ny) in DIRECTIONS.into_iter().filter_map(|(dx, dy)| { + Option::zip( + x.checked_add_signed(dx).filter(|&nx| nx < map[0].len()), + y.checked_add_signed(dy).filter(|&ny| ny < map.len()), + ) + }) { + if map[y][x] == map[ny][nx] && !visited[ny][nx] { + let (narea, nperimiter) = dfs(map, visited, nx, ny); + area += narea; + perimiter += nperimiter; + } else if map[y][x] != map[ny][nx] { + perimiter += 1; + } + } + + perimiter += DIRECTIONS + .into_iter() + .filter(|&(dx, dy)| { + Option::zip( + x.checked_add_signed(dx).filter(|&nx| nx < map[0].len()), + y.checked_add_signed(dy).filter(|&ny| ny < map.len()), + ) + .is_none() + }) + .count(); + + (area, perimiter) +} + +fn dfs_border( + map: &[Vec], + visited: &mut [Vec], + border: &mut HashSet<(usize, usize, usize)>, + x: usize, + y: usize, +) -> (usize, usize) { + visited[y][x] = true; + + let mut area = 1; + let mut perimiter = 0; + for (i, nx, ny) in DIRECTIONS + .into_iter() + .enumerate() + .filter_map(|(i, (dx, dy))| { + Option::zip( + x.checked_add_signed(dx).filter(|&nx| nx < map[0].len()), + y.checked_add_signed(dy).filter(|&ny| ny < map.len()), + ) + .map(|(nx, ny)| (i, nx, ny)) + }) + { + if map[y][x] == map[ny][nx] && !visited[ny][nx] { + let (narea, nperimiter) = dfs_border(map, visited, border, nx, ny); + area += narea; + perimiter += nperimiter; + } else if map[y][x] != map[ny][nx] { + border.insert((i, x, y)); + } + } + + for (i, _) in DIRECTIONS.into_iter().enumerate().filter(|&(_, (dx, dy))| { + Option::zip( + x.checked_add_signed(dx).filter(|&nx| nx < map[0].len()), + y.checked_add_signed(dy).filter(|&ny| ny < map.len()), + ) + .is_none() + }) { + border.insert((i, x, y)); + } + + (area, perimiter) +} + +fn main() { + let text = std::fs::read_to_string("input/12-1.in").unwrap(); + + let map = text + .lines() + .map(|l| l.chars().collect::>()) + .collect::>(); + + let mut visited = vec![vec![false; map[0].len()]; map.len()]; + + let mut sum = 0; + + while let Some((x, y)) = visited + .iter() + .enumerate() + .flat_map(|(y, l)| { + l.iter() + .enumerate() + .filter(|&(_, &b)| !b) + .map(move |(x, _)| (x, y)) + }) + .next() + { + let (area, perimiter) = dfs(&map, &mut visited, x, y); + sum += area * perimiter; + } + + println!("{sum}"); + + let mut visited = vec![vec![false; map[0].len()]; map.len()]; + + let mut sum = 0; + + while let Some((x, y)) = visited + .iter() + .enumerate() + .flat_map(|(y, l)| { + l.iter() + .enumerate() + .filter(|&(_, &b)| !b) + .map(move |(x, _)| (x, y)) + }) + .next() + { + let mut border = HashSet::new(); + let (area, perimiter) = dfs_border(&map, &mut visited, &mut border, x, y); + + let mut borders = 0; + while let Some(&v) = border.iter().next() { + let (i, x, y) = border.take(&v).unwrap(); + borders += 1; + + let (dx, dy) = DIRECTIONS[(i + 1) % 4]; + + let mut j = 1; + while Option::zip(x.checked_add_signed(dx * j), y.checked_add_signed(dy * j)) + .filter(|&(nx, ny)| border.remove(&(i, nx, ny))) + .is_some() + { + j += 1; + } + + let mut j = -1; + while Option::zip(x.checked_add_signed(dx * j), y.checked_add_signed(dy * j)) + .filter(|&(nx, ny)| border.remove(&(i, nx, ny))) + .is_some() + { + j -= 1; + } + } + sum += area * borders; + } + + println!("{sum}"); +}