From 5c0e8a2ce6639b9cf0a2f07f267fd29b932886e4 Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Sun, 15 Dec 2024 02:06:16 +0100 Subject: [PATCH] Day 12 --- input/day12 | 140 ++++++++++++++++++++++++++++++++++++++++++++++++ src/day12.scala | 90 +++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 input/day12 create mode 100644 src/day12.scala diff --git a/input/day12 b/input/day12 new file mode 100644 index 0000000..2c7b3f7 --- /dev/null +++ b/input/day12 @@ -0,0 +1,140 @@ +NNNNNNNNNNNNNNNRRRRRLLLLLLLLRRBRRRRTTTTTTTTZZZZUUUZZZZZZZGGGGGGGGGGMMMMAAAAAAAAAAAAAAAAAAYYYYJJJXXXXXXXXXXXXXXXXXWWWWWWWJJJJJJJJJJJJJJJCCCCC +NINNNNNNNNNNNNNNRRLLLLLLLLRRRRRRRRRRTTTTTTZZZZZUUUZZZZZZGGGGGGGMGMMMMXXMMAAAAAAAAAAAAAAAAYYYYYJXXXXXXXXXXXXXXXHXWWWWWWWWJJJJJJJJJJJJJJJCCCCC +NNNNNNNNNNNNNNNRRRLLLLLLLRRRRRRRRRRRTTTTTTZZZZZUUUZZZZZZZGGZGMMMMMMMMMMMAAAACAAAAAAAAAAPPXJJJJJXXXXXXXXXXXXXXXXXWWWWWWWWWJJJJJJJJJJJJJCCCCCC +TNNNNNNNNNNNNNNNRLLLLLLLLLXRRRRRRRRRTTTTTLUZZZZUUUZZZZZZZZZZGGMMMMMMMJMMAAAACAAAAAAAAAXXXXXXJJJJXXXXXXXXXXXXXXXXAWAWWAWWJMMJJJJJJJJJJJCCCCCC +TNNNNNNNNNNNNNNNRRRLLLIIIIXXRRDRRRRTTTTTTLLZLZZUUUZZZZZZZZZQQQQQQQQMMMMMMCCCCAAAAAAAAALXXXXXJJJJXXXXXGXXXXXXXXAAAAAAAAJJJJJJJJJJJJJJJJJJCCCC +TTNTTNNNNNNNNNNNRRRLLTTTTIIIIRRRRRRRTTTTTLLLLLUUUUUUZZZZZZMQQQQQQQQMMMMMMCCCAAAAAAAAAAXXXXXXJJJJXXXXXXXXXXXXXAAAAAAAAAJJJJJJJJJJJJJJJJJJCCCC +TTTTTNNNNNNNNNNNNNTTTTTTTIIIIRRRRRTTTTTLLLLLLLUUUUUUZZZZZMMQQQQQQQQMMMMMMMACCAAAAAAAAAJXXJJJJJGGCXGGXXXXXXXXAAAAAAAAAAJJJJJJJJJJJJJJJJJJCCCC +TTTTTNNNNNNNNNNNNNKTTTTTTITITTTTTTTTTTTLLLLLLLUUUUUUUUUUUMMQQQQQQQQMMMMWAAAAAAAAAAAAAAJXJJJRRRRGGGGGGIXXIIXXAAAAAAAAAAJJJJJJJJJJJJJTTGGTCCCC +TTTTTTTNNFFNNFNNNDKKKTTTTTTTTTTTTTTTTTLLLLLLLLUUUUUUUUUUUMMQQQQQQQQQQQQQQAAAAAAAAAFFAFFFFJJRRRRGGGIIIIIIIIDDAAAAAAAAAAAAJJJJJJKKJJJJTTGTTTTT +TTTCTTTNFFFFFFNNOKKKKKKTTTTTTTTTEEETTTLLLLLLLLUUUUUQQQQQQQQQQQQQQQQQQQQQQAAAAAAAAAFFFFFFFFRRRRRGGRRIIIIIIIIIAAAAAAAAAAAJJJJJJKKKKKTTTTTTYTSS +CCTCCCCNCFFFFFFNOOKKKKKKKKKTTTTTEEETNNUULLLLLLUUUUUQQQQQQQQQQQQQQQQQQQQQQAAAABAAAAFFFFFFFTJJRRRRRRIMIIIIIIIYAAAAOOAAAAJJJJJJKKKKKTTTTTTTTTTT +CCTCCCCCCFFFFFFNOKKKKKKKKKTTTKTTEEENNNNLLLLLLLUUUUUQQQQQQQQQQQQQQQQQQQQQQAAAFAAAFFFFFFFFFTTTTTRRRRIIIIIIIIIIQOAAOOAJJJJJJJJJJKKYYYYTTTTTTTTT +CCCCCCCCCRFFFRRKOKKKKKKKKKKTKKTEEEEDNNNNLLLLLLLLUUUQQQQQQQQQQQQQQQQQQQQQQAAAAFAFFFFFFFFFTTTTTRRRRRRIIIIIIIIIQOOOOOOJJJJJJJJJJJKKYYYYTTTTTTTT +CCCCCCCCRRRRFRQKKKKKKKKKKKKKKKTEETENNNNNLLLLLLBBUUUQQQQQQQQQQQPQQQQQQQQQQFFFFFFFFFFFFFFFTTTTTTTTRRRIIIIIIIFQQOOOOOOJJJJJJJJJJKKKKYTTTTTTTTTT +CACCCCCCRRRRRRQKKKKKKKKKKKKKKKTEETDVVVVVVNLELLBBUUUQQQQQQQQQQQPQQQQQQQQQQFFFFFYYYFFFFFFTTTTTTTTTRRRRIIIIIFFQQOKOOOOJJJJJJJJJJKKKKTTTTTTTTTTT +AACCCCJRRRRRRRRKKKKKKKKKKKKKJKTTTTDVVVVVVNNELNBBUUUQQQQQQQQQQQPQQQQQQQQQQFYYYFYYFFYFFFFTTTTTTTTTTTRRRRIIIFFFFFFFJJJJJJJJJJJJKKKKKTTTTTTTTTTT +ACCCCURRRRRRRRRKKKKKKKKKKKKTTTTTTTNVVVVVVNNEENBBUUUIIQQQQQQQQQPQQQQQQQQQQYYYYYYYFFYYFFFTUTTTTTRTRRRRRRRIKFFWFGGGJJJJJJJJJJJKKKKKKTTTTTTTTTTT +ACCCCCRRRRRRRRRRKKKKKKKKKKOTTTTTTTTVVVVVVNNNNNNNNIIIBQQQQQQQQQPQQQQQQQQQQPYYYYYYYYYYYFFVTTTTTTRRRRWWWWKKKKFFFGFJJJJJJJJJJJJKKKKKKKKTTTTTTTTT +ACCCOORRRRRRRRRRRKKKKKKKKKOTTTTTTTTVVVVVVNNNNNNNNIIIIQQQQQQQQQPPPPPPPFFFFYYYYYYYYYYYBFFVTTTTRRRRWWWWKKKFFFFFFFFFJJJJJJJJJJKKKKKKKKKKTTTTTTTT +AAARRRRRRRRRRRRKKKKKKOOOOOOOOOYYTTMVVVVVVNNNNNNNNIIIIQQQQQQQQQPPPPPPPFFFYYYYYYYYYYYYYFFVVTRTRRRRWWWWFFFFFFFFFFFFJVJUJUUJJJJKKKKKKKKTTTTTTTTT +AAAARRRRRRRRRRRRRKKKKKOOOOOOOOYYVVVVVVVVVNNNNNNIIIIIIIIIBPPPPPPPPPPPPPPFYYYYYYYYYYYYYYFVVRRRRRRRRWFWWFFFFFFFFFFFFFUUBUUJJJJJKKKKKKKKKTTTTTTT +JJJRRRRRRRRRRRRRRKKKKOOOOOOOOOYOVVVVVVVNNNNNNNNNIMIIIIIIIPPPPPPPPPPPPPPFPYYYYYYYYYYYYYYVVNNNNRRRRWWWWWFFFUFFFFFFFFUUUUUJJJJJKKKKKKKKKTTTTTCT +JJJJJRRRRRRRRRRRKKKOOFOOOOOOOOYOVVVVVVVNNNNNNNNNRMIIIIIIOPPPPOOBOPPPPPPPPYYYYYYYYYYYYYYVVVNNRRRRWWWWWWFFFUUFFFFFFUUUUUULJJJJKKKKKKKKKZFCCTCT +JJJJJRRRRRRJRPPPKKKKOOOOOOOOOOOOVVVVVVVNNNNNNNNRRMIIIIOOOOOOOOOOOPPPPPPPYYYYYYYYYYYYYYVVVNYYYWWWWWWWWWWWWFFFRRFFIIIUUUULLJJJYYKKKKKKKKFFCCCC +JJJJJJRRRJRJJJPPKKKKKOOOOOOOOOOOOOLLLNNNNNNNZNNRBMIIIOOOOOOOOOOOPPPPPPPPYYYYYYYYYYYYYYVNNNYYYWWWWWWWWWWWWFFFFRFOQIIIUUUUUYYJYYYKKKKKKKFFFCCC +JJJJJJJJRJJJJJPPKKKPPPOOOOOOOOOLOOLLLNNNNNNNRNNRRMMMIOOOOOOOOOOPPPPPPPPPYYYYYNNNYYNNYYNNNNYYYWWWWWWWWWWWWFFFRRRQQQIIUUYYYYYYYYYKKSSSSFFFVFCC +JJJJJJJJJJJJJJTTTTTTOOOOOOOOOOOLLLLNNNNNNNRRRRRRRMMIIMMOOOOOOOOOPPPPPLPPYRYYYNNNNNNFYYNNNNYYYYYYYYYYYYYYYYYYFFFQQQQQYUYYYYYYYYYSSSSSFFDFFFFF +JJJJJJJJJJJJJHTTTTTTPPOOOOOOOOLLLLLNNNNNNNNRRRRMMMMMIMMMMOOOOOOPPLLLLLLLLJYYWPPDDNNNNNNNNNYYYYYYYYYYYYYYYYYYWFFFQQQQYYYYYYYYYYSSSSFFFFFFFFFO +JJJJJJJJJJJJJJTTTTTTTPPOOOOOLLLLLLLNNNNNNNNNNRRMMMMMMMMMTOOOOOTTLLLLLLLLLJJKPPDNNNNNNNNNNNYYYYYYYYYYYYYYYYYYWFFFFQQYYYYYYYYYYSSSFFFFFFFFFFFO +JJJJJJJJJJJJJJTTTTTTTPPTTTTOLSLSLNNNNNNNZNZZMMOMMMMMMTTMTOOOOOOTTLLLLLLLLJJJPPNNNNNNNNNNNNYYYYYWWWYYYYYYYYYYFFFQQQYYYYYYYYYSSSSSRFFFFFFFFFFF +JJJJJJJJJBJJBBTTTTTTTPPTTTTSLSSSLLNNNNNNZZZMMMMMMMMMMMTTTOOOOTTTTTTLLLLLLJJPPPNNNNNNNNNNNNYYYYYXWXYYYYYYYYYYQFFFQQYYYYYYYYYSYSSSRFFFFFFFFFFF +JJJJJJJJBBBBBBTTTTTTTPPTTTTSSSSSSSJNNNNNZZZMMMMMMMMMMMTTTOTTOTTTTTTTLLLMMJJPPPPNNNNNNNNNNNYYYYYXXXYYYYYYYYYYQXFAAYYYYYYYYYYYYSSSFFFFFFFFFFFB +JJJJJZJBBBBBBBTTTTTTTTTTTTTSSSSJJJJJJNZZZZZZZMMMMMMMMMTTTTTTTTTTTTTNLLPPPPPPPPPNMMNNNNNNNNYYYYYXXXYYYYYYYYYYXXXXAAYYYYYYYYYYYSSSFFFFFFFFFFFB +XJJJBBBBBBBBBBBBPPTTTTTTSSSSSSSJJJJJJJMMZZZZZZMUMMTMMTTTTTTTTTTTTNNNLLLLPPPPPPPPPPRNNNNNNNYYYYYNXXXXXXXXXXXXXXXXXAYYYYYYYYYYYJJJJJFFFDDDDDBB +XJJBBBBBBBBBBBBPPPTTTTTTSSSSSSSSSJJJMMMMZZZZZZMMMMTTTTTTTTTTNNNTTTNNLLLLLPPPBBPRRRRNRNNRRRYYYYYNNXXXXXXXXXXXXXXXAAAYYYYYYYYYYJJJJJNFFFDDDDBB +XXXXXBBBBBBBBBBBPPTTTTTTSSJJJSJJJJJMMMMMZZZZZZZZMDDDDTTTTTTTNNNNTNNNNLLLLLPPPBPNNRRNRRRRRZYYYYYXXXXXXXXXXXXXXXAAAAYYYYYYYYYYYJJJNNNFFFDDDDHD +XQQXXBBBBBBBBBBBPPTTTTTTJJJJJJJIIJIIMMMZZZZZZZZDMDDDDTTTTTTTNNNBNNNNNLLLLLLBBBBNNNRRRRRRRZYYYYYYYYYYYYXXXXXXXXAAAAAYYYYYYJJJJJJNNNNNWWDDDDDD +QQQQQBBBXXBBBBBBBRTTTTTTJJJJJJJIIIIIIMZZIZZZZZDDDDDDDDTTTTNNNNNNNNNNNNLLLLLLBBNNNNRZZZZRZZYYYYYYYYYYYYXXXXXXXAAAAOAAAYYYYYJJJJNNNNNNNWDDDDDU +QQQQQGJBXBBMBBBBRRTTTTTTBJJJJJJIIIIIIIIIIIZZZZDDDDDDDTTTTNNNNNNNNNNNNNLLLLLENNNNNNNZZZZZZZYYYYYYYYYYYYXXXXXXXAOOOOAAAAAYYHNNNJNNNNNNNWDNDUUU +QQQQQQJJJJQJJBRRRRTTTTTTBBBJJIIIIIIIIIIIIIIZZZDDDDDDDDDTTTNNNNNNNNNNNNLLLLLEEEEEENNZZZZZZZZYYYYYYYYYYYXCCCXXXXOOOOAAAAAANNNNNNNNNNNNNNNNSSUU +FQQQQQQJJJQQJFFFRRTTTTTTBBBBBBIIIIIIIIIIIIIZZZDDDDDDDDTTTXNNNNNNNNNNNNLEEEEEEEEEEZZZZZZZZZZYYYYYYYYYYYCCOOOOOOOOAAAAAAAANNNNNNNNNNNNNNNSSSNN +FQQQQQYJJJJJJFFFRRRRRRRZBBBUUBWIIIIIIIIIIZZZZZDDDDDDDDTTTXNNNNNNNNNNNNNEEEEEEEEEEZBZZZZZZZZYYYYYYYYYYYCCOOOOOOOOOAAAAAAAANNNNNNNNNNNNNNXXXNN +FFFJZQJJJJJJJFFRRRXXRRXBBBBBBBBIIIIIIIIIIZZZZZCCCDDDDDTTTXXXXNNNNNNANNEEEEEEEEEEEZZZZZZZZZZYYYYYYYYYYYCCCCOOOOOOOOAAAAAANNNNNNNNNNNNNNNNNNNN +FFFJJJJJJJJJJJFRXXXXXXXBBBBBBBIIIIIIIIIIIZZZZZCCCDDDDDXXXXXXXXNNNNAANAEEEEEEEEEEEEZMZZZZZZZYYYYYYYYYYYCCCCCOOOOOOOAAAAAAANNNQQQQNNNNNNNNNNNN +FFJJJJJJJJJJJJJGGXXXXXXBBBBBBBBIIIIIIZVVZZZZZCCCDDDDDDXXXXXXXXBBNNAANAEEEEEEEEEEEEEMMZZZZZZYYYYYYYYYYYCCCCCOOOOOOOAAAAALAAAAAQQQQNNNNNNNNNNN +FFJJJJJJJJJJJJGGGGXXXXXXQBYYBYIIIIIWZZVVZZZZZCDDDDDDDDXXXXXXXXAAAAAAAAAAEEEEEENNEEEMMMMZZZZYYYYYYYCCCCCCCCOOTTOOOOAAAAALLAAQQQQQQQQWNCNNNNNN +FFFJJJJJJJJJJBGGGGGXXXXXQQYYYYIIIIIZZZZZZZZZZWWWDDWWWWXXXXXAAAAAAAAAAAAEEEEEEENNNEMMMMMMMZZYYYYYYYCCCCCCCOOTTTOAAAAAAALLLAAAQQQQQQQWWNNNNNNN +XXXXXXJJJJJJJBBGGGGXXXXXQQYYYYIIIIIZZZZZZZZZWWWWDWWWWWWXXXXAAAAAAAAAAAAAAEEENENNNNMMMMMMMZZZEEREECCCCCCCCCTTTTAAAAAAAAALLQQQQQQQQQANNNNNNNNN +XXXXXJJJXJJJJBBBBGGGGXXQQYYYYYYYICCZZZZZZZZZWWWWWWWWWWWWWXXXAAAAAAAABAAAMNEENNNNNNMMMMMMMMIILEEEECCCCCCCCCTTTTAAAAAAAALLLHQQQQQQQQANLNNNNNNN +XXXXXXXXXXXXXBBBBGGGYHHYYYYYYYYYYKKKZZZZZZZZWWWWWWWWWWWWWWMXAHHHHAAAAAAANNEENNNNNNNMMMMMMMMILLEECCCCCRCCCCTTTTTTAAAAALLLLHHQQQQQQQAANNNNNNNN +YXXXXXXXXXXXCCBBBBBBYHYYYYYYYYYYYKKFFFZZZZZZZWWWWWWWWWWWWWMMMHHHHAALAAAANNENNNNNNNNNMMMMMMMLLEEEEEECCCCTTTTTTTTTTTAAALLLLLQQQQQQAQAAAANNNNNI +XXXXXXBNNNBBBBBBBABYYYYYYYYYYYYYYKKKFFZZZZZWWWWWWWWWWWWWWWMMMHHHHALLLLNNNNNNNNNNNNNNMMMMMMMMLLESESECKKTTTTTTTTTTTTAAALLLLLNQQQQQAAAAANNNAYYI +XXXXXBBBBBBBBBBBBBBYYYYYYYYYYYKKKKKKKKZKZZZZWWWWWWWWWWWWWWMMHHHHHHHLLLNNNNNNNNNNNNNNMMMMMLLLLSSSSSSETTTTTTTTTTTTTTTAALLLNNNQQQQQAAAAAAANNNYY +XXXXXXBBBBBBBBBBBBBYYNYYYYYYYKKKKKKKKKKKZZZZWWWWWWWWWWWWCMMHHHHHHHHHLLNNNNNNNNNNNNMNMMMMMLLLSSSSSSSSTTTTTTTTTTTTTTTTALLLNNNQQQIAAAAAAYANYYYY +QQXXQBBBBBBBBBBBBBIYYNYYYYYYYKYYKKKKKKKKKZZWWWJWWWWWCCCCCMMHHHHHHHUHLNNNNNNNNNNNNNMMMMLLLLLLSASSSSSSSTTTOOOOOOOOOOTAALLLLNNNNIIAAAAAYYYYYYYY +QQQQQBBBBBBBBBBBBBBBBNYYYYYYYYYKKKKKKBBBBBBBBBWWWWWWCCTCCCCHHHHHHHHHHSNNNNNBNNNNDNNNMLLLLLLLSSSSSSSSSSTTOOOOOOOOOOAAAAAANNNNNIIIAAAAAYYYYYYY +QQQQQQBBBBBBBBBBBBBBBBYYPYYYYYVVVVVKKBBBBBBBBBWWWWWZCCCCCCCHHHHHHHHHHSSNNNNBNNNDDDNNLLLLLLLLSSSSSSSSSSTTOOOOOOOOOOOAAAAAANINNIIAAAAAIIYYYYYY +LQLQQQBBBBBBBBBBBBBBBBDDPYYYYYVVVVKKKBBBBBBBBBZZZZZCCCCCCCHHHWHHHHHHSSSNNNNNNNNNDLLLLLLLLLLLSSSSSSSSSSTTOOOOOOOOOOOAAAAAANIIIIIIAAAIIIYYYYYY +LLLLQQBBBBBBBBBBBBBBPPPPPPYYYYVVVVVVVBBBBBBBBBZZZZZZZCCCCCCCCHHHHHHHSXSSSNSSNNNDDLLLLLLLLLLLLSSSSSSSSSTTOOOOOOOOOOOAAWANNNNNNIIIAIIIIIIYYYYY +LLLQQQQQBBBBBBBBBBBBPPPPPPYYYYYYUUVVVBBBBBBBBBZZZZZCCCCCCCCCCCHHHHHAXXSSSNSSSSSDDDLLLLLLLLLLLSSSSSSSSSSTOOOOOOOOOOWWWWWLLNIINIIIIIIIIIIYYYYY +LLLLLQQQBBBBBBBBBBBOPPPPPPPPMMMUUVVVVBBBBBBBBBZZZZZCCCCCCCCCCCCHHAAAAXSSSSSSSSSSSLLLLLLLLLLLIIISSSSSSSSSOOOOOOOOOOYWWWLLNNIIIIIIIIIIIIIYYYYY +LLEEEQQQBQQBBBBBBBBOOPPPPPPPPMMUUUVVVBBBBBBBBBZZZZZZZCCCCCCCCCCAAAAAXXXSXXSSSSSSSLLLLLLLLLLIISSSRRRRRRRRRROOOOOOOOWWWLLLLIIIIIIIIIIIIRIIIIYY +LDEEEQQQQQQJBBBBBJBPPPPPPPPPUUUUUUUUVBBBBBBBBBZZZZZZZCCCCCCCCCCCAAAAXXXXXXSSSSSSSLLLLLLLLIIIIISSRRRRRRRRRROOOOOOOOWLLLLLLPIIIIIIIIIIIIIIYYYY +LDDDQQQQQQQJBBBBJJJOPMPPPPPPPPUUUUUVVBBBBBBBBBZZZZZZZCCCCCCCCCCCAAAXXXXXXXXSSSSSSLLLLLLLLIIIIIISRRRRRRRRRROOOOOOOOWLLLLLLIIIIIIIIIIIIIIIYYYY +LDDDQQQQQJJJZZJJJJJOOPPPPPPPUUUUUUUVVVVVVZZZZZZZZZZZZZCCCCCCCCCCAAAAXXXXXXXSSSSSRLLLLLLLLLIIIIIIRRRRRRRRRREOOOOOOZWLLLLLLLLIIIIIIIIIIMIIYYYY +DDDDDQQQQJJJJZJJJJOOPPPPPPPPPUUUUUVVVVVVVZZZNNZZZZZZZZCCCCCCCCCCCAAAXAAXAAXSSSSSSLLLLLLLLLLIISSISSRRRRRRSSEOOOOOOZZLLLLLLLLIYYIIIIIIIMJJYYYY +DDDDDDJJJJJJJJJJJOOOOPPPPPPPPUUUUUUVVVVVVZZZNZZZZZZZZCCCCCCCCCCCCCAAAAAAAAAAASSLLLLLLLLLLLIIISSSSSRRRRRRSSZOOOOOOZZZLLLLLLLYYLIIIIJSSJJJYYYY +DDDDDDDJJJJJJJJJJOOOOPPRPPPPPUUVJUUVVVVVVNNNNNNZZZZZWECCCCCCCCCCCAAAAAOAAAAAALLLLLLLLLLLLLIIISSSSSRRRRRRFPPOOOOOOZZZLLLLLLLLLLJJJJJJJJJJJYYY +DDDDDDDJJJJJJJJJJJJOOOOPPUUPUUVVJVUVVVVVNNNNNNZZZZWWWWWWWWCWCCCCAAAAAAOAAAOALLLLLLLLLBBLLLLIIISSSSRRRRRRPPPZZZZZZZZZZLLLLLLLHJJJJJJJJJJYYYYY +DDDDDDDDDJJJJJJJOOOOOOOOOUUUUUVVVVUVVVVVVNNNNNNZZZWWWWWWWWWWWWCCAAAAAAOOOOOALLLLLLLLLBLLLLLIPISSSSRRRRRRRRRRRRZZZZZLLLLLLLLLHJJJJJJJJJJJYYYY +DDDDDDDDDJJJIOJOOOOOOOOOOOUCCVVVVVVVVVVVVVNZNNZZZWWWWWWWWWWWWWWIAAAAAAOOOOOAAOLLLELLLLLLLJLIPPSSSSSSRRRRRRRRRRPZZZZLLLLLLLLHHHJJJJJJJJJJJYYY +DDDDDDDDDDJJJOOOOOOOOOOOCCCCCCCVVVVVVVVVZZZZZZZZZZZWWWWWWWWWWIIIIAAAAOOOOOOOOOLLLLLLLLPPPPPIIPEESSSSRRRRRRRRRRPPPZZLLLLLLLHHHHJJJJJJJJJJYYYY +DDDDDDDDDDDDJOOOOOOOOOOOOCCCCCVVVVVVVVVVZZZZZZZZZZZWWWWWWWWWWWDDHDAAAOOOOOOOOOOOOLLLLPPPPPIIIPESSPSSRRRRRRRRRRMPPPMMLLLLLLHHHTJJJJJJJJJJJYYY +DDDDDDDDDDDNNNOOOOOOOOOOOCCCCVVVVVVVVVVZZZZZZZZZZZZZZWWWWWWWWWDDDDAAOOOOOOOOOOOOLLLLPPPPPIIIPPPPPPPPRRRRRRRRRRRRRMMLLLLLLLHHHHJJJJJJJJJJYYYY +DDDDDDDDDDDNNNOOUOOOOOOOOVCCVVVVVVVVVVVVZZZZGGZZZZZZZWWWWWWWWWWDDDDOOOYOOOOOOOOOLLLLLPPPPPPPPPPPPPPPRRRRRPMRRRRRRMLLLLLLLHHHHHJJJVVJJKJKKKYY +DDDDDDDDDDDUUNOOOOOOOOOOYVVCCVVVVVVVVVVVZLLLGGGGGGZGWWWWWWWWWWWDDDDOOOOOOOOOOOOOLYYYYPPPPPPPOPPPPNNNRRRRRPPRRRRRRMMLLLLLHHHHHHJVVVVVKKKKKKYK +DDDDDDDDDDDUUUOTTOOOOOYYYYVVVVVWWWWWCWVVVLLLLGGGGGGGWWWWWWWWWDDDDDDOVVOOOOOOOOZYYYYYYAAAPPAPPPPPNZNNRRRRRPMRRRRRRMMLLRRHHHHHVVVVVVVVVKKKKKKK +DDDDDDDZDDDUUOOOOPKHHHHYYYVVVVVVVWWWWWLLLLLLGGGGGGGGWWWWWWWDDDDDDDDVVVVVOOOOOOYYYYYYYYYAPPAANNNPNNNNRRRRRPMRRRRRRMMRLRRRRHHVVVVVVVIMKKKKKKKK +DDDDDDDZZDDXGOCCCKKKHKYYVVVTTTVVVWWWWWLWLLLLGGGGSGGGGGGWWDDDDDDDDDDDVVVVOOOOOOYYYYYYYYAAPAAANNNNNNNNNNNNPPPRRRRRRMMRRRRRRRRVVVMVVMMMMMKMKKKK +DDDDDUDXXXXXXXXCXKKKKKYYQQTTTTVVVWWWWWWWLLLGGGGGGGGGGGGGDDDDDDDDDDDDVVVVVOOOOYYYYYYYYYAAAANNNNNNNNNNNNNPPPPRRRRRRRRRRRRRRRVVVMMVMMMMMMMMMKKK +DTTTDUUXXXXXXXXXXKKTKKKTTTTTTTTTVTWTWWWWLLGGGGGGGGGGGGGGDDDDDDDDMMMDDVVVVVVVOYYYYYYYYYAAAANNNNNNNNNNNNNPPPWCCCCCRRRQRRRRRVVVVMMMMNMMMMMDMKKK +HHTXQXXXXXXXXXXXXKTTTTTTTTTTTTTTTTTTWWWWWWGGGGGGGGGGGGGGGDDDDDDDMMMMMVVVVVVVOYYYYYYYYYAAAANNNNNNNNNNNNNNPWWWWCCRRRRRRRRRRVVMMMMMMMMMMMMMMKKK +HHTXXXXXXXXXXXXXXEEETTTTTTTTTTTTTTTTWWWWWWDGGGGGGGGGGGGGGDDDDDDMMMMMMVVVVVVVVVYYYYYSYYYAINNNNNNNNNNNNNCPPPCWWCCCCCRRSRRRRVVMMMMMMMMMMMMKKKKK +HHHXXXXXXXXXXXXEEEEETTTTTTTTTTTTTTWWWWWWWWDGGGGGGGGGGGGGGGDDDDMMMMMMMVVVVVVVYYYYYYYIAIIIINNNNNNNNNNNNCCCPCCCCCCCCCCRRRRRRRMMRMMMMMMMMMMMMMKK +HHHKXXXXXXXXXXXEEEEETTTTTTTTTTTTTWWWWWWWDDDDGGGGGGGGGGGGGDDDDDMMMMMCMVVVVVVYYYYYYYYIIIIIINNNNNNNNNNNNNNCCCCCCCCCCCRRRRRRRRRRRMMMMMMMMMMMMKKK +HKKKSXXXXXXXXXXEEEEEETTTTTTTTTTTPPPWWPPFDDDDGGGGGGGGGGZZZDDDDDBBMMMMVVPVPVPYAAYYYYYYYIIIIINNNPNNNOOONNNCCCCCCCCCCRRRRRRRRIIRRMMMMMMMMMMMKKKK +KKKKSSSSXXXXXXXXEEEETTTTTTTTTTTTNNPPPPPFFDDGGGGGGGGZZZZZZDDDDDBBBMMMMVPPPPPAAAYIYYYIIIIIIIIIIPNNNOOOOTTTCFCFFCCCCCCCCRIIIMIRIMUMMMMMMMMMKKKK +KKSKSSSSXXXXXXXXXEEEETTTTTTTTTNNNNPNFFFFFDDGGGGGGGGZZZZZZZZDDDBBBBBBMVBIIPPPPAIIIIIIIIIIIIIIIIOOOOOTTTTSTFFFCCCCCVVIIIIIIIIIIMMMMMMMMMMMKKKK +SKSKSSSSSXXXXDXXDDDDDHTTHTTTTNNNNNNNBFFFFFDFBGSGGGFZZZZZZZDDDDBBBBBBYBBBPPPPPIIIIIIIIIIIIIIIIIOOOOTTTTTTTTFFFCCCCVVIIIIIIIIIIIMMMMMMMMMMMMKK +SSSSSSSSUUSSXDDDDDDDDHHHHTTTNNNNNNNNBFFGFFFFBGGGGKGGZZZZDDDDDDBBBBBBBBBPPPPPIIIIIIIIIIIIIIIIIIOOOTBBBBBBBBBFFFFFCFVVXJAIIIIIIIIMMMMMMMKKKKKK +SSSSSSSSSSSSHHDDDDDDDDHHHHTNNNNNNNNNNFFFFFFBBGGGGGGGGZZMDDDDDDBBBBBBBBPPPPPPPIBIIIIIIIYIIIIIIIIITTBBBBBBBBBBBFFFFFVVXJAAJJJJIIIIMMMMMMKKKKKK +SSSSSSSSSSSSHHHDDDRDDHHHHHNNNNNNNNNNNNFFPFFGBBGGGGGGGZLMMDDDDDBBBBBBBBIIMMPPPIBIIIIIYYYIIIIIIIIITTBBBBBBBBBBBFFFFFVVVJAJJJJJIIIIMMMMKKKKKKKK +SSSSSSSSSSSSHHHDDHHHHHHHHHNNNNNNNNQNNOFXGGGGGGGGGGGGGLLLDDDDDDGBBBBBBBIIMMMMPPMMIIIIYYIIIIIIILLLLLBBBBBBBBBBBFFFFFFVVJJJJJJJJIIIMMCMQKKKKJKK +SSSSSSSSSSSSSHHHHHHHHHHHHHHNNNNNNNNNOOFFGGGGGGGGGGGLLLLLOODDDDBBBBBBBBMMMMMMMMMMIIIIYYYYIIIIILLLCCBBBBBBBBBBBFFFFFFFJJJJJJJJJJJJJCCMQQKKJJKK +SSSSSSSSSSSSSHHHHHHHHHHHHHHNNNNNNNNNOOOOGGGGGGGGGGGULLLLLLODDDBBBBBBBBMMMMMMMMMMIIIIIYYIIIIILLLLLLBBBBBBBBBBBFFFFFFJJJJJJJJJJJJJJCCCCQQQJJKK +SSSSSSSSOOOOOHHHHHHHHHHHHJHNNNNNNNNNOOOOGGGGGGGGGGGUUUELLLLDFBBBBBBBBBMMMMMMMMMMMIIIEBYIIILLLLLLLCBBBBBBBBBFFFFFFOOUJJJJJJJJJJJJJCCCCQJJJKKK +SSSSSSSSOOOOOHHHHHHJHHHHHJJJJNNNNNVVOOOOGGGGGGGGGGGDUUELLXXDBBBBBBBBBBMMMMMMMMMMMIMIEBIIIILLLLLLLCBBBBBBBBBFFFFFFOOUOOJJJJJJJJJJJJJJJJJJJJKK +SSSSSSSSOOOOOHHHHHHJHHHHHJJJJNNNNAVVVOOOOGGGGGGGGGGUUUUUUXXDTBBBBBBBBBMMMMMMMMMMMMMIEEEIIIELLLLLLCCFFFFFFFFFFFFFFOOOOOJJJJJJJJTJXXXJJJJJJJJK +SSSPSPPPAAOOOHHHHHHJHHHHCJJJJNNJAAVVVVVOOOGGGGGGGGGUUUUUUXXUTTTTTBBBBBMMMMMMMMMMMMEEEEEIITELLLLCCCCCFFFFFFFFFFFFOOOOOOJJJJJJJJJJXDDDJDDDDXJK +SSPPPPPPAOOOOOHHHHHTHHCCCJJJJJJJJAVVVVVVGGGGGGGGGGGUUUUUUUUUTTTTBBBBBMMMMMMMMMMMMEEEEEEEEEELLLLCCCCCFFCFFFFFFFFFFOOOOOJJJJJJJJXXXDDDDDDDDDDD +PPPPPPPPPPOOBOHHHHHTMTCJJJJJJJJJJVVVVVVVGGGGGGGGGGGUUUUUUUUUTTTTTBBTTTMMMMMMMMMMEEEEZZZZZZZLZZZZZZZCFCCFFFFFOFOOOOOOOOOJJJJJYXXXDDDDDDDDDDDD +PPPPPPPPPPOOOOHTTTTTTTTEJJJJJJJJJVVVVVVVGGGGGGGGGGGUUUUUUUUUTTTTTTTTTTMTMMMMMMMMEEEEZZZZZZZEZZZZZZZCCCCCCFFFOOOOOOOOOOOOOYYYYXXXXDDDDDDDDDWD +PPPPPPPPPPUOHHHHHTTTTTTJJJJJJJJJVVVVVVVVVVGZZFFGGFGUUUUUUUUUUTTTTTTTTTTTTTMMMMEEEEEEZZZZZZZZZZZZZZZCCCCCCCFOOOOOOOOOOOOOYYYYYYXXDDDDDDDDDDDD +PPPPPPPPPPPHHTTTTTTTTJJJJJJJJJJJJJJVVVVVVVGGFFFFFFFUUUUUUUUUUTTTTTTTTTTTTTTTMMMEEZZLZZZZZZZZZZZZZZZCCCCCCCCOAAOOOOOOOOFYYYYYYYYYDDDDDDDDDDDD +PPPPPPPPPPZRRTTRTTTTTTTJJJJJJJJJJJJVJVVVVVVGFFFFFFFUUUUUKUUUUUTTTTTZTTTTTTTTZZZZZZZZZZZZZZZZZZZZDDDDDCCCCCCCCAOOOOOOBYYYYYYYYYYYYDDDDDDDDDDI +PPPPPPPPPPZRRFFRTTTTTTTTTJJJJJJJJJJJJJJVVFFFFFFFFFFYUUFYYYUUUTTTTTZZZZTTTTZZZZZZZZZZLLLLLLLLLZZZDDDDDCCCCCCCAAAAAOOOZZZZZZZZZYYYDDDDDDDDDIII +PPPPPPPPPPRRRRRRRTTTTTTTTJJJJJJJJJJJFFFDFFFFFFFFFFFYUFFFYYYYYYTTTTZZTZTTTTTZZZZZZZZZRLLLLLLLLZZZDDDDDZZZZZZCAAAAAOOOZZZZZZZZZYYYDDDDDDLDDDII +PYPPPPPPPRRRRRRRRRTTTTTTJJJJJJJJJJJFFFFFFFFFFFFFFFYYFFFYYYYYYYTTZZZZTTTTTTTZZZZZFZZPRRLLLLLLLZZZDDDDDZZZZZZAAAAAZZZZZZZZZZZZZZZZDDDHHHKKKIII +LPPRPPPRPRRRRRRRRRTTTXTTJJJJJJJJJJJFFFFFDFFFFFFYYFYYYFYYYYYYYYYZZZZZZTTTTTTTTZAZZARRRRRLLLLLLZZZDDDDDZZZZZZAAAAAZZZZZZZZZZZZZZZZYYDFFFFKKIII +LLLRRRRRPRRRRRRTTTTTTXTTWJJJJJJVVJJFDDFFFFQQFFFYYYYYYYYYYYYYYYZZZZZZZTTTTTTTTZAZZRRRRRRLRRLRLLLLDDDDDZZZZZZAAAAAZZZZZZZZZZZZZZZZHHFFKKKKKIII +LLLRRRRRRRRRRRRKTXTTXXTTTDJJJJJJDDDDDDFFFFQQQQFRYYYYYYYYYYYYYYZZZZZZZZZZZTTTTZCCRRRRRRRRRRRRRZZZZZZZZZZZZZZZZZAAZZZZZZZZZZZZYYYYHFFFFKKKKIII +LRRRRRRRRRRRRRXXXXXXXXTTTDJDDJJJDDDDDDFYYQQQQYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZCCRRRRRRRRRRRRRZZZWWWWWWWWZZZZQQQQZZZZZZZZZZZZYKFFFFFFFFKKKKII +RRRRRRRRRRRRRXXXXQXXXXTTTDDDDJDDDDDDDDDDYQYYYIIYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZCCCRRRRRRRRRWRRZZZWWWWWWWWZZZQQQQQZZZZZZZZZZZZYFFFFFFFFKKKKKII +RRRRRRRRRRRRXXXXXXXXXXXXXDDDDDDDDDDDDDDDYQQYYYIYIYYYYYYYYYYYYYYZZZZZZZZZZZZZNCCCCRRRRRRRRUUUUZZZWWWWWWWWZZZQQQQQZZZZZZZZZZZZFFFFFFFFFKKKKKII +RRRRRRRRRRRRXXXXXXXXXXXXXXDDDDDDDDDDDDDYYYYYYYIIIYYYYYYYYYYYYYYYZZZZZZZZZZZZNXCCCWWWWWWWWWWWWWWWWWWWWWWWZZZQQQQQZZZZZZZZZZZZFFFFFFFFDFKKKKKI +RRRRRRRRRRRRXXXXXXXXXXXXDXDDDDDDDDDYYYDYYYYYYYYIIIIYYYYYYTYYAYTTTTZZZZZZZZZZNNNNNWWWWWWWWWWWWWWWWWWWWWWWZZZZZZZZZZZZZZZZZZZZFFFFFFFFFFKRKIII +RRRRRRRRRRRRXXXXXXXXXXXXXXDDDDYYYYYYYYYYYYYYYIIIIICCCCITTTTTATTLTTZZZZZZZZZZNFNNNWWWWWWWWWWWWWWWWWWWWWWWZZZZZZZZZQQQQTTKKKKFFFFFFFFFFFFRKIII +PPPPRRRRRRRXXJXXXXXXXXXXXXDDDYYYYYYYYYYYYYYYYIIIIIICCDTTTTTTTTTTTTZZZZZZZZZZNNNNNWWWWWWWWWWWWWWWWWWWWWWWGZZZZZZZZQQQTTTTKKKFWFFFFFFFFFRRIIRR +PPRRRRRRRRCXJJJXXXXTXXXXXXXDYYYYYYYYYYYYYAYYYYIAIIICCDDTTTTTTTTTTTZZZZZZZZNZNNNNNWWWWWWWWWWWWWYYWWWWWWWWQZZZZZZZZQQQTKKTKKKKKKQFFFFRRRRRRRRR +PPPRRRPJJJJJJJJJJJXXXXVIXXXYYYYYYYYYYYYYYAAYAPAAAXICCTTTTTTTTTTTTTTTTTZMMMNNNNNNNNGGGWWWWWWWWWYNWWWWWWWWQZZZZZZZZQQQQKKKKKKKKQQQQFFRRRRRRZRR +PPPPPPPPPJJJJJJJJJJVVVVVVXXYYKKYYYYYYYYYYYAAAAAAAXXCJXTTTTTTTTTTTTJTJJMMMMMNNNNNNNNNGWWWWWWWWWYNMMNNNNNNQZZZZZZZZQQQQKKKKKKKKKKKQKKKRRRZRZRR +PPPPPPPPPPJJJJJJJJJVVVVVVXKKKKKYYYYYYYYYYYYAAAAXXXXXXXXXTTTTTTTTTTTJJMMMMMMNNNNNNGGGGWWWWWWWWWYYNMNNNNNQQQQQQQQQQQQQKKKKKKKKKKKKKKKKRRRZZZRR +PPPPPPPPPJJJJJJJJJVVVVVVVVVKYKYYYYYYYYZZZYYYXXXXXXXXXXXXTTTTTTTTTTTTMMMMMMMMNNNNGGGGGWWWWWWWWWNNNNNNNNNNQQQQQQQQQQQQKKKKKKKKKKKKKKKRRRRRZZZR +PPPPPPPPPJJJJJJJVVVVVVVVVVIYYYYYYYYYYYYZZZZYXXXXXXXXXXXXTTTTTTTTTTTTMMMMMMMMNNNNNGGGGWWWWWWWWWNNNNNPNNNQQQQQQQUQQQQKKKKKKKKKKKKKKKKKRRRRRZZZ +PPPPPPPPPJJJJJJJVVVVVVVVVVYYYYYYYYYYYZZZZZZZXXXXXXXXXXAAAAATTTTTTMMMMMMMMMMMNNNNGGGGGWWWWWWWWWJJNNNNNNNAAQQNQQUQQQKKKKKKKKKKKKKKKKKKRRRRRZYY +PPPPPPPPPJJJJJJVVVVVVVVVVVVMYYYYYYYDDZZZZZZJXXXXXXXXXXAAAAAFTTTTTTNMMMMMMMHMNNNNGGGGGWWWWWWWWWJJGGGNNNNNAAPPPUUUQQKKKKKKBBBKKKKKKKKKRRRRYZYY +PPPPPPPPPPJJJJJJVVVVVVVVVVVMMYYYYYYDZZZZZZZZXXXXXXXXXXAAAAAAATTTFTTMMMMMMMMNNNNNNNGGGGGGGJJJJJLLGGGGGGNOPPPPPPUUUUUUBKBBBBBBKKKKKKKKKKYYYYYY +PPPPPPEEPJJJJJJJVVVVVVVVVVVMYYYYYYYDZZZZZZZXXXXXXXXXXXXAAAAAAATTPPPPMMMMMPPNNNNNNNGGGGGGGJJJJLLLLGGGGOOOOPPPPPPUBBBBBBBBBBBBBKKKKKKKKIIKYYYY +PPPPPPEEEJJJJJJJVVVVVVVVVVVVPYYYYYZZZZZZZZZZZXXXXXXXXAAAAAAAAATPPPPPMMPMPPPNNNNGGGGGGGGJJJJJGGGGGGGGOOOOOOPPPPUUBBBBBBBBBBBBBBKKKKKKKKKKYYYY +MPPPMMEEEJJJJJJVVVVVVVVFFFVPPPPPYPZZZZZZZZZZZZXXXXXXXAADDDAAAAAPPPPPPPPPPNNNNNNGGGGGGGBJJJJJGGGGGGGGGGOOOOPPPPPUBUBBBBBBBBBBBBKKKKKKKKKKYYYY +MMPPMMEEEEJJJJJJEEVGVVVEFEEWWWWPYPPPZZZZZZZZZZXXXXXXXXAADDDAMMMMMPPPPPPPPNNNNNNNNHHGJJJJJJJJJGGGGGGGGGGGOOPPPPPPPUUBBBBBBBBBBBAAKKKKKKKKYYYY +MMMMMMDDJJJJJEJJJEVVVVVEEEEWWWWPPPPZZZZZZZZZXXXXXXXXXAADDDDMMMMMPPPPPPPPPPNWNNNKNHGGJJJJJJJJGGGGGGGGGGGGGOPPPPPPUUUBBBBBBBKBBHAAKKFKKKKFYYYY +MMMMMDDDDJJJJEEJJEEEVVVNEEEWWWWPPPPZPWWZZZZZZZXAAXAAAAADDDDMMAAAPPBPPPPPNNNWNNNNJJJGJJJJJJJJGGGGGGGGGGGGGGPPPPPPPPBBBBBBBBBFFAAAAKFFFKKFYXYY +YMMMMDDDDDDDJJEEEEEEVEEEEEEWWWWWPPPPPWWWZZZZZZAAAAAAAAADDDDAAAAANPBBBBBUTURUUUUUJJJJJJJJJJJGGGGGGGGGGGGGGGPPXXPPGGGBBBBBBBFFFFAAAFFFFFFFYYYY +YMYMDDDDDEEEJJEEEEEEEEEEEEEWWWWWPPPWWWWWWZZZZZZAAAAACADDDDAAAAAANPDDDBUUUURUUUUJJJJJJJJJJJJGGGGGGGGGGGGGGGPGPPPPGGGBBBBBBBBBFAAAAFFFFFFFFYYY +YYYMDDDDDEEEEEEEEEEEEEEEWWWWWWWWWWWWWWWWMZZZZZAAAAAACAACDDAADAAADDDDDUUUUUUUUUUCJJJJJJJJJJJJJGGGGGGGGGGGGGGGGPPGGGGBBBBBBBBBFFFFFFFFFFFFFFYY +YYYEEEDDDEEEEEEEEEEEEEEEWWWWWWWWWWWWWWWWMZZZZZAAAAAACCACDDDADADAADDDUUUUUUUUUUJCJJJJJJJJJJJJJGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBFFFFFFFFFFFFFFF +YYEEEEEEEEEEEEEEEEEEEEEWWWWWWWWWWWWWWWWWWZZZZAAAAAACCCCCCDDDDADDDDUUUUUUUUUUUUJJJJJJJJJJJJJJJJGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBFFFFFFFFFFFFFFF +YEEEEEEEEEEEEEEEEEEEEEEEWWWWWWWWWWWWWWWWWFFZZAAAAAAACCCCCDDDDDDDDDUUUUUUUUUUUUIJJJJJJJJJJJJJJJGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBFFFFFFFFFFFFF +YYYYEEEEEEEEEEEEEEEEEEEEWWWWWWWWWWWWWWWWFFFZZZAAAAAAACCCDDDDDDDDDUUUUUUUUUUUUUUUJJJJJJJJJJJJJJGOOGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBFFFFFFFFFFFFF diff --git a/src/day12.scala b/src/day12.scala new file mode 100644 index 0000000..4f959c1 --- /dev/null +++ b/src/day12.scala @@ -0,0 +1,90 @@ +package aoc +package day12 + +import scala.collection.{mutable as m} + +val dayNumber = "12" + +@main def part1: Unit = + println(part1(loadInput(dayNumber))) + +@main def part2: Unit = + println(part2(loadInput(dayNumber))) + +def part1(input: String): String = + val grid = parseInput(input) + val regions = findRegions(grid) + regions.map(r => r.area * r.perimeter).sum.toString + +def part2(input: String): String = + val grid = parseInput(input) + val regions = findRegions(grid) + regions.map(r => r.area * r.cornersCount).sum.toString + +def findRegions(grid: Map[Pos, Char]): List[Region] = + val visited = m.Set.empty[Pos] + grid.keySet.toList.flatMap(pos => + if !visited.contains(pos) then + val region = exploreRegion(pos, grid) + visited.addAll(region) + Some(region) + else None + ) + +def exploreRegion(pos: Pos, grid: Map[Pos, Char]): Set[Pos] = + val stack = m.Stack(pos) + val region = m.Set.empty[Pos] + while stack.nonEmpty do + val pos = stack.pop + val plot = grid(pos) + region.add(pos) + stack.pushAll( + pos.neighbors.flatMap(pos => + grid.get(pos).collect { + case n if !region.contains(pos) && n == plot => pos + } + ) + ) + region.toSet + +type Pos = (Int, Int) +extension (pos: Pos) + def plus(offset: Pos) = (pos._1 + offset._1, pos._2 + offset._2) + def neighbors = + List(pos.plus(-1, 0), pos.plus(1, 0), pos.plus(0, -1), pos.plus(0, 1)) + def neighborsWithDiagonal = + (for + x <- (-1 to 1) + y <- (-1 to 1) + if !(x == 0 && y == 0) + yield pos.plus(x, y)).toList + +type Region = Set[Pos] +extension (region: Region) + def area = region.size + def perimeter = + region.toList.map(p => 4 - p.neighbors.count(region.contains)).sum + def doubleSize = + region.flatMap((x, y) => + List( + (x * 2, y * 2), + (x * 2 + 1, y * 2), + (x * 2, y * 2 + 1), + (x * 2 + 1, y * 2 + 1) + ) + ) + def cornersCount = + val doubledRegion = region.doubleSize + doubledRegion + .count(p => + p.neighborsWithDiagonal.count(doubledRegion.contains) match + case 3 | 4 | 7 => true + case _ => false + ) + +def parseInput(input: String): (Map[Pos, Char]) = + val grid = input.split("\n") + (for + y <- grid.indices + x <- grid.head.indices + yield (x, y) -> grid(y)(x)).toMap