diff --git a/res/12/example b/res/12/example new file mode 100644 index 0000000..85b768f --- /dev/null +++ b/res/12/example @@ -0,0 +1,10 @@ +RRRRIICCFF +RRRRIICCCF +VVRRRCCFFF +VVRCCCJFFF +VVVVCJJCFE +VVIVCCJJEE +VVIIICJJEE +MIIIIIJJEE +MIIISIJEEE +MMMISSJEEE diff --git a/res/12/input b/res/12/input new file mode 100644 index 0000000..a68fbb3 --- /dev/null +++ b/res/12/input @@ -0,0 +1,140 @@ +GGGGGDDDDSSSEEEEEEEEEEEEEEEUFFOOOOOOOYYKKKKXKKKKKKKKKKKKKNVVVVVVVVVVVVVVVVVVVYYEEZNNNNNNNNNNBNSSNNNWUUUUUUKKKKKKKKKKKKKKKKKKKKHHHHHHHHHHHHHH +GGDDDDDDDSSSSEEEEEEEEEEEEEEFFFOOOOOOOYYKKKKKKKKKKKKKKKKKNNNVVVVVVVVVVVVVVVVEYYEEENNNNNNNNNNNNNSNNNWWWWWUUIITTKKKKKKKKKKKKKKKKHHHHHHHHHHHHHHH +GGGDDDDDDSSSEEEEEEEEEEEEEFFFFFOKOOOOOOOOKOKKKKKKKKKKKKKKKNNVVVVVVFVVVVVVVVVEEEEEENENNNNNNNNNNNNNNNWWWWWUUTTTTTTKKKKKKKKKKKKKKKHHHHHHHHHHHHHH +GGGGDDDDSSSSESEEEEEEEEEEEEEFFFOOOOOOOOOOKKKKKKKKKKKKKKKKNNNVVVVVVFFFVVVVEEEEEEEEEEEENNNNNNNNNNNNNWWWWWUUUUTTTTTKKKKKKKKKKKKKKKKHHHHHHHHHHHHH +GGGDDDDDTSSSSSSESSEEEEEEEEEFFFFOOOOOOOOOKKKKKKKKKKKKKKKKNNNVVVVVVFFFVVVVEEEEEEEEEEBBBNNNNNNNNNNNWWWWUUUUUTTTTTTTTKKKKKKKKKKKKKKHNHHHHHHHHHHH +GGGBDDDDTSSSSSSSSSSEEEEECFFFFFONOOOOOOOOOOKKKKKKKKKKKKNNNNVVVVVVVFFFVVVVEEEEEEEEEEBBBBBBNNNNNNNNWWWXUUUUUTTTGTTTTTTTKKKKKKKKKKKHNHHHHHHHHHHH +GBBBDDDDSSSSSSSSSSSJEEELFFFFFFOOOOOOOOOOOOKKKSKKKKKKKKKNNNNVVVVVVVVVVVVEEEEEEEEEEBBBBBBNNNNNNNWWWWWFFFFFFFFFFFFFFFTKKKKKKKKKKKHHNHHHHHHHHHHH +GGBBBBBUUUUUUUSSSSSSSLLLFFLFFFOOOOOOOOOOOOKKKKKKKKKKKNNNNNNMMMMVVVVVVVVEEEEEEEEEEBBBBBBBNNNNNNWWWXXFFFFFFFFFFFFFFFFFFFFFFFFKKKHHHHHHHHHHHHHN +BBBBBUUUUUUUUUUSSSSSLLLLLLLFFLOOOOOOOOOOOOKRKKRRKKKKKKKNMMMMMVVVVVVVVVVVEEVVEEEEEBBBBBBBNNNNNXXXXXXFFFFFFFFFFFFFFFFFFFFFFFFKKKHHHZZVHHHHXHHN +BBBBBUUUUUUUUUUAAAAALLLAAAAAAALOOOOOOOOOOOORRRRRRKKKKKQMMMMMMMVMMVGGVVVVVVVVEEEEEBBBBBBNNNUNNXXXXJXFFFFFFFFFFFFFFFFFFFFFFFFKKKHHHZZVFFHHHHNN +BBBBBUUUUUUUUUUAAAAAAAAAAAAAAAZOOOOOOOAOOOOAARRRRRKKRRRMMMMMMMMMMGGGGGVVVVVVEEUEEBBBUUNNNNUUXXXXXXXFFFFFFFFFFFFFFFFFFFFFFFFKKKKKZZVVVVVEHVNN +BBBBBUUUUUUUUUUUAAAAAAAAAAAAAAJJJJOOAAAAAORAARRRRRRRRRMMMMMMMMMMMGGGGGVGGGGEREEWESSUUUUUUUUXXXXXXXXFFFFFFFFFFFFFFFFFFFFFFFFKKKKKKZZVVVVVVVNN +BBBBBUUUUUUUUUUUAAAAAAAAAAAAAAJJJOOOAAAAAAAAARRRRRRRRRMMMMMMMMMMMGGGGGGGGGEEEEWWWUUUUUUUUUUXXXXXXXXXXXXXVFFFFFFFFFFFFFFFFFFQQQKKKVVVVVVVVVVV +BBBBBUUUUUUUUUUUUUUAAAAAAAAAAAZZIDAAAAAAAAAAAAAARRRRRRRFMMMMMMMMMGGGGGGGGGGGFEWWWUUUUUUUUUUXXXXXXXXXXXXZZFFFFFFFFFFFFFFFFFFSQQKQQVVVVVVVVVVV +KKKBBUUUUUUUUUUUUUUAAAAAAAAAAAIIIDAAAAAAAAAAAAAAARRRRRFFMFMMMMMMMGGGGGGGGGEGGWWWWUUUUUUUUXXXXXXXXXXXXAZZZFFFFFFFFFFFFFFFFFFSQQKQQQQVVVVVVVVV +KKBBBUUUUUUUUUUUUUUAAAAAAAAAAAIIAAAAAAAAAAAAAAAAAARRRRFFFFFMFFMMNGGGGGGHEEEEWWWWUUUUUUUXXXXXXXXXXXXXXAZZZFFFFFFFFFKKKKSSCSSSQQQQVVVVVVVVVVVV +KKBBKKKKSUUUUUUUUUUAAAAAAAAZZZIIIIAAAAAAAAAAAAAAAARRRRFFFFFFFFFFGGGGGGGHEEEEEWWWUUUUTUUXXXXXXXXXXXXXXZZZZZZZZZOKKKKKSSSSSSSSSSVVVVVVVVVVVVVV +KKKKKKKKSUUUUUUUAAAAAAAAAAAZZZIIIIAAAAAAAAAAAAAAAARRRFFFFFFFFFFFFGGGGGGEEEEEEWTTYYTTTDUXXXXXXXXXXXXXXEZAAAAAAAAAKSSKSSSSSSSSSSXVVVVVVVVVVVVV +KKKKKKKKKUUUUUUUIEIAAAAAAAZZZZIIIIKIAAAAAAAAAAAAAARRRFFFFFFFFFFFRGGGGRREEEEEEWTTTTTTTTUXXXXXXXXXXXXXIIZAAAAAAAAAGSSSSSSSSSSSSSXXVVVVVVDVVVVV +KKKKKKKKKUUUUUUUIEIEZZZZZZZZZZZIIIIIAAAAAAAAAAAARRRRRFFEFFFFFFFFRGGGGRRRRRRRWWTTTTTTTGGGGGXXGXXXXGXAAAAAAAAAAAAASSSSSSSSSSSSSXXVVVVVVVDVVVVV +KKKKKKKKKUUUUUUUEEIYZZZZZZZZZZGWOIUAAAAAAAAABBAARRRRZTTFFFFFZFRRRRRRRRRRRRRRRTTTTTTTTTTGGGGGGXXXXGGAAAAAAAAAAAAAGSSSSSSSSSSSXXXVVVVVDVDDVVVV +KKKKKKKKKEEEEEEEEEIYYYYTTGWWWZWWIIUUAXAAAAAAYYYYRRRRZZZZZZZZZFRRTTTTTRRRRRRRRRTTTTTTTTGGGGGGXXXGGGGAAAAAAAAAAAAAGSSSSSSSSSSSXXXXXVVVDDDDDDVV +KKKKKKKKKEEEEEEEEEEYYYYTGGWHWZWWWIUHHXAAAAAAYYYYYRRZZZZZZZZZZZRRRTRRRRVRRRVVTTTTTTTTTTTGGGBBBBBGGGGAAAAAAAAAAAAAGGSSSSSSSSSXXXXXVVVDDDDDDDVV +KKKKKKKKKEEEEEEEEEEYGVGTGGHHHWWHIIUHHHYYYYAYYYYBBZZZZZZZZZZZZZZRRRRRRRVVVRVVAATTTTTTTTTTTBBBBBBBBGGAAAAAAAAYGGGGGGWGSPPPPPSXXXXXXVDXDDDDDDVV +KKKKKKKKKEEEEEEGGGGGGGGGGGHHHHWHHHHHHHHYYYAYYYYBZZZZZZZZZZZZZZRRRRRRRRVVVVVVAATTTTTTTTTTHBBBBBBYGGGAAAAAAAAGGGGGGGGGGPPPPPPPXXXXXXDDDDDDDDDV +KKKKKYYKKEEEEEGGGGGGGGGGGGHHHHHHHHHHHHHYYYYYYYZZZZZZZZZZZZZZZZZRRRRRRVVVVVVVVAATTTTTTTTHHBBBBBYYYYYAAAAAAAAGYGGGGGGGGPPPPPPPPXXXXXXDDDDDDDDD +KKKYYYYKKKEEEEGGGGGGGGGGGGHHHHHHHHHHHHPYYJYYYYYYZZZZZZZZZZZZZZZRRRRRRVVVVVVVVVAATTTTTTTTBBBBBUUYYYYYYYAAAAAYYGGGGGGPPPPPPPPPXXXXDDDDDDDDDDDM +KKFFYYYEEEETEGGGMMMMMMMGGGHHNNHHHHHHHHPPPJYJJJJJJGGZZZZZZZZSSSRRRRRVVVVVVVVVCCVTTTTTTTTTTUBUUUUYGYAYYYAAAAAPYGGGGGGPPPPPPOPPXXXXDDDDDDDDDDDD +YFFFYQYYYYEEEEGGMMMMMMMGGGGNNNNNNNNHHHPJJJJJJJJJJJGZZZZZZZZSSRRRRRRRRHVVVVVVVCVTTTJTTTTTUUUUUAAAAAAAAAAAAAAGGGGGPGPPPPPOOOPXXXXXDDDDDDDDDDDD +YYYYYYYYYYEEEYLLMMMMMMMGGGGNNNNNNNNHPPPJJJJJJJJJJJJZZZIZZZZRSRRRHHRHHHVVVVVVVVVTTVVTUUUTUUUUUAAAAAAAAAAYYYBGGGGGPPPPPPPOOOOOOXOOODDDDDDDDDDZ +YYYYYYYYYYYYYYYLMMMMMMMGGGGNNNNNNNNNPPPJJJJJJJJJJIIIIIIIZZRRSRRHHHHHHHHVHVVVIIVVVVVVUUUUUUUUUAAAAAAAAAAAYBBGGGGPPPPPPPOOOOOOOOOOOODDDDDDZZDZ +YYYYYYYYYYYYYYYGMMMMMMMGGGNNNNNNNNRSRPPPPJJJJJJJJIIIIIIIZRRRRRHBBHHHHHHHHHHVVVVVVVNUUUUUUUUUUAAAAAAAAAAAAAAGGGPPPPPPPPPPOOOOOOOOOOOODZZDZZZZ +YYYYYYYYYYYYYYYGMMMMMMMGGGNNNNNNNNRRRRRRJJJJJJJJJIIIIIIZPRPHHHHHHHHHHHHHHJJVVVVVVVNUUUUUUUUUOAAAAAAAAAAAAAAAGGPPPPPPPPOOOOOOOOOOOOOOOOZZZZZZ +YYYYYYYYYYYYYYYXMMMMMMMGGGGGNNNNNRRRRRRRRJJJJJJJJIIIIIIZPPPHHHHHHHHHHHHHHHHVVVVVVVNUUUUUUUUUOOJOOOAAAAAAAAAAGPPPPPPPPPOOOOOOOOOOOOOOOOZZZZZZ +YYYYYYYYYYYYYYYYMMMMMMMGGGNNNNNNNNRRRRRRRRRJJJJJJIIIIZZZZZPHHHHHHHHHHHHHHHHHVVVVVVNUUUUUUUUUOOOOOOAAAAAAAAAAAPPPPPPPPPPPPOOOOOOOOOOOOOOZSSZZ +YYYYYFYYYYYYYYYYMMMMMMMNGNNNNNNNNNRRRRRRRRRHJJJRJIIIIIZZZZZHHHHHHHHHHHHHHHHVVVVVVNNUUUUUOUOOOOOOOMAAAAAAAAAAPPPPPPPPPPPPPOOOOOOOOOSSOSSSSZZZ +YYYYYKPYTYYYYYYYMMMMMMMNNNNNNNNNNRRRRRRRRRRHRTJJJIIZZZZZZZZZHHHHHHHHHHHHHPPPVVVVVGNUUUUOOOOOOOOOOMMMOAAAAAAPPPPPPPPPPPPPOOOOOOOOOSSSSSSSSSSZ +YYYYKKKTTTYYYYYYMMMMMMMNNNNNNANAARRRRRRRRRRRRJJIIIIIZZZZZZZZHHHHHHHHHHHHZZZVVVVVGGNUUUUOOOOOOOOOMMOOOAPAHHHPPPPPPPPPPPPPPOOOOOOOOOSSSSSSSSSZ +YYYYYKKKKTKKKKKMMMMMMMMNNNNNNAAAARLRRRRRRRRRRRIIIIIIZZZZZZZZHMHHHHHHWHZZZZZVVVVVGUUUUUUTOOOOOOOOOOOOLOAAHHHHPPPPPPPPPPPPPOOOOOOOOOSSSSSSSSSZ +YYYYYYYKKKKKKKZZZMMMMNNNNNNNAAAAARLLRRRRRRRRRIIIIIIIZZZZIZZZZHHHHTHHZZZZVZZHHVVUUUUUUUZOOOOOOOOOOOOOOOCAAHHHHHPHPPPPPPPPPPPOSSOOOOOSBSSSSSJJ +YYYYYYYKKKKKKKKKKMMMMMMNNNNAAAAAAAARRRRRRRRRRRPPIIIIIZIIIZZZZZHLHTHHZZZZZZZHHUUUUUUHUUUHOOOOOOKKKSSSSSCAAHHHHHHHHPPPPPPPPPSSSSSSOOOOBSSSSSJJ +YYYYYYYKKKKKKKKMMMMMMMMNNNNAAAAAAAAAARRRRRRRRPPPPPIIIIIIZZZZZHHLZTZIZZZZZZZZZUUUUHHHUUUHHOOHOOKKKKKSSSSHHHHHHHHHPPPPPPPPPPPSNNNXNNNNNSSSSJJJ +YYYYYYYKKKKKKKKKKMMMMMNNNNNAAAAAAAAAARRRRRRRRPPPPIIIIIIZZZZZZZZZZTZZZZZZZZZUUUUUUUHHHHHHHHOHHKKKKKKSSSSSSHHHHHHHHPPPPPPPCCCNNNNNNNNNNWSSJJJJ +YRYYYYKKKKYYYKKKMMMMMMNNKKKKKKAAMMAAARRRRRRRPPPPPIIIIIIZZZZZZZZZZZZZZZZZZZTUUUUUUUUHHHHHHHHHHKKKKKDSSSSSSSHHHGGGHHHPPPPCCCCNNNNNNNNNNWWWJJJJ +RRRYYYYYYYYYYYYYMMMMMNNNKKKKKKKAAMMAARRRRRRRPPPPPPPIIOIZZZZZZZZZZZVVZZZZZZTTTUUUTTUPPHHHHHHHHKKKKKKFSSHHHSHHGGGGGHNPPPCCRRCNNNNNNNNNNWWWJJJC +RRRRYYYYYYYYYYYMMMMMHNNNVVKKKKKAHHMARRRRRRRRRPPPPFFOIOZZZZZZZZZVVVVVVZZZZZTTTUUUTTTPPPPHHHHHHKKKKKKKKKKHHHHHHGGGGGNNNPCCRRRRNNNNNNNNNWWWWJJC +RRRRRRRYYYYYYYOOEOOMHHNNNNHHNNNHHIMMIRRRRRRRPPPPYOOOOOOZOOOOOVVVVVVVVZLZZZTTTTTTTTPPPPPPHHHHHKKKKKKKKKKHHHHHHGGGGGGNGRRRRRRRRNNNNMNNWWWWWVVC +RRRRRRYYYYYYYOOOOOOMMHHNNTNNNNNHHIIIIRIIIPRRRRLOOFOOOOOOOOOOOVPVVVVVVVLZZTTTTTTTTTPPPPHHHKKKKKKKKKKKHHHHHHHHHGGGGGGGGGRRRRRRRNNNMMMMMWWWVVVV +GRRRRYYYYYYYYOOOOOOOOOHOITNNNNNNHHIIRRIIIPPRRROOOOOOOOOOOOOOOOPVLLLLLLLZZTTTTTTTTTTPPPPHHKKKKKKKKKKHHHHHHMHHHGGGGGGGGGRRRRRRRNNNMMMMMWMWVVVV +GRRRRRYYYYYVYOOOOOOOOOOOIINNNNNCCHIIIIIIIIPPPPOOOOOOOOOOOOOOOOPVVYLLLLLZTTTTTTTTTTTTPPGRHKKKKKKKKKKHHHHHMMMMMGGGGGGGGGRRRRRRRRNNMMMMMMMWWVVV +GRRRRRYVYYYVYBOOOOOOOOIIIIOONNNCCIIIIIIIPPPPPPPPOOOOOOOOOOOOOOOVYYLLLLLTTTTTTTTTTNNNRRGRHHRKKFKKBKKBHHHMMMMMMGGGGGGGGGGRRRRRRNNMMMMMMMMWVVVV +GGGGGGYVVVVVVVVOOOOOOOIIIIIINDNICCIIIIIIPPPPPPPPOOOOOOOOOOOOOOOOYLLLLLTTTTTTTTTTTNNRRRRRRRRRFFFBBBBBMMMMMMMMGGGGGGGGGGGRRRRRRRRRMMVVVMMMVVVV +GGGGGGYVVVVVVVVVOOOOOOIIIIIIZIIIICIIIIPPPPPPPPPPOOOOOOOOOOOOMMMLLLLLLLLLTTTTTTNNNNNNRRRRRRRRBFFFBBBBMMMMMMMGGGGGGGGGGGGGSRRRRRRRRCVVVVVMVVVV +GGGGGGGGVVVVVVVVOOOOOOIIIIIIIIIIIIIIIPPPPPPPPPPPOOOOOOOOOOOOOMMLLLLLLLLLLTTTENNNNNNNRRRRRRRRRFYFBBBBMMMMMMMMGGGGSSSAGGGKSSRCCCRRCCVVVVVVVVVV +GGGGGGGGVVVVVVVVOOOOOOIIIIIIIIIIIPPIIPPPPPPPPPOPPOOOROOOOOOOOOMMLLLLLLLELLTTENENNNNRRRRRRRFFBFFFFFFFMMMMMMMMMGGMISSSSSGSSSSJCCCCCVVVVVFFFVVV +GVGGGGGRRVVVVLVOOOOOOOIIIIIIIIIIIAPPPPOOOOOPOOOPPPOOOOOOOMMMMMMLLLLLLLLEEEEEEEENNNNNIIIRRRFFFFFFFFFMMMMMMMMMMGMMMSSSSSSSSSSSVCCCCVVVVVFFFFFF +VVGGGGRRRVVVVLVOOOOOOOOIIIIIIIIIIAPAAAAOOOOOOPOOOOOOOOOOOSSMMMMMMLLLLLLEEEEEENNNNNNNIIIRRRFFFFFFFFFMMMMMPPMMMMMMSSSSSSSSSSSSCCCCVVVVVVFFFFFF +VVRRRRRRRVVVLLKLOOOLLLOIIMMIIIAAIAPAAAAOOOOOOOOOOOOOOOHHOSSSSMSMLLLLLLLLEEEEENNNNNNNIIIRRRFFFFFFFFFMFMMMPMMMMMMMMMSSSSSSSSKKCCCCCCCVVVFFFFFF +VVVVVRRRRVVVLLLLLLLLLLOOOIIIAAAAAAAAAAAAOOOOOOOOOOOOOOOSSSSSSSSMLLLLLLEEEEDNNNNNNNNNIIIRRGFFFFFFFFFMFMMHPMMPPPPMMMSSSSSSSSKCCCCVCCVVVVFFFFFF +VVVVVRRRRVVLLLLLLLULLLOOOOOIAAAAAAAAAAABOOOOOOOOOOOOOOOSSSSSSSSMMLSSSLEEDEDLNDNNNNNNIIIGGGFFFFFFFFFMFMMPPPMMPPPPSSSSSSSSZKKKKVVVVVVVFFFFFFFF +VVVVVVVRRVVLLLLLLLLLLLLOOOOOAAAAAAAAAAAAAAOOOOOOOOOOOOOSSSSSSSSSMLLSSEEYDDDDDDDNNNNNIIIGUFFFFFFFFFFFFMKPPPPPPPPSSSSZSZZZZKKKVVVVVVVFFFFFFFFF +VVVVVVVVRVLLLLLLLLLLLLLOOOOOOAAAAAAAAAAAAAAOOOOOOOOOOOSSSSSSSSSLLLSSEEEEDDDDDDIIIIIIIIIUUFFFFFFFFFFFFMKPPPPPPPPPSSSZSZZZZZKVVVVVVVVVFFFFFFFF +VVVVVVVVVVVLLLLLLLLLLLLLLOOOAAAAAAAAAAAAAOOOOOOOOOOOOOSSSSSSSSSSSSSSSESSSDDDDDIIIIIIIIIUUFFFFFFFFFFFFPPPPPPPPPPSSSSZZZZZZZZVVVVVVVVFFFFFFFFF +IIVVVVVVVVVVLLLJLLLLLLLOLOOUAAAAAAAAAAAAAOOOOOOOOOOOSSSSSSSSSSSSSSSSSSSSSDDDDYIIIIIIIUUUFFFFFFLFFFSFFVVPPPPPPPPPPSSZZZZZZZZIVIVVIVVIFFFFFFFF +IIIVHHHHHHVMMMLMSLLLLOOOOOUUAAAAAAAAAAAAAOOOOOOOEEEEEEESSSSSSSSSSMSSSSSSSDDDYYIIIIIIIGUUIFFPPFFFFFFFVVLLLLPPPPPPPPZZZZZZZZIIIIIIIIIIIIFFFFFF +IVVVVHHHHHMMMMMMMMMLLOOUUOUAAAUAAAAAAAAAALNOOOOOEEEEEEEEEEEEESSSSSSSSSSSSYDYYYYYYYYGGHIIIIFYYYFPFFFVVVLLLLPQPPPPPZZZZZZZZZIIQIIIIIIIIIFFFFFF +PVVVHHHHHHBMMMMMMMMMOOUUUUUUUUUAUAAAAAFANLNNNOOOEEEEEEEEEEEEESSSSSSSSSYYYYYYYYYYYYGGGHHIIIIYYYFVVSVVVVLLLLPPPPPPPPZZZZZZZZQQQQIIILIIIIIFFFFK +PTVHHHHHHHBMMMMMMMMMOOOUUUUUUUUUUAUAAAANNNNNOOOOEEEEEEEEEEEEESSSSSSSSSSYYYYYYYYYYGGGGHHHHIIYYYYYVVVVVVLLLLVPEPPPZZZZZZZZZQQQQQQLLLLIXFFFFFFF +TTHHHHHHHHMMMMMMMMMMMOUUUUUUUUUUUUUAAANNNNNNNOOAEEEEEEEEEEEEESSSSSSSSYYYYYYYYYYYYYGYYHHHHHIYYYYYYVVVVVLLLLLVVPPPZZZZZZZZZVVVVVVVVVVLXXFFFFFF +DTTTHHHHHHMZMMMMMMMMMMUUUUUUUUUUUUAAAAANNNNNNNAAEEEEEEEEEEEEESSSSSSSSSYYYYYYYYYYYYYYYYHHHHISYYYYVVVVVVLLLLLVPPAAZZZZZZZZZVVVVVVVVVVLXXXFFFFF +DTTTTNHHHZZZMMMMMMMMMMUUUUUUUUUUUUUQANANNNNNNNAAAGUUAEEEEEEEESSSSSSYYYYYYYYYYYYYYYYYYYHHHSSSSYYVVVVVVVLLLLLVVVAZZZZZZZZZZVVVVVVVVVVVVVXXXXFF +DTTTTTHHHHZZMMMMMMMIIIUFUUUJWUUUDDXXNNNNNNNNNNNAGGUCAAAACCCCCSASSSSSSYYYYYYYYYYYYYYYYOOHKKSSSYVVVVVVVVLLLLVVVVVZZEEZZZZZZVVVVVVVVVVVVVXXXXFF +DDTTTTHHHHHHWMMMMMIIIIIUUUUJWWWDDXXXXXNNNNNNNNNGGUUCACACCCCAAAAAASSSSYYYYYYYYYYYYYPYOOOHSSSSSSSWVVVVGVVVVVVVVVOOZEZZZZZZZVVVVVVVVVVVVVXXXXXX +DTTTTTHHQHHHMMBMMMIIIIIIIIIWWWWWDXXXXXNNNNNNNNNUUUUCCCCCCCCAAAAAAASSOOYYYYYYYYYYYYYYOOOOOSSSSSSSBVBBVVVVVVOVVYOOOZZZVVVVVVVVVVVVVVVVVVXXXXXX +DTTTDHHHQHHHBBBBMBIIIIIIIWWBWWWFXXXXXXXXNNNNNUKKUUUCCCCCCCCCCCAAAASOOVYGGGYYYYYYYYYYYOOOSSSSSSSSBBBBBBVVVVOOOOEOOFZZVVVVVVVVVVVVVVVVVVXXXXXK +DDTDDDJHJJBBBBBBBBIIIIIIWYWWWWWWEXXXXXXXNQUUUUUUUUUUCCCCCCCAAAAAAOOOOOOGGGYYYYYYYOOOOOOOSSSSSSSSBBBBBVVVVVOOOOOOOOOZVVVVVVVVVVVVVVVVVVXXXXXK +DDDDJDJJJBBBBBBBBBBBIIIWWYWWWWWWEXXXXXXDNNUUUUUUUUUUUUUCCCCAAAAAAAAOOBOGGGYYJYYYYYNOOOOOEESSSSSBBBOOOOOVOOOOOOOOOOORVVVVVVVVVVVVVVVVVVXXXXXX +DDDDJDJJJBBZZBBBBBBBBBIWWWWWWWWWXXXXXXXXNNUUUUUUUUUUUUCCCCCAAAAAAAOOOOOGGGGJJYYYYYNONNOOOESEBBBBBBOOOOOOOOOOOOOOOOORVVVVVVVVVVVVVVVVVVXXXXVV +DDDDJJJJJBBBBBBBBBBBBYWWWWWWWWWWKXXXXXXXNNXXUUUUUUUUUUCCCCCAAAAAAAOOOOGGGGGCJJYYYNNOONOOEEEEBBBBBBBBOOOOOOOOOOOOORRRVVVVVVVVVVVVVVVVVVTXXXVV +DDDJJJJJJHBBBBBBBBBBYYQQQWWWWWWKKKXXXXXXXXXXUUUUUUUUUUUCECCAAAAAAAAGOOGGGGCCCJJNNNNNNNNNNNNNNBBBBBBBXXXOOOOOOOOOORRRVVVVVVVVVVVVVXXXXXTLXXVV +DDDDDJJJJHBBBBBBBBBBBQQHHWWWWWWWKXXXKKXXXUUUUUUUUUUUUUEEECAAAAAAAAGGGGGGGGCCCCNNNNNNNNNNNNNNBBBBBBBBXXXXXXOOOOJOORRRVVVVVVVVVVVVVXTXXXTLXXVV +DDDDDJJJJBBBBBBBBBBBQQQNWWWNWWWKKKXKKKKKXUUUUUUUUUUUUUUEEAAAAAAAAAGGGGGGGGCCCCCNNNNNNNNNNNNNBBBBBBBBBXXXXXXOXCXRRRRRVVVVVVVVVVVVVTTTTTTTVVVV +DDDDVVJJXXBBBBBBMBBBQQQNNWWNWWWWKKKKKKKKXLUUUUUUUUUUUUUEEAAAAAAAAAAGTGNCCGCCCCCCCNNNCCVXNXBBBBBXBBBXXXXXXXXXXXXXRRRRVVVVVVVVVVTTTTTTTTTMEEVV +VDVDVVVXXXBBBBBBBBBQQQQNNNNNNWWWWKKKKKKKXXVVVVUUUUUUUUUEEEEEEEEAAAATTGNNCCCCCCCCCCCCCCCXXXXBXXXXXXXXXXXXXXXXXXXXRRRRRRBBBBTTTTTTTTTTTTTMEEVV +VVVVVVVXXBBBNBBBQQBBQQQNNNNNNNNNVKVKKKKVXXVVVVUUOUUUEUEEEEEEDEEEWCCCTGNNNCCCCCCCCCCCCCCXXXXXXXXXXXXXXXXXXXXXXXRXRRRBBBBBBBBTTTTTTTTTTTTEEEEE +VVVVVVVVXXQBNBQQQQQQQQQQNNNNNNNNVVVKKKKVVVVJIIIIIIIIIIIIEEEEEEEECCCCCNNNCCCCCCCCCCCCCXXXXXXXXXXXXXXXXXXXXXXXRRRRRRBBBBBBBBBTTTTTTTTTTTTEEEEE +VVVVVVVXXXQQQQQQQQQQQQQQNNNNNNNNVVVVKVVVVJJJIIIIIIIIIIIIEEEEFFCCCCCCCCOOCCCCCCCCCCCCXXXXXXXXXXXXXXXXXXXXXXXXRRRRRBBBBBBBBBBTHHHHHHHTETTEEEEE +VVVVVVVXXQQQQQQQQQQQQQQQQNNNLNNNNVVVVVVVJJJJIIIIIIIIIIIIEEEFFFCCCCCCCOOOOOCCCCCCCCCCXXXXXXXXXXXFXXXXXXXXXXXXXRRRRRBBBBBBBBBTHHHHHHHTETIEEEEE +VVVVVVVVXQQQQQQQQQQQQQQQTTTTOOOOVVVVVVVVJJJJJJEIIIIIIIIIEEFFFFFFFCCCCOOOOOFCCCCCCCCCCCXXXXXXXXXXUXXXXXXXXXXXTTRRBBBBBBBBBVVTHHHHHHHEEEEEEEEE +VVVVVVHHQQQQQQQQQQQQQQQQQTTTOOOOOOVVVVVVPJJJJJJIIIIIIIIIEEFEEEEFZCCCOOOOOFFCCCCCCCCCCXXXXXXXXXXUUXXXXXXXXXXXTTTRRBBBBBBBVVVTHHHHHHHEEEEEEEEE +VVVVVVHEQQQQQQQQQQQQQQQQTTTOOOOOOOVVVVVPPJJJJIIIIIIIIIIIEEEEEEZZZZCOOOOOOOFCCCCCCCCCCCXXXXXXXXXUQXTTXXXXXXXXTTTTRRBBBVVVVVVTHHHHHHHEEEEEEEEE +VVVVVREETEEEEQQQQQQQTTTTTTTTOOOOOOVOVVVPPJJJJIIIIIIIIIIIEEEEEEEZZZZZOOAAOAFCCCCCCCCCCCXXXXXXXXQQQQQTTTXXXXXTTTTTRRRBBBBVVVVVHHHHHHHEEEEEEEEE +VVVVDEEEEEEYQQQQQQKQKKKKTTOOOOOOOOOOOOOPPPPJJIIIIIIIIIIIEEEEEEZZZZZZAAAAOAFPCCCCCCCDFXXXXXXXXQQQQQQTTTTTTTTTTTTTTTRBCCVVVVVVVHHHHHHTTEEEEEEE +VVVVDDEEEEEEHQQQQQKKKKKKKOOOOOOOOOOOPPPPPPPJJJJIIIIIIIIIEEEEEEEEIZZZZZAAAAADCCCCDCCDXXXGXXQQXQQQQQTTTTTTTTTTTTTTTTTTCCCVVVVVVHHHHHHTEEEEEEEE +VVVDDDEEEEEYHQQQQQQKKKKKKKKOHOOOOOOPPPQPPQQJQQQIIIIIIIIIEEEEEEEEZZZZAAAAAADDDDDDDCCDDXXXXXQQQQQQQQTTTTTTTTTTTTTTTTCCCCCVVVVVVVVVVTTTEEEEEEEE +VVVDDEEEEEYYYYYYQYGKKKKKKKKKOOOOOOOPPQQQQQQQQQQQQQPPEEEEAEEEEEEEZFZZKAAAADDDDDDDDDDDDDDHHHQQQQQQQZATTTTTTTTTTTTTTTCCCCCVVVVVVVVVVVEEEEEEEEEE +VVVDEEEEEEEYYYYYQYGKKKKKKKKKKOOOOMPPPQQQQQQQQQQQQPPPPLELAEEEEEEEEFKKKAADDDDDDDDDDDDDDDDAHHQQQQQQQZANTTTTTTTTTTTTTTCCCVVVVVVVVVVVVVEEEEEEEEEE +LVVDEEEEEEYYYYYYYYYKKKKKKKKKKOOOMMMMPPQQQQQQQQQQQPPPPPELAAAEEEEPEFKKKDDDDDDDDDDDDDDDDDDAHHQQQQQQQZATTTTTTTTTTTTTTTCCCVVVVVVVVVVVIEEEEEEEEEEE +VVVEEEEEEEYYYYYYYYYYYKKKKKKKKKMOMMMMPPPQQQQQQQQQQQPPAPAAAAAMEEEPPKKKKDDDDDNDDDDDDDDDDDAAQQQQQQQQQAATTTTTTTTTTTTTTCCCCVAVAVVVVVVVVUUUUCCPPEEE +RRRRRRREEYYYYYYYYYWYYYYKKKKKKPMMMMPPPQPQQQQQQQQQQQQPAAAAAAAEEEPPPKKKDDDDDTNDPCDDDDDDDDAAAQQQQQQYQQAAATAATTTTCTTTCCCCAAAAAAAVVVVVVVUCCCPPCCCC +RRRRRRRRRRYYYYYYYYYYYYYKKKKKKKBMMMPPQQQQQQQQQQQQQQAAAAAAAATTEEPPKKKKKKKTTTTCCCCDDDDAAAAAAQQQQQQYQYAAAAAATTTTCCCCCCCAAAAAAAAVAAVVPCCCCCCCCCCJ +RRRRRRRRRYYYYYYYYYYYYYYKKKKKKKKMMMCCWWQQQQQQQQQQQAAAAAAAAAEEEEKKKKKKKKKTTTTCCCSDDDDDAAAYYGQQQQYYYYAAAAAAAAATCCCCCCCCCAAAAAAAAAAACCCCCCCCCCCC +RRRRRRRRRYYYYYYYYYYYYYYKMMKKMKMMMMCCCCCQQQQQQQQAAAAAAAAAAAAAAADDKKKKKKTTTTCCVCCCCCDDDAAYGGQQYYYYYYAAAAAAAAATAACCCCCCCAAAAAAAAAAAACCCCCCCCCCC +RRRRRRRRRYYYYYYYYYYYYYYKKMMMMMMMCCCCCCCQQQJQQQAAAAAAAAAAAAAADDDDDKTVKTTTTCCCVCCCCCCDDCAAGGGGGYYYYAAAAAAAAAAAAACDDDDCCAAVAAAAAAFACCCCCCCCCCCC +RRRRRRRRRYYYYYYYYYYYYYYYMMMMMMMCCCCCCCCQAIISQQQAAAAAAAAAAAAAADDDDKTTTTTTTCCCCCCCCCDDDCAAGGGGGYYYYAYAAAAAAAAACCCCDDDCCDDVAABAAAACCCCCCCCCCCCC +TRRRRRRORYYYYYYYYYYKYTTMMMMMMCCCCCCIIICCIXISQQAADAAAAAAAAAAAADDDDTTTTTTTTCTTCCCCCCCCCCAGGGGGGYGYYYYYAAAAAAAAACCCDDDDDDDDDAAAAAAACCCCCCCCCCCC +TTRRRROOOYYYYYYYWYYTYTTTTMMMMMCCCCCCCIIIIIIQQQADDDDAAMAAAAAADDODOOTTTTTTTTTCCECCCCCCCCGGGGGGGGGGGYYYYYAAAAACCCCDDDDDDDDDDAAAAAACCCCCCCCCCCCC +TTTRTROOOOYYYYYYTTTTTTTTTTMMMMCCCCCIIIIIIIIQZZDDDDAAMMAAAAADDOOOOTTTTTTTTTTCCCCCCCCCCCGGGGGGGGGGGGGAAAAAAAAACCDDDDDDDDDDDCAAAAAACCCCCCCCCCCC +TTTTTOOOOYYLLYLYLTTTTTTTTTMMTTCZCICIIIIIIIIIDDDDDMMMMMMAAAOOOOOOOOJTTTTTTTTTTCCCCCCCCGGGGGGGGGGGGGAAAAAAAAACCCDDDDDDDDDCCCCAACCCCCCCCCCCCCCC +TTTTTOOOOOOOLLLLLTTTTTTTTTTTTTCIIIIIIIIIIIIIDDDDDDDMMMMMAAOOOOOOOOOTTTTTTTTCCCCCCCCCGGGGGGGGGGGGGNNNAAALACACCDDDDDDDDDDCCCCAACCCCCCCCFFCCCCQ +TTTTTTOOOOOOOLLLLLLATTTTTTTTTTIIIIIIIIIIIIINNNNNNDMMKKMNOOOOOOOOOOOOOOTTTTTTCTCSCCCSGGGGGGGGGGGOOONNNAACACCCDDDDDDDDDDDDCCCCCCCFFFFFFFFFFCCQ +TTTTTTOOOOOOOLLOLLLAATTTTTTTKTIIIIIIIIIIIIINNNNNNDUUKKKOOOOOOOOOOOOOOOTTTTTTTTCSSCCSDGGGGGGGGGGGOOONNACCACCCDDDDDDDDDDDDCCCCCCCCFFFFFFFFFFFF +TTTTTOOOOOOOOOOOLAAAATTTTTKKKTIIIIIIIIIIIIINNNNNNUUUUUUOOOOOOOOOOOOOOOOTTTTTTTSSSSSSDDSSGGGGFGGGOOOCCCCCCCDDDDDDDDDDDDDDCCCCCCCFFFFFFFFFFFFF +TTTTTOOOOOOOOOOOOAHAATATKKKKTTTKIIIIIISIIEEEEUUUUUUUUUUJOOOOOOOOOOOOOOTTTTTTTSSSSSSSSSSFFFFFFFFGGOOOOACCCCCDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFF +TTTTTOOOOOOOOOOOOOAAATAKKKKKTKKKEEIIIEEIIEEEEEUUUUUUUUUJJOOOOOOOOOOOOOTTTTTTTTSSSSSSSSFFFFFFFFGGOOOOOCCCCCCIIDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFF +TTTTTTOOOOOOOOOXOOAAAAAAAKKKKKKKKKEEEEEIIIIEEEEUUUUUUUUPOOOOOOOOOOOOTTTTTTTXTSSSSSSSSSSSFFFOOOOOOOOOOOCCCICIIDDDDIDDDDDDDDCCCCCFFFFFFFFFFFFF +TTTTTTOOOOOOOOOOAAAAXXXAKKKKKKKKKKEEEEEEEEEEEEEUUUUUUUUPOPPOOOOOOOOTTTTTTTFSSSSSSSSSSSSSFFOOOOOOOOOOOOCCCIIIIIDDDIIIDTDDDCCCCCCFFFFFFFFFFFFF +TTTTTTOOOOOOOOOOXAAAAAXXKKKKKKKPPEEEEEEEEEEEEEEEEUUUUUPPPPPPUUUUOUUTTTTTTTFFFBBSSSSSSSKXFFFOOOOOOOOOOOCCIIIIIIIIIIIIITTDDFHHCHCHHFFFFFFFFFFF +TTTTTTTOOOOOOOXXXXXXXXXXXKKKKKPPEEEEEEEEEEEEEEEEEPUUUPPPPPPGPUUUUUUTTTTTTTTFFFFSSSSSKKKXFFFXOOOOOOOOOOOOOIIIIIIIIIIIITTTTHHHHHHHHFFFFFFFFFOF +TTRRTTTOOOOQOOXDDXXXXXXXXXKKPPPPEEEEEEEEEEEEEEEEEPPPPPPPPPPPPPUUUUURRTTTTTBFFFFFSSSSSKKXXXXXOOOOOOOOOOOOOIIIIIIIIIITTTGGTHHHHHHHHHHFFFFFFFFF +RRRRRRTTOOOQQDXXDDXXXXXXXXKKPPAAEEEEEEEEEEEEEEEEEEPPPPPPPPPPPPUUUURRRRRTTBBFFFFVFSSSSSKXXXXXXOOOOOOOOOOOIIIIIIIIIIITTTGGEEHHHHHHHHHFFFFFFFFF +WWRRRRTTTTOOQDDDDDXXXXXXXXKKPPAAAAENNEEAEEEEEEEEEEPPPPPPPXPPHPUUUURRRRRTTBBBFFFFFSSSSSXXXXXXXXOOOOOOOOOIIIIIIIIIIIIIIGGGEHHHHHHHHHFFFFFFFFCC +WWRRRRRTRRROQQQDDDDDDXXXXXXXXPAAACNNNEEAAAEEEEEEEQQQQPPPXXPXXXXXXRRRRREETTFFFFFFFFFFSKXXXXXXYXOOOOAAOOOOOIIIIIIIIIIITTGGHHHHHHHHHHFFFFWWFCCC +WURRRRRRRRRDDQDDDDDDDXXXXXXXPPAAANNNNNAAAAAEEELLPQQQQPPMXXXXXXXXXRRREREEEEFFFFFFFFUSSSXXXXXXXXXXXOAAOFFFFIIIIIIIIIITTTGGGHHHHHHHHHFFZFNNCCCC +UUUUURRRRRRDDDDDDDDDDDDXXXXXPXAAAANNAAAAAAAALELLLQQQQPMMMMMXXXXXXRRREEEEEEEEFFFFFFUSSUUXXXXXXXXXOOAAOFFAFIIIIIIPPPPPPPPGGGHHHHHHHHHHHNNNNNCC +TTUUUURRRRDDDDDDDDDDDDDDXXXXPXAAAANNAAAAAAOOLLLLLQQQQMMMMMMPPXXRRRRRREEEEEEEEEFFFUUUUUUUXXXXXOXOOOAAAAAAAIIIIIIPPPPPPPPPPPGHHHHHHHHHINNNNNCC +TTUUURRRNRRRNDDDDDDDDDXXXXXXXXXXAAAAAAAAAAOLLLQQQQQQQMMMMMPPPXRRRRRRREERRRREEEEKUUUUUUUCXXOOOOOOOAAAAAAAACCIXHHPPPPPPPPPPPGHHHHHHHHHINNNNNNC +TTUNNRRRNRNRNNDDDDDDDDDDXHXXXXXXAAAAAAAAAQQQQQQQQQQQQMMPPPPPPXRRRRRRRRRRRRREEEKKUUUUUUUCOOOOCOOOOAAAAAAAACXXXXSPPPPPPPPPPPGHHHHHHHHHHNNNNNNN +TTTTNNNNNNNNNNDDDDDDDDDDXHXXXAAAAAAAAAAAAQQQQQQQQQQQQOMPPPPPPXRRRRRRRRRRRRKKKEKKKUUCCCUCCCCCCOOOOAAAAAALACXWXXSISZZPPPPPPPGGHHTHHTHNNNNNNNNN +TTTTNNNNNNNNNNNNDDDDDDDDDDAAAAAAAAAAAAAAOQQQQQQQQQQQPPPPPPPPPVRRRRRRRRRRRKKKKKKKUUUCCCCCCCCCOOOOOOHAAAAAACXWWXSSSZZPPPPPPPKKKTTTTTHHNNNNNNNN +TTTTNNNNNNNNNNNNDDDDYYYYDDDAAAAAAAAAAAAAHHOORRROOQQQOPPPPPPPPPRRRRRRRRRRRRKKKKKKUUUCCCCCCCCCCCOOOOHHAAAAAHHWWWHHSSZPPPPPPPGTTTTTTTTNNNNNNQQQ +TTTTNNNNNNNNNNNDDYDYYYYYYAAAAAAAAAAAAAAHHHORRRRROOOOPPPPPPPPPPPPRRRRRRRKKKKKKKKKUUCCCCCCCCCCCCOOOHHHHHAHHHHWWHHSSSSPPPPPPPTTTTTTTTNNNNNNQQQQ +TTTNHNNNNHHHHNNDYYYYYYYYYAAYYAAAAAAAAAHHHRMMRRRROOOPAPPPPPPPPPPPPKRRRRRRKKKKKKCCUUCCCCCCCCCCCCCHHHHHHHHHHHHHHHHHHSGPPPPPPPTTTTTTTTTNNNNNNNNQ +TTTNNNNNNHHHHHHDYYYYYYYYYKKYYYBYAAAAAAHHMRMMMRRRRRPPPPPPPPPPPPPKPKRRRRRIKKKKKKCCCCCCCCCCCCCCCCCHHHHHHHHHHHHHHHHHHHGPPPPPPPTTTTTTTTTTNNNNNNNN +TTNNTNNNNHHHHHHYYYYYYYYYYKKYYYYYAAAAAAHMMMMMMRRRRRRRRRPPPPPPLPPKKKKRRRRIIKKKKKKCCCCCCCCCCCCCCCLLLCCHHHHHHHHHHHHHHHGPPPPPPPTTTTTTTTTTTNNNNNNN +TTTTTTNHNHHHHHYYYYYYYYYYYKJYYYYYAAAAAHHMMMMXRRRRRRRRRRRPPPPPRKKKSSSSRRRRSSSKKKKKCCCCCCCCCCCCCCCCCCCHHHHHHHHHHHXXXXXXXXUUUTTTTTTTTTTNNNNNNNNN +NNNTNNNHHHHHHHHYYYYYYYYYYYYYYYYYYAHAHHHHHMMXXRXRRRRRRRRRPPRRRRRKSSSSSSSSSSSKKKKKKCCCCCCCCCCCCCCCCHHHHHHHHHHHHHHHXXXXXUUUUTTTTTTTTTTNNNNNNNNN +NNNNNHHHHHHHHHHYYYYYYYYYYYYYYYYYYHHHHHHHHXXXXXXRRRRRRRRRRPRRRRRKSSSSSSSSSSSSKKKKQCCCCCCCCCCCCMCCHHHHHHHHHHHHHHHHXXXXXXUUUTTMTTNNNTTNNNNNNNNN +NNNNNNNNHHHHHHHYHYYYYYYYYYYYYYYYYHHHHHHHXXXXXXXRRRRRRRRRRRRRRRRKSSSSSSSSSSSSKKKKQQQQCCQCQQQQQHHHHHHHHHHHHHHHHHHXXXXXXXXXXTTNNNNNNNNNNNNNNNNN +NNNNNNNNHHHHHHHHHYYYYYYYYYYYYYYYYYYHHHHHXXXXXXXRRRRRRRRRRRRRRRSSSSSSSSSSSSSSKKKKQQQQQQQQQQQQQQHHHHHHHHHHHHHHHXXXXXXXXXXXXXTNNNNNNNNNNNNNNNNN diff --git a/src/days/d12.rs b/src/days/d12.rs index dae91d2..2f824dc 100644 --- a/src/days/d12.rs +++ b/src/days/d12.rs @@ -1,16 +1,153 @@ +use std::collections::HashMap; use std::fs; pub fn solve() { - let path = "res/12/input"; + let path = "res/12/example"; #[allow(unused)] let contents = fs::read_to_string(path).expect("Something went wrong reading the file"); - let result: usize = 0; + let grid: Vec> = contents + .lines() + .map(|line| line.chars().collect()) + .collect(); + + let edges: Vec> = grid + .iter() + .enumerate() + .map(|(i, line)| { + line.iter() + .enumerate() + .map(|(j, _)| { + let mut ret = 0; + if i == 0 || grid[i - 1][j] != grid[i][j] { + ret += 1; + } + if i == grid.len() - 1 || grid[i + 1][j] != grid[i][j] { + ret += 1; + } + if j == 0 || grid[i][j - 1] != grid[i][j] { + ret += 1; + } + if j == grid[0].len() - 1 || grid[i][j + 1] != grid[i][j] { + ret += 1; + } + ret + }) + .collect::>() + }) + .collect(); + + let mut visited: Vec> = vec![vec![false; grid[0].len()]; grid.len()]; + + let mut regions: Vec> = vec![]; + + for i in 0..grid.len() { + for j in 0..grid[0].len() { + if visited[i][j] { + continue; + } + let mut stack: Vec<(usize, usize)> = vec![(i, j)]; + let mut region: Vec<(usize, usize)> = vec![]; + while let Some((i, j)) = stack.pop() { + if visited[i][j] { + continue; + } + visited[i][j] = true; + region.push((i, j)); + if i > 0 && grid[i][j] == grid[i - 1][j] && !visited[i - 1][j] { + stack.push((i - 1, j)); + } + if i < grid.len() - 1 && grid[i][j] == grid[i + 1][j] && !visited[i + 1][j] { + stack.push((i + 1, j)); + } + if j > 0 && grid[i][j] == grid[i][j - 1] && !visited[i][j - 1] { + stack.push((i, j - 1)); + } + if j < grid[0].len() - 1 && grid[i][j] == grid[i][j + 1] && !visited[i][j + 1] { + stack.push((i, j + 1)); + } + } + regions.push(region); + } + } + + let result: usize = regions + .iter() + .map(|r| { + let edge_count: usize = r.iter().map(|(i, j)| edges[*i][*j]).sum(); + edge_count * r.len() + }) + .sum(); println!("Result 1: {}", result); - let result: usize = 0; + // count corners on outer side of region + let mut result = 0; + + let regions: HashMap<_, _> = regions + .iter() + .enumerate() + .map(|(i, region)| (i, region.iter().copied().collect::>())) + .collect(); + // Recolor the regions in the grid so that non-overlapping regions have different letters, + // otherwise they could be overlapping when taking 2x2 windows over the grid. + let mapping = regions + .iter() + .enumerate() + .flat_map(|(i, (_, region))| region.iter().map(move |(x, y)| ((*x, *y), i + 1))) + .collect::>(); + + let grid = (0..grid.len()) + .map(|x| (0..grid[x].len()).map(|y| mapping[&(x, y)]).collect()) + .collect::>>(); + + for (s, region) in regions { + let v = *grid.get_from_coords(s.into()).unwrap(); + let subgrid = grid + .to_minimum_spanning_subgrid(®ion.iter().copied().collect::>()) + .pad_into(1, 0); + + // Take 2x2 windows so that the we can use the center point of the window to check if the + // window contains a corner (or even two corners - see comments below). + let corners = subgrid + .as_ndarray() + .windows([2, 2]) + .into_iter() + .map(|window| { + let in_same_region = window + .indexed_iter() + .filter(|(_, &wv)| wv == v) + .collect_vec(); + match in_same_region.len() { + // A A + // B A + // (1 corner) + 1 | 3 => 1, + // A A + // A A + // (no corners) + 0 | 4 => 0, + // A B A A + // B A or B B + // (2 corners) (no corners) + 2 => { + let (x1, y1) = in_same_region[0].0; + let (x2, y2) = in_same_region[1].0; + if x1 != x2 && y1 != y2 { + 2 + } else { + 0 + } + } + _ => unreachable!(), + } + }) + .sum::(); + + let area = region.len(); + result += area * corners; + } println!("Result 2: {}", result); }