Compare commits

...

2 Commits

Author SHA1 Message Date
Borna Rajković
26a7b87c31 Day 12. part 2. 2024-12-12 10:04:22 +01:00
Borna Rajković
12b29f445e Day 12. part 1. 2024-12-12 10:04:15 +01:00
7 changed files with 367 additions and 0 deletions

@ -36,3 +36,6 @@ var Day10Data string
//go:embed day_11/data.txt
var Day11Data string
//go:embed day_12/data.txt
var Day12Data string

140
day_12/data.txt Normal file

@ -0,0 +1,140 @@
KKKKKKKKKKKEEEEEEEEEEWWWWWWWWWWWWUWWUUHSSSHNNNNPVVVVVVVVCRRCCCCCCCYYCSSSSSSSSSSHKHIIIIUDDUUWIIIIIIIIIIIIYUEEDDDYYYYYYYYYYYYYYYYYYYYIIIIIIIJJ
KKKKKKKKKKKEEEEEEEEEHHHWWWWWWWWWWUUUUUHHHHHHHPPPPPVCVCCVCCCCCCCCCCYCCSSSSSSSSSSHHHHIIIUDDUUUIIIIIIIIIIYYYUEEEEEYYWYYYWWWYYYYYYBBBBBIIIIIIJJJ
KKKKKKKKXXKEEEZZZZZZZHHWWWWZZZWCCUUUUUHHHHHHHPPPPPVCCCCCCCCCCCCCCCCCCSSSSSSSHHHHHHHIUUUUUUUIIIIIIIIIIIYYYUEEEEEYYWWWWWWWWWWYYYBBBBBBBBJJJJJJ
KKKKKKKKKKKEEEEZZZZZZZZZZZZZZZWCCCHUUUHHHHHHHPPPPPPCCCQQCCCCCCCCCCCCCSSSSSSHHHHHHHXUUUUUUUUIJIIIIIIIIIIYOEEEEEEEWWWWWWWWWWWYYYYBBBBBBBLJJJJJ
KKKKKKKKKKKKEEEZZZZZZZZZZZZZDZDCCCHHUHHHHHHHPPPPPPPQQQQCCCCCCCCCCCCCCSSSSSHHHHHHHHHHUUUUUUIIIIIIIIIIIIYYOEEEEEEEWWWWWWWWWWWWWYYBBBBBBBBBJJJJ
KKKKKKKKKKKKEZZZZZZZZZZDZZZDDDDDCCHHHHHHHHHPPPPPPPQQQQQQQCCCCCCCCCCCCSSSSSHHHHHHHHHHUUUUUUUIIIIIIIIIIIYYEEEEEEEEWWWWWWWWWWWWWWWBBBBBBBBOJJGG
KKKKKKKKKKKKZZZZZZZZZDTDDDDDDDDDCHHHHHHHHHHHPPPPPPQQQQQQQQCCKCKKCCCYYSSSSHHHHHHHHHHUUUUUUUUIIIIIIIIIIIZYEEEEEEEEEWWWWWWWWWWWWWWBBBBBBBBJJJGG
OKKKKKKKKKKLZZZZZZZZZDDDDDDDDDDTHQHHHHHHHHHPPPPPPQQQQQQQQQQKKKKKKKCYYYSSHHHHHHHHHHHUUUUUUUUUSSIIIKKKGGZZZEEEEEEEEWWWWWWWWWWWWWBBBBBBBBBBBURR
OKKKKKKKUUKLLLLLZZZZZDDDDDDDDDDDHHHHHHHHHQHHPPPPPXQQQQQQQQQKOOKKYYYYYYYYYHXHHHHHHHHUUUUUUUUUUUKKKKGGGGGGEEEEEEEEEWZWWWWWWWWWWWBBBBBBBBBBBRRR
OKKKKKKKKKKLLLLLZZZZZZDDDDDDDDDHHHHHHHHQHQPPPPPPAQQQQQQQQQQQYYYYYYYYYYYYXXXHHHHHUUUUUUUUUUUUUUGGGGGGPPPPEEEEEEEEEZZWWWWWWWWWWWWWWBBBBBBBBRRR
OKKKKKKKKLKLLLLLZZNNZZDZZDDDDDDDDDHHHHHQQQQPPPPAAIIIIIIQDQSYYYYYYYYYYYYXXHHHHHHHUUUUUUUUUUUUUUUGGGGGGPPPEEEEEEEEEZZJWWJJWWWWJWWWWWBBBBBBBRRR
OKKKKKKKKLLLLLLLZNNNNZZZZZZZDDBKKKKKKKKXXXQQXPPPIIIIIIIIISSSYYYYYYYYYYXXXHMHHHHHUUUUUUUUUURRRRRGGGGPGPPPPPPEEEEEEZZJJJJJWWWWWWWWWKBKBBBRBRRR
OKKKKKKKKLLLLLLLNNSNNZZZZZDDDDBBBBKKKKKKXXQQXXVXIIIIIIIIISSSYYYYYYYYYYMXMMMHKKHHUUUUUUUUUURRRRGGGGGPPPPPPPPPEEEEEZZZZZJJWWWJWWWWWWWKKRRRRRRR
OOKKKKKKMBLLLLLLLLNNNNNXXXXXXXXXBKKKKKKKXXXXXXXXXIIIIIIIIIISYYYYYYYYYYMMMMMHKKKBSBUSUUUUUURRRRPQGGGPPPPPPPPPEEZZZZZZZZJJWJJJWWWWWKKKKRRRRRRR
OOOKKKKMMBBLLLLLLLNNNNNXXXXXXXXXBBKKKKXXXXXXXXXXXXIIIIIIIIIIAYYYYYYYYYMMMMMMMKKBBBBSRRRUUUURRRPPPGPPPPPPPPPPPONZZZZZZZZJJJJJWWWWWKKKKRRRRRRR
KKKKKKDBBBBLLLLLLLNNNNNXXXXXXXXXBBKKKKXXXXXXXXXXXXXIIIIIIIIIAYYYYYYYYYHHMMMMMBBBBBBRRRRRURRRRRPPPPPPPPPPPPPPOOOZZZZZZZZZJJJJJJJWWWWKKRRRRRRR
BKBBKBBBBBBBLLLLLNNNNNNXXXXXXXXXBBBKKKKXXXXXXXXXXXXIIIIIIIIAAPPPPPPPPRGHMMHHMBBBBBBRRRRRURRRRPPPPPPPPPPPPPPPOOOOOZZZZZZZZJJJJWWWWWWWKRRRRRRR
BKBBBBBBBBBBLLLYYNNNNNNXXXXXXXXXBBBBBBKXXXXXXXXXXXXXIIIIIIIGAPPPPPPPPRGHHHHHPPPBRRRRRRYYURRRRPPPPPPPPPPPPPPOOOOOZZZZZZZZZJJWWWWWWWWWKKKRRRRR
BBBBBBBBBBBLLLLYYNNNNNNNNXXXXXBBBBBBBBBHHXXXXXXXXXXXIIIUUINGGPPPPPPPPGGHHHHHPPPBRRRRRRRYUURRRRRRRPPPPPPPPPPOOOOOZZZZZZZZZJJWWWWWWWWWKKKKRRRR
BBBBBBBBBBBLLYYYYNNNNNNNNXXXXXBBHBBBBBBHHHXXXXXXXXXXIQIUUUGGGPPPPPPPPGGHHHHHPPPRRRRRRRZAUARRRRRERPPPPPPPPPPPOOOOOZZOOZSZZFFBBWWWWWWWWKKKRRBB
BBBBBBBBBBBLLYXXXXXNNNNNNXXXXXHHHBBVBBBHHXXXXXXXXXXXUUUUUGGGGPPPPPPPPPPPPPPPPPPPPPPPPRAAAAAAEEEEEPPPPPPPKPPPOOOOOOZOWFFFFFFBBBWWWWWWKKKKKBBB
BBBGGBBBBBBLLYXXXXXNNNNNDXXXXXHHHBBBHHHHHXXXXXXXXMMMUUUUUGGGGPPPPPPPPPPPPPPPPPPPPPPPPRRRQQQQQQQQQQQQQQQQKKPPOOOOOOOOOFXFBBFBBBBWWWWWKKKKKBKB
BGGGGGGGBBBBLYXXXXXNRRDDDXXXXXHTTLLBHHLHHHCXXXXXXMMMUUUUUUGGGPPPPPPPPPPPPPPPPPPPPPPPPRRAQQQQQQQQQQQQQQQQFKKKKOOOOOOOOOFFBBBBBKKWWWKKKKKKKKKB
BGGGGGGGGLLLLLXXXXXXXXXXXXXXXXLLLLLLHLLHHCCCCCCXXXXAAAAUJGGGGPPPPPPPPPPPPPPPPPPPPPPPPXAAQQQQQQQQQQQQQQQQFFKKOOOOOOOOOFFFBQQQHKKKWWKKKKKKKKKB
GGGGGFGGGGLLLYXXXXXXXXXXXXZZLLLLLLLLLLLHHCCCCCXXXXNAAAAUJJGGGPPPPPPPPPPPPPPPPMMMMMMXXXAAQQQQQQQQQQQQQQQQFFOOOOOOOOOOFFFFQQQQHKKKKKKKKKKKKKBB
GGGGQQQGGGLLLLYXXXXXXXXXXXZZLLLLLLLLLLLLCCCCCCXXXRAAAAAAJGGGGPPPPPPPPPPPPPPPPMMMMXXXXEEEQQQQQQQQQQQQQQQQFFFFFFOOPOFFFFFFFHHHHHHKKKKKKKKKKKKB
GGGGQQQGGGXXXXXXXXXXXXXXXXLLLLLLLLLLLLLTCCCCCCYYYAAAAAAKJJJGGGGGIGGGPPPPPPPPPMMDMXXXXEEEQQQQQQQQQQQQQQQQFFFFFFFFOOFFFFFHFHHHHHHHKKKKKKKKKKBB
GGGGQQGGGGXXXXXXXXXXXXXXXXLLLLLLLLLLLLLGGGCCCCCYAAAAAAAJJJJGGGGGIGGGPPPPPPPPPMMMMXXXXEEEQQQQWWWWWWQQQQQQFFFFFFFFFFFFFHHHHHHHHHHHHKKKKKKKKKKK
GGGGGGGGGGGXXXXXXXXXXXXXXXLLLLLLLLLLLLLLGGGCCYYYAAAAAAAJJJJGGIIOIIMMPPPPPPPPPMMMMMXXEEEEQQQQWWWWWWQQQQQQFFFFFFFFFFFFFHHHHHHHHHKKKKFKKKKKKKKK
GGGGGGGGGXXXXXXXXXXXXXXXXXVLVVVLLLLLLLLLGGGGGGGAAAAAAAJJJJJIIIIIIIIIPPPPPPPPPMMMMMMXEEEEQQQQWWWWWWQQQQQQFFFFFFFFFFFFFHHHHHHHHCKOKKFKKKKKKKKC
GGGGGGGXXXXXXXXXXXXXXXXXXXVVVVLLLLLLLLLLGGGGGGFFAAAAAJJJJJJJIIIIIIIIIIIIMMMMMMMMMMMEEEEEEEEEWWWWWWQQQQQQFFFFFFFFFFFFFHHHHHHHHCOKKKFKKKFFKKKC
GGGGGGGXXXXXXXXXXXXXXXXXXXVVJJLTLLLLLLLLGGGGGGGGUAAAAJJJJJJJJIIIIIIIIIIMMMMMMMMMMMOOEDEEEEEEWWWWWWSSSFFFFFFFFFFMFFFFFHHHHHHHOOOOFFFFFFFFOKKC
GGGGGGGGXXXXXXXXXXXXXXXXXXVVJJLLLLLLLLJLGGGGGGGGUUAAAJJJJIIILIIIIIIIIIIIIMMMMMMMMMONEDEEEEEEWWWWWWSSSSFFFIFFFFFMFFFFFFHIHHHOOOOOOFFFFFFFFCCC
GGFFGGFXXXXXXXXXXXXXVVVVVVVJJJLLLLLLLLJJJJGGGUUUUUUUUUUUJIIIIIIIIIIIIIIIIMMMMMMMMMNWWWNNHECEWWWWWWKKKKKKKKKIMMMMMMMFFFIIIIHOOOOPOOOFFFFFFFCC
GFFFFFFFFFVVXXXXXXXVVVVVVVVJJJLDLLLLLDZQJJJJJUUUUUUUUUUUJJIIIIIIIIIIIIIIIMDDMMMMMNNWWWNNWWWWWWWWWWKKKKKKKKKIIMMMMMMMIFIIIIOOOPPPOQFFFFFFFFCC
GFBFFFFFFVVVXXXXXXXVVVVVVVVJJJDDLDDDDDZQJJJJJUUUUUUUUUUUJJJIIIIIIIIIUUIIIMDDDMOWOOEWWWWWWWWWWWWWWWWWWKKKKKKIIMMMMIIMIIIIIIOOPPPPOOOOFFFFFFAC
GFFFFFFFFVVVVVVXXVVVVVVVVVVJJJDDDDDDDDQQJJJJJJUUUUUUUJJJJJJIIIIIIIIIUUUIIIOOONOOOOOWWWWWWWWWWWVVWWWWWKKKKKKYIIIMMIIIIIIIPPPPPPPPPPPRFFFFFAAA
FFFFFFFFFFFFVVVXXVVVVVVVVVVDDDDDDDDDQDQQUJJJJJUUUUUUUJJJJJJJIIIIIIIIIUUUUUOOONOOOOOOWWWWWWWWWWVVWWWWWKKKKKKYYIIIIIIIIIPPPPPPPPPPPPPFFAFFAAAA
FFFFFFFFFFFVVVVVVVVVVVVVVVVDDDDDDDDDQQQQUUJHBUUUUUUUUUJJJJJJJIIIIIIIPUUUUUOOOOOOOOOOWWWWWWWWWWVVWWWWWKKKKKKYYYIIIIIIIPPPPPPPPPPPPPPFFAFAAAAA
FIFFFFFFFFFFVVVVVVVVDDVIVTTTDDBDDDTNNQQQUUHHBBUUUUUUUJJJJJJJJIJIIIIUUUUUUUOOOOOOOOOOONNNNNNNNNVVWWWWWKKKKKKYYYIIIIIIIIPPPPPPPPPPPPPFFAAAAAAA
IIIFFFFFFFFFFVVVVVVVVDDDDDDDDDDDDTTNQQQQUUHBBUUUUUJJJJJJJJJJJJJJJJUUUUUUKUOOOOOOOOOODDNNNNKKKKKKWWWWWKKKKKKNYIIIIIIIIIIPPPPPPPPPPPPDFAAAAAAA
IIIFFFFFFCCWWVVVVVVVVDDDDDDDDDNNTTTEQQQHHHHHBUUUBBJJJJJJJJJJJJJJJJUUUUUUUOOOOOODODDDDDNNNNKKKKKKWWWWWKKKKKKNNIIIIIICCCCPHPPPPPPPPPPPAAAAAAAA
IIIFFFFOWCCWWWVVVVVVVDDDDDDDDDNNTPQQQQQHHHHHBBBBBBBJJJJJJJJJJJJJJUUUUUUUUOOOODDDODDDDDNNNUKKKKKKWWWWWKKKKKKNNNNNIIICCCCTCPPPYPPPPPPAAAAAWWWA
IIIFOOOOWWCWWWWWWWVVVDDDDDDDDDDQQQQQQQQQHHHHHBBBBJJJJJJJJJJJJJJJUUUUUUUUUOOOODDDDDDDDDDFNNKKKKKKWWWWWKKKKKKNNNNNNIICCCCCCCPPYPPPPPPAAAWWWWWW
IIIFFKKKKKWWWWWWWVVVXXDDDDDDDDDQQQQQQQEQQQHHHHBBBBJBBJMMVMJJJJFFFUUUUUUUUOODDDDDDDDDDDDFFUKKKKKKKKKKKKKKKKKNNNNNNIICCCCCCCCCPPPPPAAAAAWZWWWW
OOOFOKKKKKWWWWWWWWVVXDDDDGGGGGGQQQQQQQEQQQHHHQQQBBBBMMMMMMJJDFFFFFFUUUUUOOOODDDDDDDDDDDDUUUUUUUAAAOMMMNNNNNNNNNIIICYCCCCCCCCPPPPPPAAAWWWWWWW
OOOOOKKKKKWWWWWWWWXXXXDXDGGGGGGQQQQQQQQQQQHHHQQQQQMMEMMMMMKJDFFFFFFUUUOOOOOODDDDDDDDDDDOOUUOOOOOOOOOMNNNNNNNNNNIIICCCCCCCCCCPPPPPAAAAWAWWWWW
SOOOOKKKKKWWWWWWWWXXXXXXXGGGGGGQQQQQQQQQQQQQQQQQQQMMMMMMMMMMDFFFFFFFFUOOOOWWDDDDDDDVDDDOOOOOOOOOOOOOMMNNNNNNNNNIIICCCCCCCCCCCCPAAAAAAAAWWWWW
SOOOOKKKKKCCCCCCCWWXXXXGGGGGGGGQQQQQQQQQQQQQQQQQQHMMUMMMMMMMFFFFFFFFFOOOOOWWQQDDDDDVVVOOOOOOOOOOOOOOMMMMNNNNNNNIICCCCCCCCCCCCCGAAAAAAWWWWWWW
SYQQOKKKKKCCCCCCCWXXXXXGGGGGGGGQQQQQQQQQQQQQQQQQQHMMMMMMMMMMFFFFFFFFFWWWWWWWWQDDDDDVUVOOOOOOOOOOOYOOMMMMNNNNNNKKIILCCCCCCCCCCGGAAAAAWWWWWWWW
YYYYHKKKKKCCCCCCCXXXXXXGGGGGGGGQQQQQQQQQQQQQQQQQQHHMMMMMMMMMFFFFFFFFFFFWWWWWQQQDDUUUUUOOOOOOOOOOOOOMMMMMMNNNSSKMICCCCCCCCCCCCGGGGAAAWWWWWWWW
YYYYYKKKKKCCCCCCCXXXXZZZGGGGGGGQQQQQQQQQQQQQQHHHHHHMMMMMMMMMMMFFFFFFFWWWWWQQQQYQDDUUUUUUOOOOOOOOOOKOMMMMMMMMKSKKIICCCOCCCCCCCGGAGAAAAAWWWWWW
YYYYYKKCCCCCCCCCCXXXZZZZGGGGGGGGDDEQQQQQQQQQHHHHHHHMMMMMMMMMZZFFFFFFFFFFWWQQQQQQDUUUUUUUUOOUUOOOOOOOMMMMMMMMKKKKIIOSSOCCCCCCCGGAAAAAAAAWWWWW
YYYYYHHCCCCCCCCCCCCCCCCCCCGGGGGGDYYYQQQQQQQQQHHHHHHMMMMMMMMMMMFFFFFFFFFFWWQQQQQDDUUUUUUUULLLUOOOOOMMMMMMMMKKKKKKKOOOOOBBBBCBCAAAAAARRRRRWWWW
YYYYHHHCCCCCCCCCCCCCCCCCCCGGGGGGYYYYYYQQQQQQQWHHHHHMMMMMMVMMKFFFFFFFFFFWWQQQQQQQQQUUUUUUULUUUUOOOMMMMMMMMMKKKKKKOOOOOOOBBBCBBBBAAAARRRRRRRRR
YYYYXXXCCCCCCCCCCCCCCCCCCCGGGGGUCYYYYQQQQSQQHHHHHHHHHHHMMCCKKKFFFFFFFFFFWWWQQQQQQUUUUUUUUUUUUUOMMMMMMMMMMMKKKKKOOOOOOOOOOBBBBBBAAAABRRRRRRRR
YYYYYYVCCCCCCCCCCCCCCCCCCCGGGGGUCYYYNNNNSSSSHHHHHHHHHHMMMCCCKCCFFFFFFFFFFFWQQQQQQUUUUUUUUUUUUUMMMMMMMMMMMMKKKKKKTOOOOOOOOOBBGBBBABBBRRRRRRRR
YYYYYYXCCCCCCCCCCCCCCCCCCCGGGGGUCCCNNNNNDDSHHHHHHHHHHFFFFFFFFFFVFFFFFFFFFDDDDDUQQQUUUUUUUUUUUMMMMMMMMMMMMMKKKKKKOQOOOOOOOBBGGBBBBBBBRRRRRRRR
YYYIILLCCCCCCCCCCCCCCCCCCCGGGGGCCCCNNNNNDDDDQQHHHHHHHFFFFFFFFFFCTFDFFFFFDDDDDDUUUUUUNUUUUUUUUMMMMMUUUMUUMMKKKKOOOOOOOOOOOOOGGBBRRRRRRRRRRRRR
YIIIILLCCCCCCCCCCCCCCCCCCCGGGGGUCCCCNNNNNDDDDQDHHHHHHFFFFFFFFFFLDDDDDDDDDDDDDDUUUUUNNNNUUUUUMMMMUUUUUUUUMMUKKOOOOOOOOOOOOOGGGGGGRRRRRRRRRRRR
YIIIIIICCCCCAAAACCCCCCCCCCOOOCCCCCCNNNNNEDDDDDDDHHHHHFFFFFFFFFFDDCDDDDDDDDDDDDUUUNNNENNUUUUOOOMUUUUUUUUUUUUKKUOOOOOOOOOOOOOGGGGGGRYRRRRRRRRR
BIIIIIICCCCCIAAACCCCCCCCCCOOOCCCCCNNNNNNNDDDDDDUHHHHHFFFFFFFFFFCCCDDDDDDDDDDDDNNNNNNNNNNUWOOOOOUUUUUUUUUUUUUUUOOOOOOOOOOOOGGGGGGGRRRRRRRRRRR
IIIIIIIIICCCCCCCCCCCCCCCCCOOOONCCNNNNNNNNDDDDDDUUUHHHFFFFFFFFFFECDDDDDDDDDDDDDNNNNNNNNNNWWOOOOHHHHUUUUUUUUUUUCOOOOOOOOOOOOOGGGGGGRRRRRRRRRRR
IIIIIIIIICCCCCCCCAAOOOOOOGOOONNNNNNNNNNNNDDDDDDDUUHHHFFFFFFFFFFCCCCDDDDDDDDDDDNNNNNNNNNNNNOOOOOOOHHUUUUUUUUUUCCOOOOOOOOOOGGGGGGGGKKRRRRRRRRX
IIIIIIIIICCCCCCCCAAOOOOGGGUGGNNNNNNNNNNNNNDDDDDDDJJHHFFFFFCCCCCCCCDDDDDDDDDDDDDNNNNNNNNNNYOOOOOOOOLUUUUUUUUITICIYYOOOBOOOGGGGGGGGKKKKRRRRRRR
IIIIIIIIIAAAAAAAAAAAAGOGGGGGGNNNNNNNNNNNZNNDDDDDDJJHHFFFFFCCCCCCDDDDDDDDDDDDDDDDNNNNNNNNNNOOXXXXXXLLLUUUULLIIIIIIIGGOOGGGGGGGGGGGGKKRRRRRRSS
IIIIIIIIIIAAAAAAAAAAAGGGGGGGGGNUNNNNNNNNZZDDDDDDJJJJJFFFFFCJCCCCDMDDDDGDDGGGGGDDNNNNNNNNNNRRFFFXXXLLLLLLLLLLLLLLLIGGGGGGGGGGGLGGKKKKKKKRRRRS
IIIIIIIIIIIAAAAAEAAAAAGGGGGGTTTTTNNNNNNNZZDDDDDRJJJJJFFFFFJJCRDDDMMDDDGGGGGGRGDDGGGGNNNNNNNRFFFFXXLLLLLLLXLLLLLLLIIGGGGGGGGGGGGGKKKKKKSSRRRS
IIIIIIIIIIIIAAEEEEAAAAGGGGGGTTTTTRRNZNZZZZDDDDZJJJJJJFFFFFJJJRDDLMMMMDDGGGGGGGGDGGGGGGNNNNNNFFFFXLLLLLLLLXLLLLLLLIIIIIIGGGGGGGGSKKKKKKSSQRRS
IIIIIIIIAAIIAAEEEEAEAAGGGGGGTTTTTTTZZZZZZZZZZZZJJJJJJFFFFFJJRRRDDMMMMMGGGGGGGGGGGGGTGGNNNNNFFFFJFLLLLLLLLLLLLLLLLIIIIIGGGGGGGGGSSSSSSSSSURUU
IIIIIIIIAAAAAAEEEEEEEEGGGGGGTTTTTTTZZZZZZZZZZZZJJJJJJFFFFFJDDDDDMMMMMXXGGGGGGGGGGGGGGGNNNNNNFFFFFXLLLLLLLXLLLLLLLLLLLGGGGGGGGGGSSSSSSSSUUUUU
ZZZIIIIIDDAAAAAEEEEEEKGGGGGTTTTTTTTTZZZZZZZZZZJJJJJJJFFFFFDDDDDMMMMMMMMEGGGGGGGGGGGGGNNNNNFFFFFFFLLLLLLLLXLLLLLLLLLLLGGGGGGGGGSSSSSSSSSUUUUU
ZZZIIDDDDEEEEAEEEEEEEKKGGGGGTTTTTTETTZZZZZZZZZZZZZZZZZZFFFDDDDMMMMMMEEEEGGGGGGGGGGGGGGNNNFFFFFFFTLLLLLLLLLLLLLLLLLLLLGGGGGGESSSSSSSSSSSSUUUU
ZZZDIDDDDEEEEEEEEEEEKKKKKGTTTTTTTTTTTZZZZZZZZZZZZZZZZZZZFFDDDDDDDMMMEEEEEGGGGGGGGGGFGFFNNFFFFFFTTTLLLLLLLXLLLLLLLLLLLIIAGGGGSSSSSSSSSSSSSUUU
ZZZDDDDDDDEEEEEEEEEEEKKKKGTTTTTTTTZTZZZZZZZZZZZZZZZZZZZZFFDDDDDDDMMEEEZZZZOOGGGGGGGFFFFFFFFFFTTTTYYYLLLLLXLLLLLLLLLLLZZGGGDDDDSSSSSSSSSSSSSU
ZZZDZDDDDDDEEEEEEEEEEKKKKKKKKKUTTTZZZZZZZZZZZZZZZZZZZZZZFFDDDDDDDMEEEEZZZZZOGGGGGGGFFFFFFFFFFFFTTYYYYYYLLHLLLLLLLLLLLGGGGGGGDSSSSSSSSSSSSDSU
ZZZZZDDDDDDEEEEEEEEEEKKKKKKKKKUUUJJJZZZZZZZZZZZZZZZZZZZZZFDDDDDDDMEEEZZZZZDZGGGGGGGBFFFFFFFFFFYZTYYYYYYHHHHHHHLLLLLLLHHHGGGGSSSSSSSSSSSSDDDU
ZZZZZDDDDDDDDEEEEEEEKKKKKKKKKUUUUJJJJZZZZZZZZZZZZZZZZZZZZDDDDDDDDMEDZZZZZZZZZGGGGGBBFFFFFFFFFFYYYYYYYYYHVVHHYHHHXXHHHHFFHWWWSSSSSSSSSDDDDDUU
ZZZZZDDDDDDDDEEEEEEEKKKKKKKKUUUUUJJJJJJZZFFFFZZZZZZZZZZZZSDDDDDDDDDDDZZZZZZZNNNGGGGBFFFFFFFFYYYYYYIIYYYVVHHHHHHHHHHHHHFFHWWWWWSSSSSSSDDDDDDU
ZZZZYYYYDDDDDDDEEEEEKKKKKKKKUUUUUJJJJJZZZZFFFZZZZZZZZZZZZSDDDDDDDDDDZZZZZZZZZNZZZGJJFFFFFFFFFYYYIIIIYYYIHHHHHHHHHHHHHHHHHWWWWWWSWSSNSSDDDDDD
ZZZYZYYAYYDDDDDEEQEEEKKKKKKUUUUUUUJJJZZZZFFFFFFFZZZZZZZZZSSSDDDDDDDZZZZZZZZZZZZZZJJJJFFFFFFFFIIIIIIIYIIIIHHHHHHHHHHHHHHHHHWWWWWWWSSBBSSDDDDC
YYYYYYYYYYDDDDEEFDKKKKKKKKKUUUUUUUUUJZZZZZZFFFFFZZZZZZZZZSSSDDDDDDDDDZZZZZZZZZZZJJJJLFFFFFFFFIIIIIIIIIIIIIHHHHHHHHHHHHHHHHWWWWWWWWBBBSDDDDCC
YYYYYYYYYYDDDDDDDDKKKKKKKKKUUUUUUUUUJUZZZZZFFFFFZZZFRZZZRRSSSDDDDDDDZZZZZZZZZMMZJJJJJFFFFFXFFFIIIIIIIIIIIIIHHHHHHHHHHHHHHHHWWWWWWWBBBBDDCCCC
YYYYYYYYYYDDDDDDDDHHKKKKKKKUUUUUUUUUUUZZZZZFFFFFZZZFRZZZRRRSAADAJDZZZZZZZZZZMMMMJJJJJJXXXXXFXXBIIIIIIIIIIIIHHHHHHHHHHHHHHHHWWWGGCBJBBBBDCCCC
YYYYYYYYYYYDDDDDDHHHHKKKKKKIUUUUUUUUUZZZZZZZFFFFZZZRRZZZRRRRAAAAAAZZZZZZZZWZCMMMJJJJJXXXXXXXXBBIIIIIIIBIIIIRHHHHHHHGHHHHHHHWWGGGCBBBBBBBBCCC
YYYYYYYYYYYYDDDDDHHHNKKKKKKKKUBBBUUUUUUBBBZZZFZZZZZRRZZZRRRRRAAAAAAAZZZWZWWZCCMJJJNNJXXXXXXXBBBBBIIIIHBIBIIRRHHHHHHGGGGGGGGGWGGBCYBBBCCCCCCC
YYYYYYYYYYYYYDDDHHHKKKKKKKKKKKKBBBBBUUUBBBZBZZZZZZZRRZZZRRRYYAAAAAAAAAZWAAWWCCMCNNNNXXXXXXXXBBBBBIIIIBBBBIBBRHHHHGGGGGGGHGGGGGGGCCCBBBBCCCCC
YYYYYYYYYYYYNDDAHAAKKKKKKKKKKKBBBBBBBBBBBBBBZZZZZZZRRZZZRRRRRZAAAAAAAAAAAAWCCCCCCNNNXCXXXXXZBBBBBIIBBBBBBBBBBHHHHVVGGGGGGGGGGGGGCCCBBBCCCCCC
YYYYYYYYYYYYDDDAAAKKKKKKKKKKKKBBBBBBBBBBBBBIIZZQZRRRRZZZRRRVVAAAAAAAAAAAAAACCCCCCNNNCXXXXXBBBBBBBBIBBBBBBBBBBBHHHVVGGGGGGGGGGJGGCCCCCCCCCCCC
YYYYYYYYAAYYAAAAAAAKIIKKKKKPPPPBBBBBBBBBBBBIIQQQRRRRRRRRRRVVVVAAAAAAAAAAAAAACCCCCNNNCXXXXXNNPBBBBBBBBBBBBBBBBBBHHHVGGGGGGGGGGGUGCCCCCCCCCCCC
XXYYYYYYAAAAAAAAAAAKKIKIKKKPPPPBBBBBBBBBBBBIIIQRRQRRRRRRRRVVVVAAAAAAAAAAAACCCCCCCCNNXXNNNNNNNNNBBBBBBBBBBBBBBBHHGHHGGGGGGGGGGGGMCCCCCCCCCCCK
XXYYYYYYAAAAAAJJAAAAKIIIKKKPPPPBBBBBBBBBBBBIIQQQQQQRRRQQRVVVVVAAAAAAAAAAACCCCCCCCCNNNXNNNNNNNNBBBBBBBBQBBBBBBBHGGGMGGGGGGGGGGGGMMCCCCCCCCCCK
XXYYYYYAAUAAAAJJJJAKKKKKKKPPPPPPBWBBBBBBBBIIIIQQQQQRRQQQQQVVVVAAAAAAAAAAACCCCCCCCNNNNNNNNNNNNBBBBBBBBBQQBBBBBBBGGTMMMGGGGGGGGMMMCCCCCCCCCCCK
XXXYYYPUUUUJAJJJJJAAAKKKKKPPPPPPPBBBBBBBBBIIIIQQQQQQQQQLQVVJVVVAJAAAAAAAACCCCCCCCNNNNNNNNNNNNNBBBBBQQQQQZBBBBBBBGTMMMMMMMMGGGGMMCCCCCCCCCCCK
XXYYMMUUUUUJJJJJJJJJAAKAKKPPPPPPPBBBBBBBBOOIIIOQQQQQQQQLLLVJJJVAJJJAAAAZZCCCCCCCNNNCNNNNNNNNNJBBBBBBQQQQQBBBBBBTTTMMMMMMMMGNNNCCCCCQDCCQKKKK
XYYYMYYUUUUJJJJJJJJJJAAAAKPPPPJJJBBBJBBBNOOOOOOYOOOQQLQLLLVJJJJJJJJJAGZZZCCCCCCCCCNCNNNNNYYNNJQQBQQQQQQQQQQBBBBBTMMMMMMMMMNNNQSQCXQQQQQQKKKK
YYYYYYYIUUUJJJJJJJJAAAAAAKPPPPJJJJJBJBBOOOOOOOOOOOOQQLLLLLLJJJJJJJJJJJZZZZCCCCCCCCCCCNNNYYZNQQQQQIQQQQQQQQBBBBYMTTQMMMMMMNNNNQQQQQQYYQQQKKKK
OOOYOOOUUUUJJJJJJJJJAAAKKPPPPJJJJJJJJJBOOOOOOOOOOOOLQLLLLLLLJJJJJJJJJJZZZZZCCCCCCCCCNNYYLYZMAQQQQQQQQQQQQQBBBYYYTTQQMMMMNNNNNQQQQQQYQQQQKKKK
OOOOOOUUUUUJJJJJCJJCCCCKKKKPPJJJJJJJJJOOOOOOOOOOOOOLLLLLLLLLLJJJJJJJJJZZZCZCCCCCCCCCYNYYYYMMMMQMLQQQQQQQQQBBYYYYYQQQQQMMMNNNNQQQQQQQQQQQKKKK
OOOOOUUUUUUUUCCCCCCCCCKKKKKKKKJJJJJJJOOOOOOOOOOOOOLLLLLLLLLLLJJJJJJJZZZAZCCCCCCCCCCCYYYGGMMMMMMMMQMQQZQQQBBYYYYYYYQQQQMMMMMMNQQQQQQQQQQQKKKK
OOOOUUUUUUUUUCCCCCCCCCCKKKKNKKMJJJJOJJOOOOOOOOOOOOOLNLLLLLLLTJJJJJJZZPZAZCCCCCCCCCYYYYYYGGMMMMMMMMMZZZZZQYYYYYYQQQQQQQQQMMMMNQQQQQQQQQQQQQQQ
OOOOOUUUUUUCCCCCCCCCCCCKKKKKKKJJJJOOOOOOOOOOOOOOOOOOOULLLLLLLJJJJJJZZPAAZCCCCCYYCYYYYYYYGGMMMMMMMMMZZZZZVVVVVYYQQQQQQQPPMOOMQQQQQQQQQQQQQBBB
OOOOUUUUUUUUCCCCCCCCCCKKKKKKKKKKJJJCOOOOOOOOOOOOOOOOUUULLLLLJJJJJJJAAAAAZCCCCCCYYYYYYYYYYGGMMMMMMMMZZZZZVVVVVZZQQQQQPPPPOOOOQQQQQQQQQQQQQBBB
OOOOUOUUUUUUCCCCCCCCCKKKKKKKKKJJJJJPYPOOOOOOOOOOOOOUUUUUUVJJJJLLLLLLLLLLACCCCCCYYYYYYYYYYGMMMMMMMMZZZSZZZVVVZZZQQQQPPPPPOQQQQQQQQQQQQQQQEEEB
OOOOOOUUUUUCCCCCCCCCCKKKKKKKKKLLFJPPPPPOOOOOOOOOOPOUUVVVVVOOJJLLLLLLLLLLAACCCYYYYYYYYYYYGGMMMMMMMZZZZZZZZZVZZZZQQQPPPPPPOOQQQQQQZQQQQEEEEEBB
OOOOOOOUUUUUMCCCCCCCCKKKKKKKKKKLFAAPPPPOOOOOOOPPPPTVVVVVVVJJJJLLLLLLLLLLAAAAYYYYYYYYYYYYYYMMMMMMMZZZZZZZZZZZZZZZZQQPPPPPZOOQQQZZZQQQZEEEEEBB
OOOOOOUUUUUMMCYYCCCKKKKKKKKYKKKKFFPPPPPPPOOOOOPPPPTFTVVVVVVVJJLLLLLLLLLLAAUUYYYYYYYYYYYYYYMMNNMMMMZZZZZZZZZZZZZZZQQQPPPZZZZZZZZZZZZZZZEEEEEB
OOOOOOOUOOOOOOYZKKKKKKKKKKKYKYFFFFPPPPPPPPPGGTTPPPTTTVVVVVVVVVLLLLLLLLLLAUUUUYYYYYYYYYYYYNNNNMMMMZZZZZZZZZZZZZZZZZPPPPPPZIZZVZZZZZZZZZZZEEEB
OOOOOOOOOOOOOUZZKKKKKKKKKKYYYYYYFYYPPPPPPPPPGTTTTTTGTVVVVVVVVVLLLLLLLLLLAUUUYYYYYYYYYYYYRRRNNMMMLZZZZZZZZZZZIZZPCPPPPPPPZZZZZZZZZZZZZZZZBBBB
OOOOOOOOOOOOOOZZKKKKKKKKYYYYYYYYYYPPPPPPPPPPGTTTTTTTVVVVVVVVVVLLLLLLLLLLAUUUYYYYYYYYYYRRRRWWWMMWWKZZZZZZZZZZZZIPPPPPPPPPPZZZZZZZZZZZZZZZZBBB
OOOOOOOOOOOOOZZKKKKKKKGKKKZYYYYYYYPPPPPPPPPPTTTTTTTTVVVVVVVVVVLLLLLLLLLLAAUUYYYYYYYYYYRRRRWWWWWWWZZZZZZZZZZZGZZPPPPPPPPPPPPPMZZZZZZZZZZZBBBB
NOOOONNNOOOOZZZKKZKKKKKZKZZYYYYYYYYYPPPPPDDPTTTTTTTTTTTVVVVVVVLLLLLLLLLLAAEEYYYYYYRYYYRRWWWWWWWWZZZZZEEEZZZZZZIIPPPPPPPPPPPPPZZZZZZZZZZZBBBB
NNNNNNCOOOOOOOZZZZZZZZZZZZZZZZYYVVVYYYPPPTTTTTTTTTTTTTVVVVVVVVVVVEEEEAEEAAEEYYYYYYRRRYRWWRWWWWWWIZZZZEEEEEEOZIIIIIPPPPPPPPPPPWWZZZZZZZBZBBBB
NNNNNCCOOOOOOZZZZZZZZZZZZZZZZZVYVVYYYYYPPTTTTTTTTTTTTOOOOOVVVVVVVEEEEEEEEEEEEERRRRRRRRRRRRRWWWWWIIIZEEEEEEEEEIIIIIPPPPPPPPPPPWZZZZZZZZBBBBBB
NNNNNNNOOOOOZZZZZZZZZZZZZZZVBZVVVVYYYYYYYTTTTTTTTTTTTOOOOOVVVVVVVEEEEEEEEEEEEEERRRRRRRUUUURWWWWWIIIEEEEEEEIEIIIIPPPPPPPPPPPPZZZZZZZJWZBBBBBB
NNNNNNMOOOZZZZZZZZZZZZZZZZZVBBVVVVYYYYYYYTCCTTTTTTTTTOOOOKVMMVVVEEEEEEEEEEEEEEERRRRRRRUUURRRRWWIIIIIEEEEEEDIIIIIPPPPPPPPPPVZZZZZZZBJWZBBBBBB
NNNNNNNIIOZHZZZZZZZZZZZZZZZVVBBVVVVVYYYYYYCCTTTTTKKKOOOOMMMMMVVVEEEEEEEEEEEEEERRRRRURRUXUUURRWRIIIIIIEEEZDDIDIIPPPPPPPPPVVVCCCCBZZJJBBBBBBBB
NNNNNNPIIVVHHHHZZZZZZZZZVVVVOLLVVVVVYYYYJYCCCCTTTKKOOOOOMMMMMVVVVVVEEEEEEEEEERRRRRRUUUUUUUURRRRRRRIIIEEEEDDDDDDVPVVVVVVVVVCCCCCBIJJJJJJBBBBB
NNNNNNPIIHHHHHHHZZZZZZZZZVVVLLXVVVVVVYDYYGGCTTTKKKKKOOOMMMMMIVVVVVVEEEEEEEERERRRSRRRUUUUUUGURRRRHHIIIEEDDDDVADDVVVVVVVVVVVCCCCCBIBDJJJJBBBBB
NNNNDNPPPHHHHHHHZZZZZZZZZVVVVLLVVVVVVJGOYGGGTTTGKKKKOOOKKMMMXXXXVVVJEJEJJJERRRRRSRRRUUUUUUUUHRRRHIIIIIDDDDVVVDDVVVVVVVVVVVCCCCBBBBJJBBBBBBBB
NNNNNPPPPHHHHHHHZHZZZZZZZVVVVLLLVVVVVVGGGGGGGGGGGKGKKKKKXMTTXXXXXJJJJJJJJJDDRSSSSRUUUUUUUUUUHHHHHHIIIIDDDDVVVVDVVVVVVVVVVVCCCCCBBBBBBBBBBTBB
NNNNOPPPPHHHHHHHHHHHHZZZVVVVVVVVVVVVMMGTGGGGGGGGGGGKKXXXXXXXXXXXXXJJJJJJDJDDSSSSSRSUUUUUUUHUHHOHHHIIIIIDDDDVVVVVVVVVVVVVVVHCCHCBBBBBBBBTTTBB
NNNNOPPPHHHHHHHHHHHHHHHLLVVVVVVVVVVVMMMGGGGGGGGGGGGKKXXXXXXXXXXXXXXXJJJJDDDDESSSSSSUUUUUUUHHHHHHHHIEIIDDDDDVVVVVVVVVVVVVVHHCHHCBBBBBBBTTTTBB
NNNNOPOOOHHHHHHHHHHHHHHLVVVVVVVVVVVVMQQVGRGGGGKGGKKKKXXXXXXXXXXXXXXJJJJDDDDDSSSSSSSSUUUUUHHHHHHHHHHEIIKKKKKVVHVVVVVVVVVVHHHHHHHFBBBBBBBTTTTT
ONNNOOOOOOHHHHHHHHHHHHHLVVVVVVVVVVVVQQQQQQFQGGKKKKKKKXXXXXXXXXXXXXXXXJJJJDDDSSSSSSSSSUUUUUHHHHHHHHHIIIKKKKKKRRRVRVVVVVVHHHHHHHHFRBBBBBBTTTTT
OOOOOOOOHHHHHEHHHHHHHHHVVVVVVVVVVVVQQQQQQQQQQQQQKKKKXXXXXXXXXXXXXXJJJJJJJJJDSSSSSSSSSUUUUUUHHHHHHHHHOIKKKKKKRRRSRVVVVVVHHHHHHHHHRBRBBKKTTTTT
OOOOOOOOOHHHHHHHHHHHHHHHVVVVVVVVVVVQQQQQQQDDQXQXKKKKKXXXXXXXXXXXXXJJJJJJHHHHBSHSSSSSSUUUUUUUHHHHHHHOOOKKKKRRRRRRRRVVVHHHHHHHHHHHRRRUBKKTTTTT
OOOOOOOOHHHHHHHHHHHHHHHHHHHVVVVVVQVQQQQQQQQDQXXXXXKXKXXXXXXXJXXXXXXXJJJJHHHHHHHHSSSSSUUUUUUUHHHHOOOOOOKKKKRRRRRRRRRVVHHHHHHHHHHRRRRUUTTTRTTT
OOOOOOOOHHHHHHHHHHHHHHHHHHHVVNVVVQQQQQQQQQQQQXXXXXXXXXXXXXXXJXXXXJJJMMJJHHHHHHHHHHSUUUUUUUUUHHHHHDDDODKKRRRRRRRRRRRRHHHHHHHHHHHRRRRRRRRRRTTT
OOOOOOOOHHHHXHHHHHGGHHHHHHHHHHQQQQQQQQQQQQQQQQXXXXXXXXXXXXJJJXXXXJJMMMJJJHHHHHHHHHHHHUUUUUUHHHHHHDDDDDKKRRRRRRRRRRRRRHHHHHHHHHHHRRRRRRRRRRTT
OOOOOOOOOOOHXHGGGGGGHHHHHHHHHQQQQQQQQQQQQQQHHQXXXXXXXXXXXJJJJJJJJJJMMMMJHHHHHHHHHHHHUUUUUUHHHHHHHHDDKKKRRRRRRRRRRRRRHHHHHHTTHHHRRRRRRRRRRRTT
OOOOOOOOOOOOXGGGGGGGHHHHHHHHHHQQQQQQQQQQQQQHHQXXXXXXXXXXXJJJJJJJJJJMMMJJJJJHHHHHHHHHHHHUUUUDDDDDDDDDDDKRRRRRRRRRRRRRRHTTHTTTHHDRRRRRRRRRRRRT
OOOOOOOOOOOCXXGGGGGGHHHHHHHHHHQQQQQQGQQQQQQHHHHXXXXXXHXXJJJJJJJJJJMMMMMYYYYYHHHHHHHFHHHUUUDDDDDDDDDDDDKRRRRRRRRRRRRRRRTTTTTHHRDRRRRRRRRRRRRT
OOOOOOOOCOCCCCIGGGGGHHHHHHHHHHHQGQQQGGGGQQQHHHHXXXXXXHHXJJJJJJJJJMMMMMMYYYYYHHHHHHFFFFUUUUUUFDDDDDOOODDDRRRRRRRRRRRRRRTTTTTRRDDRRRRRRRRRRRTT
OOOOOOOOCCCCCCCGGGGJJHHHHHHHHHGGGGGGGGSGQQQHHHXXXXXXHHHXJJJJJRJJMMMMMMMMYYYYHHHFFFFFFFFUUUUBFDDOODOOODDDRRRRRRRRRRGGGTTTTTTDDDRRRRRRRRRRRRRT
OOOOOOOOCCCCCCCGGGGJJJHHHHHHHHYGGGGGGGGGQQHHHHHXHHHHHHHXYMMJJJJJMMMMMMMMYYYYYHHFFFFFFFFFFFFFFOOOOOOOOOODDRRRRRRRGGGGGGGTTTTWDDDRRRRRRRRRRRRR
OOOOOOOOCCCCCCCGGGGJJHHHHHHGGGGGGGGGGGGGHHHHHHHHHHHHHMMMMMMKJJJJJMMMMMMMYYYYTHHFFFNFFFFFFFFFFUUUOOOOOODDDDRRRRRGGGGGGGGGGGJDDDXJJRRRRRRRRRRR
OOOOOOGOCCCCJJCJJJGJJJHHHHHZGGGGGGGGGGGGGHHHHHHHHHHHHHMMMMMJJMJMMMMMMMMYYTTYTTXXFNNNFFFFFFCFUUUUUUOOOOODDDRRRRRRGGGGGGGGJJJJJJJJRRRRRRRRRRRR
OOOOOOGCCCCJJJJJJJJJJJHHHHHGGGGGGGGGGGGGGGHHHHHHHHHHHHMMMGMMMMMMMMMMMMMTTTTTTTXXFNNFFCFFFHHFFUUUUUOOOOODDRRRRRRRRGGGVVJJJJJJJJJJJJJRRRRRRRRR
OOOOOOGCCJJJJJJJJJJJJJJHHJHGGGGGGGGGGGGGGGHHHHHHHHHHHHMMMMMMMMMMMMMMMMMTTTTTTTXXFNNFFCFFHHHBFUUUUUOOOOOODRRRRRARGGVVVYJJJJJJJJJFJJRRRRRRRRRR

10
day_12/example_data.txt Normal file

@ -0,0 +1,10 @@
RRRRIICCFF
RRRRIICCCF
VVRRRCCFFF
VVRCCCJFFF
VVVVCJJCFE
VVIVCCJJEE
VVIIICJJEE
MIIIIIJJEE
MIIISIJEEE
MMMISSJEEE

@ -0,0 +1,4 @@
AAAA
BBCD
BBCC
EEEC

171
day_12/solution.go Normal file

@ -0,0 +1,171 @@
package day_12
import "strings"
const Empty = '.'
type Map [][]rune
type Point struct {
x, y int
}
type Visited map[Point]bool
func (m Map) InMap(x, y int) bool {
return x >= 0 && x < len(m[0]) && y >= 0 && y < len(m)
}
func (m Map) At(x, y int) rune {
if m.InMap(x, y) {
return m[y][x]
}
return Empty
}
func (v Visited) At(x, y int) bool {
_, visited := v[Point{x, y}]
return visited
}
// task:https://adventofcode.com/2024/day/12
func SolveBasic(input string) int {
farmMap := loadMap(input)
visited := Visited{}
sum := 0
for y, row := range farmMap {
for x, value := range row {
p := Point{x, y}
field := Visited{}
if _, present := visited[p]; !present {
visit(farmMap, field, x, y, value)
area := len(field)
parameter := 0
for point := range field {
// mark as visited to not visit it more than once
visited[point] = true
if _, present := field[Point{point.x - 1, point.y}]; !present {
parameter++
}
if _, present := field[Point{point.x + 1, point.y}]; !present {
parameter++
}
if _, present := field[Point{point.x, point.y - 1}]; !present {
parameter++
}
if _, present := field[Point{point.x, point.y + 1}]; !present {
parameter++
}
}
sum += area * parameter
}
}
}
return sum
}
// task:https://adventofcode.com/2024/day/12#part2
func SolveComplex(input string) int {
farmMap := loadMap(input)
visited := Visited{}
sum := 0
for y, row := range farmMap {
for x, value := range row {
p := Point{x, y}
field := Visited{}
if _, present := visited[p]; !present {
visit(farmMap, field, x, y, value)
area := len(field)
parameter := countEdges(farmMap, field)
for point := range field {
// mark as visited to not visit it more than once
visited[point] = true
}
sum += area * parameter
}
}
}
return sum
}
func countEdges(farmMap Map, field Visited) int {
borders := map[BorderPoint]bool{}
edges := 0
for y, row := range farmMap {
for x := range row {
if field.At(x, y) {
if !field.At(x-1, y) {
if !borders[BorderPoint{x, y - 1, LEFT}] {
edges++
}
borders[BorderPoint{x, y, LEFT}] = true
}
if !field.At(x, y-1) {
if !borders[BorderPoint{x - 1, y, TOP}] {
edges++
}
borders[BorderPoint{x, y, TOP}] = true
}
if !field.At(x, y+1) {
if !borders[BorderPoint{x - 1, y, BOTTOM}] {
edges++
}
borders[BorderPoint{x, y, BOTTOM}] = true
}
if !field.At(x+1, y) {
if !borders[BorderPoint{x, y - 1, RIGHT}] {
edges++
}
borders[BorderPoint{x, y, RIGHT}] = true
}
}
}
}
return edges
}
type Direction int
const (
LEFT Direction = iota
TOP Direction = iota
RIGHT Direction = iota
BOTTOM Direction = iota
)
type BorderPoint struct {
x, y int
direction Direction
}
func visit(farmMap Map, field Visited, x int, y int, value rune) {
if _, visited := field[Point{x, y}]; visited {
return
}
if farmMap.At(x, y) == value {
field[Point{x, y}] = true
visit(farmMap, field, x-1, y, value)
visit(farmMap, field, x+1, y, value)
visit(farmMap, field, x, y-1, value)
visit(farmMap, field, x, y+1, value)
}
}
func loadMap(input string) Map {
input = strings.ReplaceAll(input, "\r", "")
topographicMap := Map{}
for _, line := range strings.Split(input, "\n") {
topographicMap = append(topographicMap, []rune(line))
}
return topographicMap
}

34
day_12/solution_test.go Normal file

@ -0,0 +1,34 @@
package day_12_test
import (
"advent_of_code_2024/day_12"
_ "embed"
"testing"
)
//go:embed example_data.txt
var ExampleData string
//go:embed example_data_01.txt
var ExampleData01 string
func TestBasicSolutionExample(t *testing.T) {
result := day_12.SolveBasic(ExampleData)
if result != 1930 {
t.Fatalf("Expected 1930 received %d", result)
}
}
func TestComplexSolutionExample(t *testing.T) {
result := day_12.SolveComplex(ExampleData)
if result != 1206 {
t.Fatalf("Expected 1206 received %d", result)
}
}
func TestComplexSolutionExample01(t *testing.T) {
result := day_12.SolveComplex(ExampleData01)
if result != 80 {
t.Fatalf("Expected 80 received %d", result)
}
}

@ -12,6 +12,7 @@ import (
"advent_of_code_2024/day_09"
"advent_of_code_2024/day_10"
"advent_of_code_2024/day_11"
"advent_of_code_2024/day_12"
_ "embed"
"fmt"
"os"
@ -65,6 +66,10 @@ func main() {
fmt.Printf("Day 11. Basic: %d\n", day_11.SolveBasic(Day11Data)) //
case "11-complex":
fmt.Printf("Day 11. Complex: %d\n", day_11.SolveComplex(Day11Data)) //
case "12-basic":
fmt.Printf("Day 12. Basic: %d\n", day_12.SolveBasic(Day12Data)) //
case "12-complex":
fmt.Printf("Day 12. Complex: %d\n", day_12.SolveComplex(Day12Data)) //
}
}