diff --git a/2023/day1/solution.c b/2023/day1/solution.c index d9f68b2..5e631ae 100644 --- a/2023/day1/solution.c +++ b/2023/day1/solution.c @@ -59,7 +59,7 @@ static int parse_digit_right(const char * start, const char * end, digit_parser_ return -1; } -int solve(const char * input, int length, digit_parser_t parser) +static int solve(const char * input, int length, digit_parser_t parser) { const char * end = input + length; diff --git a/2024/day11/solution.c b/2024/day11/solution.c index a066850..21f9609 100644 --- a/2024/day11/solution.c +++ b/2024/day11/solution.c @@ -147,7 +147,7 @@ static int parse_input(const char * input, int length, static int64_t solve(const char * input, int length, int max_depth) { - static struct cache cache; + struct cache cache; int64_t stones[20]; int count = parse_input(input, length, stones); diff --git a/2024/day12/input.txt b/2024/day12/input.txt new file mode 100644 index 0000000..31eda29 --- /dev/null +++ b/2024/day12/input.txt @@ -0,0 +1,140 @@ +CCCCCCCCCBBBMMGGGGGGGGGGGGGYWWWWWWWWWWWWOOOOOOOOOOOOOOOOHLLHHHHHHHHHHTHUUUULBBBBBBBBBBBBPPPPPPPPPPPKKWWWWCCCWWWWWWWWWWWWWWWWWWWWEEEEYNNNYYLL +CCCCCCCCCBBBBBBGGGGGGGGGGGGGWWWWWWWWWWWWOOOOOOOOOOOOOOOOHHHHHHHHHHHHHHHHUUULBBBBBBBBBBBPPPPPPPPPPPPPPPWWWCCCWWWWWWWWWWWWWWWWWWWBEEEYYYNYYLLL +CCCCCCCBBBBBBBBGGGGGGGGGGGGWWWWWWWWWWWWWOAOOOOOOOOOOOOOOHHHHHHHHHHHHHHHHUUULLLLLBBBBBBBBPSPPPPPPPPPPPMMWWCCCCCCCWWWWWWWWWWWBWWWBBBBYYYYYYYLL +CCCCCCCCBBBBBBBGGGGGGGGAAGWWWWWWWWWWWWWWWWOOOOOOOOOOOIOOHHHHHHHHHHHHHHHHUUULLLLLLLBBBJBJSSPPPPPPPPPPMMMMMCCCCCCCWWWWWWWWWBBBBBWBBBBYYYYYYYYY +CCCCCCCCCBBBBBBGGGGGGGGGAAWPPWWWWWWWWWWWWWOOOOOOOOOIIIOHHHHHHHHHHHHHHHHUULLLLLLLLBBBBJJJSSPPPPPGGGGPEEMCCCCCCCCCCCCCCCBBWWBBBBBBBBBBYYYYYYYY +CCCCCCCCCBBBBBBBGGGGGGGGAAASSWWWWWWWWWWWWWOOOUOOOIIIIIIIYHHHHHHHHHHHHHHHHHNLLLLLLLBBBBJJJJVPPPPGGGGPEEMCCCCCCCCCCCCCCCBBBBBBBBBBBBBYYYYYYYYY +CCCNNNCCBBBBBBBBGEGGGGGAAAAASWWWWWWWWWWWWWXOOOOIIIIIIIYYYHHHHHHHHHHHHHHHGGLLLLLLLLLBBJJJJJJPPPPGGGGPMEMCCCCCCCCCCCCCCCBBBBBBBBBBBBBYYYYYYYYY +CCNNNNNBBBBBBBBBBEBSGGGGGGSSSWWWWWWWWUWXXXXXXOOIVVVIIIIIYHHHYYHHHYYYYHHHGLLLLLLLLLLLLJJJJJPPPPPGGGGPMMMMMMMCCCCCCCCCCBBBBBBBBBBBBYYYYYYYYYYM +NNNNNNNVVVBBBBBBBBBSGGSSSSSSSSWWWWWWWUWWXXXXXXOVVVIIIIIIYYYYYYYYHYYYYYHHGGLLLLLLLLLLLJJJJJJJPPPGGGGPMMMMMMMCCCCCCCCCCBBBBBBBBBBBBBBYYYYYYMMM +NNNNNNNVVVBBBBBBBBBSGGSSSSSSSDDWWWWWWWWXXXXXXXOOIIIIISIIYYYYYYYYYYYYDYYGGGLLLLLLLLLLLJJJJJJJPGGGGGGPPPMMMMMCCCCCCCCCCBBBBBBBBBBBBBBYYYYYYMMM +NNNNFNNNNBNBBBBBBBSSSSSSSSSSSSSSWDWWUUNXXXXXXXXXIIIIISSSSYYYYYYYYYYYYYYGGGLLLLLLLLJJJJJJJJJJGGGGGGGPDMMMMMMCCCCCXWWWWWBBBBBBBBBBBBBYYYYYMMMM +NNNNNNNNBBBBBBBBBBSSSSSSSSSSSSSSSDDDNUNNNXXXXXXXIIXIISSSYYYYYYYYYYYYYYYGGGGGLLLLLLLJJJJJJJJJGGGGGGGPDDMDMMMXXXXXXXXXWWWWWWBBBBBBBBBYYYYMMMMM +NNNNNNNBBBBBBBBBBBSSSSSSSSSSSSSSSSNNNNNNNNXXXXXXXXXXXXSSSQQNYYYYYYYYYYGGGGGGLLLLLLLLJJJJJJJDGGGGGGGDDDDDMMDXXXXXXWWWWWWWWBBBBBBBBBHYYYMMMMMM +NNNNNNAAXXXBBBBXXBBBSSSSSSSSSSSSSENNNNNNNNNNXXXXXXXQXXQQQQQNYYYYYYYYYYYGGGGGGLLLLLLLJJJJJJJDGGGGGGGDDDDDDDDXXXXXWWWWWWWWWWWBBBBBBHHYYYMMMMMM +NNNNNNNNXXXXXXXXBBBSSSYSSSSSSSSSSNNNNNNNNNNZXXXXXXEQQQQQQQQYYYYYYYYYYYYGGGGGLLLLLLLGJJJJJJJJGGGGGGGDDDDDDXXXXXXXXWWWWWWWWWWBBBBBBHHHYYMMMMMM +NNNXXNNNXXXXXXXXXXXYYYYYSSSSSSSSIIINNNNNNNNXXCXXXXEQQQQQQQQQYYYYYYYYYYYGGGGGGGGLGLGGJJJJJJJDGGGGGGGDGDDDGGXXXXXXCWWWWWWWWWWWWABOOHHHYMMMMMMM +SNNSXNNNRXXXXXXXXXXXYYYYYSSSSSSIIIINNNNNNNNXXCCXEEEQQQQQQQQYYYYYYYYYYYYGGGGGGGGGGGGJJJJJJJJUGGGGGGGGGGGGGGGGGGXCCCWCCWWWWWAAAAAOOHHHHMMMMMMM +SSSSXSNNRXXXXXXXYYYYYEYNYSSSMHSIIIIINNNNNNNNCCCCTTEQYYQQQQQQYYYYYUYYYYYGGGGGGGGGGGJJJJJJJJJJGGGGGGGGGGGGGGGGGGXGCCCCCWWWWWAAAAAHOHHHHMMMMMMM +SSSSSSNNSJJJXXXYYYYYYYYYMSMMMMGMIMIINNNNNNNCCCCCTTEYYYQYQQQQQQMYUUYUYYGGGGGGGGIIIJJJJJJJJJJUGGGGGGGGGGGGGGGGGGDGCCCCWWWWWWAAAAAHHHHNMMMMMMMM +SSSSSSSSSSSJXXXYYYYYYYYYMSMMMMMMMMIIINNNNNNCCCCCTTEYYYYYYQQQQBBBUUYYYYYOOOOGGGIIIPJJJJJJJJUUGGGGGGUGGGGGGGGGGGGGCCCCCCAAAAAAAAAHHHHNMMMMMMMM +SSSSSSSSSSSJJJJYYYYYYYYYYMMMMMMMMMIIIINNNCCCCCCTTTTCYYYYQQQBBBBBBUUYYYYOGOOOOGIIIIIIIJJJJUUUGGGGGGGGGGGGGGGGGGGGCCCHHHAAAAAAAAAHHHHNNMMMMMMM +SSSSSSSSSSSSSJJJYYYYYYYMMMMMMMMMMMIIIINNNCSCCTTTTTYYYYYYPPQBBBBBBUUUYGYGGOGGGGIIIIIIIJJIIUUUGGGGGGGGGGGGGGGGGGCGGCCCCCAAAAAAAAAHHHNNAAAMMQMM +SSSSSSSSSSSJJJJJYYYYYYYYMMMMMMMMMIIISISSSSSCCTTTTTYYYYYYPPPPBBBBUUUUUGGGGGGGGGIIIIIIIIJIIUUUGGGGGGGGGGGGGGGGGGCCGCCCCCAAAAAAAAAKKKAKAHAMMQMY +SSSSSSSSSSSSJJDJJJYYYYYMMMMMMMMMMOOSSSSSSSSSCTETTTTYYYPYPPPPPPBBBBUGUGGGGGGGYYIIIIIIIIIIIUUUGGGGGGGGGMMMGGGGGGCCCCCCCAAAAAAAAAAKKKKKHHAAMQMY +SSSSSSSSSSSSJJDJJJYYOOMMMMMMMMMOQOFFFFSSSSSCCCCOOYYYYYPSPPPPBPBBBBGGGGGGGYGGYYIIIIIIIIIIUUUUUUUUUUUUUUMMGGGGGCCCCCCCBAAAAAAAAAAAAKKKHHHHHHYY +SWSSSSSSSSSSJJDJDDYYMOOMMMMMOMOOOOOOSSSSSSSSCCYYYYYYYYPPPPPBBBBBBBIIIIGGGYYYYYYIIIIIIIIIIIIUUUUUUUUUUMMMMMMGKCCKKCCCCAAAAAAAAAAAAKKKHHHHHHYY +SSSSSSSSSSSSJDDDDDDYMMMMMMMMOOOOMOOOOOSSSSSNCCZZZZYYYYPPPPPBBBBBBBBBBBWYGAAAAAAAIIIIIIIIIIUUUUUUUUUUUMMMMMKKKKCKKCCCBAAAAAAAAAAAAKKHHHHHHYYY +SSSSSSSJSSSSJDDDDDDMMMMMMMMMMGGOOLOCSSSSSSSSCCZZZZZYYYEEPPPBBBBBBBBBBBBYWAAAAAAAIIIIIIIIIIUUUUUUUUUUUMMMMKKKKKKKCCBBBAAAAAAAAAAAAKHHHHHHPHHY +SSSSSSSSSYYSDDDDDDDDDDMMMMMMMMMMLLSCCSSSSSSZZZZZZZZZYSPPPPPPBBBBBBBBBBBYYAAAAAAAIIIIIIIIIIUUUUUUUUUUUUUKKKKKKKKKKCCBBAAAAAAAAAAAAHHHHHHHHHHY +YYSYSSYYYYYDJDDDDDDDDDMMMMMMMMLLLLSSSSSSSSSZZZZZZZZVSSPPPMPBBBBBBBBBBBBYYAAAAAAAIIIIIIIIIIUUUUUUUUUUUKKKKKKKKKKKKBBBBAAAAAAAAAAAAHHHHHHHHHHH +YYYYSSYYYYYDDDDDDDDDDMMMMMMMMLLLLLSSSSSSSSSSZZZZZVVVSSPPPPBBBBBBBBBBBBYYYAAAAAAABIIIIJJIIIUUUUUURVKKKKKKKKKKKKKKKBBBBAAAAAAAAAAAAHHHHHHHHHHF +YYYYYYYYYYYDDDDDDDDDMMLMMMMLLLGGLLLLSSSSSSSSZZZZZVVVVSVBPBBBBBBBBAAAAAAAAAAAAAAABIIIIJJJIRRRRRRRRRRRKKKKKKKKKKEKKBBBBAAAAAAAAAAAAHHHHHHHHHHF +YYSSSYYYYYYDDDDDDDDDDMLLLLLLLLGGGGLLSSLLSSSZZZZZZVVVVVVBBBBBBAAAAAAAAAAAAAAAAAAABBIIRRRRRRRRRLRRRRRRKKKKKKKKKKKKWWWBBAAAAAAAAAAAAHHHHHHHHFFF +SSSSSSYAAYYYYDDDDDDDDDDLLLLLGGGGGGGLLLLLLSSZZZZZZVVVVVBBBBBBBAAAAAAAAAAAAAABBYYBBRIIRRRRRRRRRRRRRRRKKKKKKKKKKKKKWWWWWAAAABBBBBBBCHHHHHHAAFFF +SSSSSAAAAYAYYYYDDDDDDDDDDZZZGGGGGGGGGGLLLSSZZZZZZVVVFVBBBBBBBAAAAAAAAAAAAAABBBBBBRRRRRRRRRRRRRRRRRRKKKKKKKKKKKKKWWWWAAAAABAABIBHHHHHHHHAAAFF +SSSSSAAAAAAAYYYYDDDDDDDDZZZZGGGGGGGGGGGLLSZZZZZZVVVVVBBBBBBBBAAAAAAAAAAAAAABBBBBBBNRRRRRRRRRRRVRRRRRKKKKKKKKKKKWWWWWAAAAAAABBIIIHHHHHAAAAAAA +SSSAAAAAAAAAAAAZDDDDDDDDZZZZGGGGGGGGGGGLLZZZZZZZZVVVVVBBBBBBBAAAAAAAAAAAAAABBBBBBBBRRRRRRRRRRRVRRRRRRKKRKKKRKKWWWWWWWAAAAAAAIIIIHHHHHMAAAAAA +SSSAAAAAAAAAAADZKKKDDDDZZZZZGGGGGGGGGGGGLZYKKZKUVVVVVVBBBBBBBAAAAAAAAAAAAAABBBBBBRRRRRRRRRRRRVVVRRRRRRRRRRRRRWWWWWWWAAAAAAAAAIIIIISSAAAAAAAA +SSSAAAAAAAAAAKKKKKKKDDZZZZZZZGGGGGGGGGGGGGKKKKKUUVVOODOOBBBBBBBBBJJJJJJBBBBBBBBBBBRRRRRRRRRRRVVVRRRRRRRRRRRRWWWWWWWAAAAAAAAAAIIIISSSSAAAAAAA +SSSAAAAAAAAAAKKKKKKKZZZZZZZZZVGGGGGGGGGGXKKKKKKUVVOOOOOOBBBBBBBJJJJJJJJJJBBBBBBBBBCCRRRRRRRRRVVRRRRRRRRRRRRRWWWWWWWAAAAAAAAAAIIIIIIAAAAAAAAA +SSSAAAAAHHHHHHHHHHHHHHHHHHZZZVGGGGGGGGGKKKKKKKKUVVOOOOOOCBBBBBBBJJJJJJJJJBBBBBBBBCCRRRRRRRRIRRRRRRRRRRRRRRWWWWWWWWWAAAAAAAAAAIIIIIIAAAAAAAAA +SSSSAAAAHHHHHHHHHHHHHHHHHHZZZZQQGQQGGGQKKKKKKKKVVVOOOOOOCCBBBBBBJJJJJJJJJJJJJJBCCCCRRRCCCCCIIIRRRRRRRRRRRRWWWWWWWWAAAAAAAAVVIIIIIIIOAAAAAAAA +SSSSSSAAHHHHHHHHHHHHHHHHHHZZZZZQQQQQQQQQQKKKKKKKOOOOOOOOCCBBBBBJJJJJJJJJJJJJJJBCCCCCCCCCCCIIKKKRRRYRRRRWWWWWWKWWWKKAAAAAAAAIIIIIIIIIHAAAAAAA +SSSSSSSAABBBBKKKHHHHHHHHHHZZZZZQQQQQQQQQQQKKKKKKOOOOOOOOCCCBBBBJJJJJJJJJJJJJJCBCCCCCCCCCCCCCKKKKKRKRRRRWWWWWWKKKKKKWAAAAAAAIIIIIIIIIHAAAAAAA +SSSSSSSSABBBBBZZHHHHHHHHHHZCCEECCCCQQQQQQQKKKKKKOOOOOOOOOCBBBBBJJJJJJJJJJJJSCCCCCCCCCCCCCCCCKKKKKKKKKKKKWWWGGKKKKKKWWWAATTIIIIIIIYHHHHAAAAAA +SSSSSSSSSSSBBBBHHHHHHHHHHHZZCCCCCCCQQCQQQQNKKNOOOOOOOOOOOBBBBBBBBJJJJJJJJJJSSCCCCCCCCCCCCCCCCKKKKKKKKKKMMMGGYYKKKKKWWWWATTIIIINIIYYHYYAAAAAA +SSSSSSSSSSSSBBBHHHHHHHHHHHKKKCCCCCCCCCQQQNNKKNNOOOOOOOOFFBBBBBBBBJJJJJJJJJJJCCCCCCCCCCCCCKCCKKKKKKKKMMMMMMMGGKKKKKKWWWWTTTTITIIIKYYYYYAAAAJA +SSSSSSSSSSSSSSBHHHHHHHHHHHHHKCCCCCCCCCNNNNNNNNNNOOOOOOOFFFFBUBHHHHHJJJJAJQQJQCCCDCCCJCKKCKKKKKKKKKKMMMMMMMGGGKKKKKKTTTTTTTTTTTTIKYYYYYAYAAAU +SSSSSSSSSFFFFBBHHHHHHHHHHHHHHCCCCCCCYCYNNNNNNNNNNNNOOOORRRRRRTZHZZZJJJJJJQQQQCBCCCCCCCKKKKKKKKKKKKKKMMMMKMGGGKKKKKKTTTTTTTTTTTTTTTYYYYYYYAAU +SSSSSSSSFFFFFBBHHHHHHHHHHHHHHCCCCCYCYYYYYNNNNNNNNNNOONARRRRRZZZZZZZJJJJQQQQQQQCCCCCCCDKKKKKKKMMKKKKKKMMMKMGGGKKKKKKTTTTTTTTTTTTTXTYYYYYYYYYY +SMSSSSSSJFFFFFBHHHHHHHHHHHHHHHCCCCYYYYYYYYYNNNNNNNNNNNRRRZZZZZZZZZZZZJJQQQQQQQQQCCCCDDKBKKBKMMMKKKKKKMMKKKJGGGGGKKKTTTTTTTTTTTTTTTTTTYYYYYYY +YJJSSSSJJFGFFFBHHHHHHHHHHHHHHHCCCYYYYYYYYYNNJNNNNNNNNNVRRRRZZZZZZZZZZQQQQQQQQQQQCCCCCGBBBBBBBMAMKKKKKKKKKCGGGGGKKKKTTTTTTTTTTTTTTTTYYYYYYYYW +YGJJSSSJJJFFJJJHHHHHHHHHHHDLHHHCYYYYYYYYYYYYNNNNNNNNNVVVVRRRZZZZZZZZZQQQQQQQQQQQQQCCCGBBBBGBBMMMKKKKKKKKKCCGGGGKKKKKTTTTTTTTTTTTTTTTYYYYYYYY +YGJSSJJJJJJJJJJHHHHHHHHHHHLLLLLLYYYYYYYYYYYYNNNNNNNNNNVVVRRRRRZZZZZZZQQQQQRQQQQQQQQCGGGGGBGMMMMMMMKKCKKCCCCCZGGKKKKKTTTTTTTTTTTXTTTTYMMYYYYY +GGJJJJJJJJJJJJJJJHHHHHHHLLLLLLLLLYYYYYYYYYYYYNNNNNNNNNVVVRRRRRZZZZZZRQQRRQRRQKKQQQQCQGGGGGGMMMMMMKKCCCKCCCCCCGKKKKKKTTTXXXXXTTTXTTMTMMMMMYYY +GGGGJJJJJJJJJJJJJHHHFHHLLLLLLLLLLYYYYYYYYYYYYNNNNNNNNNNVRRRRRZZZZZZZRRRRRRRRRKKKQQQQQQGGGGGGMMMCMCCCCCCCCCCCCCKKKKKKTTTXXXXXXXXXXXMMMMMMAYYY +GGGGGJJJJJJJJJJJJHHHHHHLLLLLLLLLLYYYYYYWYYWYYYNNNNNNNNSSSRRRRAAZZZZRRRRRRRRRRKEKKQQQQGGGGGGOOOMCCCCCCCCCCCCCCNNNNNNNNNNNNNNNNNNMMMMMMMMMMYYA +GGGGGJJGTTTTJJJJJLLLLLLLLLLLLLLLLLLYWYWWWWWYYNNNNNNNNNSSSSRKAAAZZZRRRRRRRRRKKKKKKQQQQQGFGGGOOOICCCCCCCCCCCCCCNNNNNNNNNNNNNNNNNNXMMMMMMMMMMYA +GGGPPGJGTTTTJTJJJLLLLLLLLLLLLLLLLLYYWWWWWWWWYYYNSNNNNSSSSABAAAAZZRRRRRRRRRRKKKKKNNNNQQFFFFGOOOCCCCCCCCCCCCCCCNNNNNNNNNNNNNNNNNNMMMMMMMMMMMAA +GGGGGGGGTTTTTTTLLLLHLLLLLLLLLLDLLLLWWWWWWWWWYYYSSNNSSSSSSAAAAAAAAARRRRRRRRRRKKKKKNNNNQQFFOOOOOOCCCCCCCCCCCCJGNNNNNNNNNNNNNNNNNNMMMMMMMMMMMAN +GGGGGGGGGTTTTTTTTTTHLSLLLLLLLLDLLLXXWWWWWWWWYYYSNNNSSSSSSAAAAAAALLRRRRRRRRRRRKKRNNNNQQRFFOOOOOOCCCCCCCCCCCCJJNNNNNNNNNNNNNNNNNNMMMMMMMMMNDNN +GGGGGWGGGTTTTTTTFFSSSSSSLLLLLLLLLBWWWWWWWWWWYYYSSSSSSSSSSAAAAAAAAARRRRRRRRRRRRRRNNSSRRRRRRROOOOOOCCCCCCCCJJJJNNNNNNNNNNNNNNNNNNXXXMMMNNNNNNN +GGGGWWWGGTTTTTTFFSSSSSSSLLLLLLLLKBWWWWWWWWWWYYYYSSSSSSSSBJJAAAAAAARRRRRRRRRRRRNNNNNNOORRRRRROOOOOCCCCCCCJJJJJNNNNNNNNNNQQQQXXXXXXXXXXNNLNNNN +GGGWWWWTTTTTTTTTTOSSSSSSBLSSHLLLKKJWWWWWWWWWWYYRRSRSRSBBBJJJAAAAAAARRRRRRRRRRRNNNNNNOOOORRRRRRROOOOOOJJJVJJJJJJJNNNQQQQQQQQQXXXXXXXXXNNNNNNQ +GGGWWWTTTTTTTTKSSSSSSSSSSSSSHLLLKKKWMWWWWWWWWWYRRRRRRBBBBBAAAAEEEAARRRRRRRRRRNNNOOOOOOORRRRRRROOOOOGJJJJJJJJJJJJNNNQQQQQQQQQXXXXXXXNNNNNNNNN +WWWWWWTTTTTTTTTJSSSSSSSSSSSSSKKKKKKWMWWWWWWWWWYRRRRRBBBBBBAAAAEEEEEEERRRRRRRRRRROOOOORRRRRRRRRROOOGGJHJJJJJJJJJJNNNQQQQQQQQQXXXXXXXNXNNNNNNN +WWWWWTTTTTTTTTTTSSSSSSSSSSHKKKKKKKUKMWWWWWWWWKKKKRRBBBBBEEEEEEEEEEEEETRRDDRRRRROOOOOORRRRRRRRRROOGGGGJJJJJJJJJJJJJQQQQQQQQQQQQQQXXXXXNNNNNNN +WWWWWWWTTTTTTTTSSSSSSSSSSSKKKKKKKKKKKWWWWWWWKKKKKRRBBBBBBBBEEEEEEEEETTRRDDRRRRRROOOLOORRRRRRROOOGGGGGJJJJJJJJJJJJCQQQQQQQQQQQQQXXXXNNNNNNNNN +WWWIWWWTTTTTTTSSSSSSSSSSSSKKKKKKKKKYYWWWWWWWWKKKKLRBEBEEEEEEEEEEEEETFTTTDDDTTTRBLLLLLLRRRRRRROOHGGGGGGJJJJJJJJJJJJWQQQQQQQQQQQQQXXXNNNRNNNNN +WWIIIWWWTTLTTTSSSSSSSSSSKKKKKKKKKPPYYWWWWWWWWKKKKLLEEEEEEEEVVVVVEEETTTTDDTTTTTTLLLLLLLLRRRRRRHHHGGGGMJJJJJJJJJJJQQQQQQQQQQQQQQQQQQNNNRRNNNNN +WWIIWWWTTKGTTTSSSSSSSSSKKKKKKKKKPPPPMMMMWWWKKKKLLLLEEEEEEVVVVVVEEEETTTTTTTTTTTTLLLLLLLLRRRIRHHHHGGGGGJJJJJJJJJJQQQQQQQQQQQQQQQQQQQQRRRDDDNNN +IIIIIWWWWGGGVVSSSSSSSSSSKKKKKKKKPPPPMMMMWWKKKKKKLLLLELEEEVVVVVVEEEEEETTTTTTTXLLLLLLLLLLLLLLHHHHHGGGGGGJJJJJJJJQQQQQLLLQQQQQQQQQQQQQQRRDDMMDD +IIIIIIWWGGGGGVVVSSSSSSSSKKKKKKKFEPPMMMMMMMKKKKKLLLLLLLEVVVVVVVVEEEEETTTTTTTTLLLLLLLLLLLLLLLHHHHHHHGGGGJJJJJJJJNQQQQQLLQQLLQQQQQQQQQQDDDDDDDD +IIIIIIGGGGGGGGGVSSSSSSSSSSKKKKKFFPPMMMMMMMKKKSSLLLLLLVVVVVVVVVEEEETETTTTTTTTTLLLLLLLLLLLLLLHHHHHHHGGGGGAJJJJJDQQQQQLLLQLLLLQQQQQQQQQDDDDDDDD +IIIIIGGGGGGGGZZZGSSSSSSSSSKKKFFFFHPMMMMMMMKSSSSLLLLLLVVTVVVVVVEEEETTTTTTTTTLLLFFFFFFFFFFLLHHHHHHHHGEEGDDDJDDDDQQQQQLLLQQLQQQQQQQQQQQDDDDDDDD +IIIIIGGGGGGGGZZZTTSSSSSSSSKKKKFFFFPMMMMMMMKKSSSLLLLLLLVVVVVVVEEEEEETTTTTTTTLLLFFFFFFFFFFHHHHHHHHHHGEDDDDDDDDDDQQIQQQQLLLLQQQQQQQQDQQDDDDDDDD +IIIIIICGGGGGGZZZTTNSSSKKKKKKKFFFFFFMMMMMMMKSSSSSLZLLLLVVVVVVVEEEEEETTTTTTTTLLLFFFFFFFFFFHHHHHIIIHHEEDDDDDDDDDDDTDDQLLLLLTTQQQQQQDDDQDDDDDDDD +IIIIIIGGGGGGGZZZNNNNKKKKKKKKKKFFFFFMMMMMMMKSSSSSFZLLLLLVVVVPVLLEETTTTTTTTTTQLLFFFFFFFFFFHHHIIIHHHHEEDDDDDDDDDDDDDDLLLLLTTTTTQQQQQDDDDDDDDDDD +ZZIIIIUGWGGGGZZZNNNNNKKKKKKKKKFFFFBKKKKKKKKSKSSSFZLLLLLLVZVPPLLLETTTTTTTTTTTOOLLLLLLLILIHIIITTTHHHEEDDDDDDDDDDDDDLLLLLLLTTTTTTDQDDDDDDDDDDDX +ZZIIIUUGWWZZZZZZNNNNNKKKKKKFFFFFFFFKKKKKKKKKKKKZZZZLLLLLVVLLLLLLEETTTTTTTTTOOONNNNNLIIIIIIIIIIIHHEEEEEDDDKKDDDDDDDLLLIIIIIIIIIIQDDDDDDDDDDDD +ZIIIIUZGGGZZZZZZNNNNKKLKLFFFFFFFFFFKKKKKKKKKKKKKZZZLLLLLLLLLLLLLEETTTSTTTTSSFNNNNNNNIIIIIIIIIIIHEEEEEEEDDKKDDDDDDLLLLIIIIIIIIIIDDDDDHHHHHHNN +ZIIIZZZZZNZZZZZZNNNNNNLLLLFFFFFFFFFKKKKKKKKKKKKKZZLLLLLLLLLLLLLEEEEETSSTTSSLFNNNNNNNIIIIIIIIIIIHHEEEEEEKKKKDDDDDDLLLLIIIIIIIIIIDDDDDHHHHHHNN +ZZIZZZZZZNZZZZZZNNNNNNLLLLFFFFFFFFFKKKKKKKKKKHKKGGSLLSLLLLLLLLLLEEESSSSSSSLLFFNNNNNNNPIIIIIIIIIIIEEEEEEEKKLLDLLLDLLLLIIIIIIIIIIDDDDDHHHHHHHN +ZZZZZZZZNNZZZZZZNNNNNLLLLLLFDFFFFQQKKKKUKKKKKKKKSGSLLSLSSSSLLLLEEEESSSSSLSLLFFFNNNNKQQQIIIIIIIIJIEEEEELLLLLLLLLLLLLKKIIIIIIIIIIDDDDDHHHHHHHH +ZZZZZZZZZZZZZZZNNNNNNNLLLLLQQQQQQQGKAKKEKKKKEEESSGSSSSSSSSSTLLLJJJESSSSLLLLLLQQQQNNNQQQIIIIIIIIIIEEEEELLLLLLLLLLKKKKKIIIIIIIIIIDDDHHHHHHHHHH +ZZZZCZZZNNZZZZZNNNNNNNLLLLLQQQQQQQQKAAKEEEEEEEESSSSSSSSSSGZTTTLJJJJSSSSSLLLLLQQQQQNNQQQIIIIIIIIIEEEEEELYLLLLLLLLKKKKIIIIIIIIIIIDHHHHHHHHHHHH +CCCCCCZZNNZZZZZNNNNNUNNLLLLQOQQQQQQQQAKEEEEEEEEESSSSSSSSEZZTTTJJJJJFSJNNLLLLLQQQQQQQQQQIIIIIIIEEEEEEEELYYLLFFLLLLPPKIIIIIIIIIIIHHHHHHHHHHHHH +CCCCCCZZNNNNNNNNNNNNLLLLLLLOOOOQQQQQQQKEEEEEEEEESSSSSSSSEZZTTTJJJJJJJJLLLLLLLQQQQQQQQQQIIIIIIIEEEEEEEEYYYLYLLLLLLLLKIIIIIIIIKKHHHHHHHHHHHHHH +LCCCZZZZZZNNNNNNNNNNNLJRRLLLOOOOOQQQQTTEETEEEEEEESSSSSSEEEZZTTJJJJJJJJJJLLLQQQQQQQQQQQQQIIIHIEEEEEEEEEEEYYYYLLLLLKMKIIIIIIIIKKHHHHHHHHHHHHHH +LCLLLZLZLNNNNNNNNNRNNRRROOLOOOOOOQQQQTEEETTTTTEEEESSSEEEEZZTTTTJJJJJJJJJLLLLQQQQQQQQQQQQIIIHHHEEEEEEEYYYYYYYYLLZLKKKIIIIIIIISSHHHHHHHHHHHHHH +LLLLLLLZLNNNNNNNRRRFRRRROOLOOOOQQQQQQTTTTTTTTTEEEEEEEEEEEZZTTTZZJJJJJJJJLLQQQQQQQQQQQQQQQQIHHHHEEYYYYYYYYYJJJJJJJKKKIIIIIIIISSSSHHHHHHHHHHHH +LLLLLLLLLNLLLLLLRRFFRRRROOLOOOOQQQQDQRTTTTTTTTEEEEEEEZZZZZZTZZZJJJJJJJJLLLQQQQQQQQQQQQQQQQHHHHHNNYYNNNNNNNCJJJJJFKKKIIIIIIIISSSGHHHHHHHHHHHH +LLLLLLLLNNLLLLLRRFFFFFRRROOOOOOYFQQQQTTTTTTTTEEEEEEEZZZZZZZZZZZZZJJJJJLLKLQQQQQQQMQQQQQQQNHHHHNNNYYYNNNNNNCJJJJJFKKKIIIIIIIISSSGGHHHHHHHHHHM +LLLLLLLLLLLLLLLFFFFFFFFFFFOOOOOYYAAAATTTTTTTTTEEEEZZOZZZZZZZZZZUZJJJJLLLQQQQQQQQMMQQQNNNNNNNNNNNNYNNNNNNNNCCOCCCFFKKIIIIIIIISSSSSSSSSPXXHMHH +LLLLLLLLLLLLLLLFFFFFFFOFOOOOOOYYYYYAAATTQTTTQTTQEEZZZZZZZZZZZZZZZJJJJJICCCCCCQQQOMQQQDDNNNNNNNNNNNNNNANNNNCCCCCCFFFFKKKKKKSSSSSSSSSSSPGGHHXX +LLLLLLLLLLLLLLLFFFFFFFOOOOOOOOOYYYYAAATTQQTTQQQQEEEEEZZZZZZZZZZZZJJJJJJCCCCCCYQQOMDDDDDNNNNNNNNNNNNNNNNNNCCCCCCFFFFFKKKKKKSSSSSSSSRSPPGGXXXX +SSSLLLLLLLLLLLLFFFFFFFFYOOYYYYYYYYYYAATTQQQQQQQQEEEEEZZZZZZZZZZZZJJJJJCCCCCCCCCCODDBDDDDDNNNNNNNNNNNNNNNNCCCCCCCFFFFFFKKKKKSSSSSSSPPPPGGGNNX +SSLLLLLLLLLLXXLFXFFFXXXYYYYYYYYYYYYAAAQQQQQQQOQQQEEEEZZZZZZZZZZZYJJYGGCCCCCCCCCCOODDVDDDDINNNNNNNNNNNNNNCCCCZQFFFFFSSFFFFKSSSSSSSSAPPPPGPNNN +LLLLLLLLLLLLXXLXXXXXXXXYYYYYYYYYYYYYYQQQQQQQQQQQQQEEEEZZZZZZZZBYYYYYGGCCCCCCCCCDDDDDDDDDDNNNNNNNNNNNNNNNNCCCZQFFFFFSSFFFFKSSSSSSSSSPPPPPPNNN +LLLLLLLLLLLLLXXXXXXXXXXYYYYYYYYYYYYQQQQQQQQQQQQPQQEEEEEFZZLZZZBYYYYYYGCCCCCCCCDDDDDDDDDDDNDNNNNNNNNNNNNNNNCCZQFFFFFSSFFFFSSSSSSSSSSSPPNNPPNN +QQQYLYYYYLLLJXXXXJXXXXYYYYYYYYYYYYYYQQQQQQQQQQQPPPPPPFFFFFLZZZZYYYYYYYCCCCCCCCCAADADDDDDDDDDNNNNNLNNJJJJCCCCZQQFFFSSSFFFSSSSSSSSSSLLPNNNNNNN +QQYYYYYWWLLLJJJJJJJXXXYYYXXXXXXXXXYYQQQQQQQQQQQPPPPNFFFFFFLLZZZYYYYYYYCCCCCCCCZAAAADDDDDDDDDDNNNLLLLJJJJJCCCQQQFQSSSSFKFSSSSSSSSSSSPPPNNNNNN +QQQQYYYYWLLLJJJJJJJJJJSNBXXXNXXXUYYYYIIJJJQQBBBPPPPPFFFFFFFZZDYYYYYYYYZCCZCCZZZAAAADDDDLLLDDDDNLLLLJJJJJJQQQQQQQQSSSSKKKKSSSSSSSHSSHHHNDDNNN +QQQQYYYYWLLLJJJJJJJJJZNNNNNNNJXXUUUYYYJJJJQQQBPPPPPFFFFFFFFKKYYYYYYKYYZZZZTTTTZZAAAAALLLKLLDLDLLLLJJJJJJJQQQQQQQQSSSSKKKKSSSSSSSHHHHHDDDDNNN +QQQYYYYYYYJJJJJJJJZZZZNNNNNNNNUUUUUUYJJJJJJJJBBPPPFFFFFFFFFKKKKKYYYKKZZZZZZZZZZZZAAAAALLLLLLLLLLLLLLLJJJQQQQQQQQQSSSSSKKKKKSSSSSSHHHHDDDDNNN +YYYYYYYYYYYJJJJJJJJZZNNNNNNNNUUJJJJJJJJJJJJJJJJBFFFFFFFFFFFFKKKKKKKKKZZZZZZZZZZZAAAAAAAGLLLLLLLLLLLJJJJJJQQQQQQQQSSSSSSKKKKKSSSSTTTTTTTDNNNN +SYYYYYYYYYYJJJJJJJJZNNNNNNNNNUUUJJJJJJJJJJJJJBBBBBFFFFFGFFFKKKKKKKKKKZZZZZZZZZAAAGGGAGGGLLLLLLLLLLLLJJJQQTQQQQQQQQQSSSKKKKKKKESTTTTTTNNDNNNN +SCYYYYYYYYYJJJJJJUZZZNNNNNNNNNUUUUJJJJJJJJJJJJBBBBFFFFGGFKKKKKKKKKKZZZZZZZZZZZAAAGYGAGGGGLLLLLLLLLLJJJJQQQQQQQQQQQQSSSSSKKKTTTTTTTTTTNNNNNNN +SCCYYYYYYJYJJJJJJUUUZNNNNNNNNUUJUUJJJJJJJJJJJLBBBBBGGGGGGKKKKKKKKKKZZZZZZZZZZZAAAGGGAGGGGLLLLLLLLLLLLLJQQQQQQQQQQQQSSSSSKKKTTTTTTTTTTTNNNNNN +CCCYYYYYJJJJJJJJUUUNZNNNNNNNNNUJJJJJJJJJJJLJJLLLBBBGGGGGGKKKKKKKKKKZZZZZZZZZZAABAGGGGGGGGGGLLLLLLLLLLLQQQQQQQQQQQQQQSSSSKKTTTTTTTTTTTTNNNMNN +CCCYYYYJJJJJJJUUUUUNNNNNNNNJJJJJJJJJJJJJJJLLLLLLLLBBGGGGGKGKKKKKKKKZZZZZZZZZZZABBBBGGGGGGGGLLLLLLLLLLLQQQQQQQQQQQQQQSSSSKKTTTTTTTTTTTTTMMMNN +CCCCCYYCJJJJJUUUUUUUNUUNNNNJJJJJJJJJJJJJJLLLLLLLLLLLGGGGGGGKKKKKKKKZZZZZZZZZZZBBBBGGGGGGGGGGGOOLLLLGGGGQQQQQQQQQQQQQSSSKKTTTTTTTTTMMTTTMMMMM +CCCCZZCCJJJJJUUUUUUUUUUUUUUJJJJJJJJJJJJJZZLLLLLLLLLLFGGGGGGGGGKKKKKZZZZZZZZZZZBBBGGGGGGGGGGGGGLLLGGGGEEEQQQQQQQQQQSQSSSSSTTTTTTTTMMMTTMMMMMM +CCCCZZZCCCJJUUUUUUUUUUUUUUUJJJJUUJJJJDDJJZZLLLLLLLZZGGGGGGGGGGKKKKKZZZZZZZZZZZBBBBGGGGGGGGGGGGLLGGGGETEEEEQQQQSSSSSSSSSXTTTTTTTMTMMMTTTMMMMM +CCCCCCCCCCJUUUUUUUUUUUUUUUUUJJJUUUDDDDDJJZZFFLLLFLZZZGGGGGGGGGGKKKKZZZZZZZZZBBBBBBGGGGGGGGGGGGLLLGGEEEEEEEQQJQSSSSUSSSSMMTMMMTTMMMMMTTTMMMMM +CCCCCCCCCCCUUUUUUUUUUUUUUUUUUJJUUUDDDDDZZZZFFLLLLLLZGGGGGGGGGGGKKKKZZKKKKZZZZBBBBBJBGGGCGGGGGGGLLGGGEEEEEEQQQSSUUUUSSSMMMMMMMMMMMMMMTTMMMMMM +CCCCCCCCCCCUUUUUUUUUUUUUUUUUUUUUUDDDDDDDZZFFFFLPWWLEGGGGGGGGGGKKKKKKKKKLZZZZZZBBBBJBGCCCCGGGGGGGLGGGEBBEEEEQSSUUUUUSUSSMMMMMMMMMMMMMMMMMMMMM +CCCCCCCCCCCCUUUUUUUUUUUUUUUUUUUUUUDDDDDZZFFFFPLPWWWEGGGGGGESSSSSSSSSSSLLLLZZBBBBBBBBGGGCCCGGGGGGGGGGGGEEEEEESSUUUUUUUMMMMMNNNNNNNMMMMMMMMMMM +CCCCCCCCCCCCUUUUUUUUUUUUUUUUUUUUUUDZDDDDZZZZZPPPWWPEEEEEEEESSSSSSSSSSSLLLLLZBBBBBBBBGGCCCXGGGGNNKNGGGAAEEEEEEBBUUUUUMMUMNNNNNNNNNNMMMMMMMMMM +CCCCCCCCCLLUUUUUUUUUUUUUUUUUUUUUUUUZZZZZZZZPPPPPPPPPEEEEEEESSSSSSSSSSSLLLLLLBBBBBIBBGGCCXXGGNNNNNNGGAAAEAAAENBBUUBUUUUUMMNUNNNNNNMMNMMMBMBBS +CCYYCCCCCLLLUUUUUUUUUUUUUUUUUUUUUUUZZZZZZZZPPPPPEPPPPEEEEEESSSSSSSSSSSLLLLLBBBBBBBBIIGCCXCCWWWNNZNVGAAAAAAABBBBCBBBUUUUUUNUNNKNNNNNNNMMBBBBB +YCYYYYYCCLLLUUULUUUUUUUUUUUUUUUUUUUUZZZZZZZPPPPPPPPPPEEEEEKKKSSSSSSSSSLLLLLLBBBBBBIIIIICCCCWWNNNNVVVFAFAAAABBBBBBBBBBBBUUUUUNNNNNNNNNMBBBBBB +YYYYYYYCLLLLLLLLLUWUUUUUUUUUUUUUUUUUZZZZZZZZPPPPPPPPPEEEEEKKKSSSSSSSSSLLLLLLBBBBBIIIIIIUCFCWWNNNVVVVFFFFAAAABBBBBBBBBBUUUUUUNNNNNNNNABBBBBBB +YYYYYYCCLLLLLLLCLCCRUUUUUUUUUUXXUUUUZZZZZZPPPPPPPPPPPEEEKKKKKSSSSSSSSSLLLLLLLBBBBBYIIIIIIFFNNNNNVVVFFFFFFFFABBBBBBBBBBBUUUUUNUUNNNNNANNNBBBN +YYYYYYYYYYPPLLCCCCCCCCUUUUUUUUXXNDNZZZZZZZPPPPPPPPPRREEEEEERASSSSSSSSSLLLLLLLBYBBYYYYYYYIFFNNNNNNVVFFFFFFFFABBBBBBBBBBBBUUUUUUUNNNNNNNNNNNNN +QYYYYYYYYYPLLLLCCCCCCCCCTTUUUUNNNNNZZZZZZZZPPPPPPPPRNNEEEEEESAAAABBBLLLLLLLLLLYBYYYYYYYYFFKKKKKKKKZFFFFFFFFFBBBBBBBBBBBBUUUUUUUUNNNNNNNNNNNN +YYYYYYYYPPPPPLLCCCCCCCCCCCAAUUNNNNNZZNNNZPPPPPPPPPPRRREREMESSQAAALLLLLLLLLALAYYYYYYYYYYYFFKKKKKKKKZZFFFFFFFRRRRBBBBBBBBUUUUUUUUUNNNNNNNNNNNN +EEYYYYYYPPPPPPPCCCCCCCCCCAAAUUNNNNNZZNNNZPPPPPPPPRRRRRRRORRSSQQAAALALLLLLLAAAAYYYYYYYYYNNNKKKKKKKKZZFFFFFFFFRRRBBBBBBBUUUUUUUUUUNNNNNNNNNNNN +EEYMMPPPPPPPPPPCCCCCCCCCCCCNNNNNNNNNNNNXPPPPPPPPPRRRRRRRRRRRQQQAAAAAALLLLLAAAAYYYYYYYYNNNNKKKKKKKKZZFFFFFFFFRRBBBBBBBBUUUUUUUUUUNNNNNNNNNNNN +EEYYPPPPPPPPPPGCCCCCCCCCCCDNNNNNNNNNNNNNPPPPPPPPRRRRRRRRRRRYQQQQQQQQALLLAAAAAAAYYYYYNNNNNNKKKKKKKKFFFFFFFFFFFRRRBBBBBRRRUUUUUUUUNNNNNNNNNNNN +EEENNPPPPPPPPGGCMCCCCCCNNNNNNNNNNNNNNNNNPPPPPPPPRVRVRRRRRRYYYFQQQQQEQQQVAAAAAAAYYYYYYNNNNNKKKKKKKKKKKKFFFFFFFFFBBBCCBRRRRRUUUUUUNNNNNNNNNNNN +EEEPPPPPPPPPPPPCMCCCCCCNNNNNNNNNNNNNNNNNKPPPPPPPPVRVRRRRRYYYYFQQQQQQQQQQQAAAAAAYYYYYYNNNNNKKKKKKKKKKKKFFFFFFFFFFFFFCRRORRRRUUUUUNANNNNNNNNNN +EEEPPPPPPPPPPPMMMMCCCICMMNNNNNNNNNNNZNNNTTPTTPPPVVVVRRRRRYYYYQQQQQQQQQQQQQAAAAAYYYYYNNNNNNNNNKKKKKKKKKFFFFFFTCCCCCCCRRRRRRRUUIUNINNNNNNNNNNN +EEELPPPWWPPPMMMMMMCCCCCCMMMNNNNNNNNNZNNZTTTTTPPTVVVVVRRRYYYYQQQQQQQQQQQQAAAAAAYYYNNNNNNNNNNNNKKKKKKKKKCCCTTTTTCTTRRRRRRRRRTIIIINNNNNNNNNNNNN +UUEEEPPWMPPPPMMMMMCCCCCMMMMNNNNNNNZZZNNZTTTTTYTTVVPPVVRRRYYYYQQQQQQQQQQASAAYYAYNNNNNNNNNNNNNNNYCKKKKKKCSSTTTTTCTTTTRRRRRRTTTIITTNNNNNNNNNNNN +UUUUMMMMMPPPMMMMMMCMMMMMMMMNNNNNNNZZZZZZCTTTTTTTPPPPVVVRRRRYYQQQQQQQQQQAAAYYYYYYNNNNNNNNNNNNCYYCCCCCCCCCCTTTTTTTTTTERRRRRRRTTITTNNNNNNNNNNNN +UUUMMMMMPPMMMMMMMMMMMUUMMNNNNNNNNNZZZZZCTTTTTTTQPPPPVPPPYYYYYYQQQQQQQQQQEAAYYYYYYNNNNNNNNNNCCCCCCCCCCCCCTTTTTTTTTTTRRRRRRRRTTTTTNTNNNNNNNNNN +UUMMMMMMMMMMMMMUMMMMMMUUMMMNNNNNNNZZZZOTTFTTTTTQPPPPPPPPBYYYYQQQQQQQQQQQQYYYYYYYYYNNNNNNNANCCJCCCCCCCCCCTSTTTTTTTTTTTTRRRTTTTTTTNTNTTNNNNNNN +UMMMMMMMMMMMMMMUUUUUMUUUMMMNBNNNNZZZZZZZFFFFTTTTPPPPFPPPBYYYQQQQQQQQQQQQCQYYYYYYYYYNNNNNNCCCCCCCCCCCCCCCCCTTTTTTTTTTTTRRTTTTTTTTTTTTTNNNNNNN +UUMMMMMMMMMMMMMUUUUUUUUUUMMMBNNNZZZZZZZZFFFFUUTPPPPPPPPBBYYYQWQQQQQQQQQQQQQYYYYYYYYNNNNNNCCCCCCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTTTNNNNNNNNN diff --git a/2024/day12/input.txt.h b/2024/day12/input.txt.h new file mode 100644 index 0000000..120b0b1 --- /dev/null +++ b/2024/day12/input.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_2024_day12_input_txt_start __asm("_binary_2024_day12_input_txt_start"); +extern uint32_t _binary_2024_day12_input_txt_end __asm("_binary_2024_day12_input_txt_end"); +extern uint32_t _binary_2024_day12_input_txt_size __asm("_binary_2024_day12_input_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/2024/day12/sample1.txt b/2024/day12/sample1.txt new file mode 100644 index 0000000..50a7304 --- /dev/null +++ b/2024/day12/sample1.txt @@ -0,0 +1,5 @@ +OOOOO +OXOXO +OOOOO +OXOXO +OOOOO diff --git a/2024/day12/sample1.txt.h b/2024/day12/sample1.txt.h new file mode 100644 index 0000000..325bb95 --- /dev/null +++ b/2024/day12/sample1.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_2024_day12_sample1_txt_start __asm("_binary_2024_day12_sample1_txt_start"); +extern uint32_t _binary_2024_day12_sample1_txt_end __asm("_binary_2024_day12_sample1_txt_end"); +extern uint32_t _binary_2024_day12_sample1_txt_size __asm("_binary_2024_day12_sample1_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/2024/day12/sample2.txt b/2024/day12/sample2.txt new file mode 100644 index 0000000..f7cd38f --- /dev/null +++ b/2024/day12/sample2.txt @@ -0,0 +1,6 @@ +AAAAAA +AAABBA +AAABBA +ABBAAA +ABBAAA +AAAAAA diff --git a/2024/day12/sample2.txt.h b/2024/day12/sample2.txt.h new file mode 100644 index 0000000..116edf5 --- /dev/null +++ b/2024/day12/sample2.txt.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_2024_day12_sample2_txt_start __asm("_binary_2024_day12_sample2_txt_start"); +extern uint32_t _binary_2024_day12_sample2_txt_end __asm("_binary_2024_day12_sample2_txt_end"); +extern uint32_t _binary_2024_day12_sample2_txt_size __asm("_binary_2024_day12_sample2_txt_size"); + +#ifdef __cplusplus +} +#endif diff --git a/2024/day12/solution.c b/2024/day12/solution.c new file mode 100644 index 0000000..d6b2fbc --- /dev/null +++ b/2024/day12/solution.c @@ -0,0 +1,186 @@ +#include + +#include "cartesian.h" +#include "parse.h" +#include "printf.h" +#include "memory.h" +#include "abs.h" +#include "minmax.h" + +struct perimeter_area_sides { + int perimeter; + int area; + int sides; +}; + +struct origin_entry { + enum cartesian_direction direction; + int x; + int y; +}; + +struct side_origin { + struct origin_entry origins[512]; + int length; +}; + +static bool walk_to_side_origin(const char * input, + int stride, + int width, int height, + int x, int y, + struct side_origin * side_origin, + enum cartesian_direction perimeter_direction) +{ + static enum cartesian_direction walk_from_perimeter[] = { + [CARTESIAN_RIGHT] = CARTESIAN_UP, + [CARTESIAN_LEFT ] = CARTESIAN_UP, + [CARTESIAN_DOWN ] = CARTESIAN_LEFT, + [CARTESIAN_UP ] = CARTESIAN_LEFT, + }; + enum cartesian_direction walk_direction = walk_from_perimeter[perimeter_direction]; + + char c = input[y * stride + x]; + + while (true) { + int walk_x = x + cartesian_neighbor[walk_direction].x; + int walk_y = y + cartesian_neighbor[walk_direction].y; + + char wc = input[walk_y * stride + walk_x]; + + // walked into another shape + if (!cartesian_inside(width, height, walk_x, walk_y) || wc != c) + break; + + int nx = walk_x + cartesian_neighbor[perimeter_direction].x; + int ny = walk_y + cartesian_neighbor[perimeter_direction].y; + + char nc = input[ny * stride + nx]; + + if (!cartesian_inside(width, height, nx, ny) || c != nc) { + x = walk_x; + y = walk_y; + } else { + break; + } + } + + for (int i = 0; i < side_origin->length; i++) { + struct origin_entry * origin = &side_origin->origins[i]; + if (origin->x == x && origin->y == y && origin->direction == perimeter_direction) { + // not a new side + return false; + } + } + // add the new side + struct origin_entry * origin = &side_origin->origins[side_origin->length++]; + origin->x = x; + origin->y = y; + origin->direction = perimeter_direction; + return true; +} + +static struct perimeter_area_sides flood_fill(const char * input, + int stride, + int width, int height, + int x, int y, + char * visited, + struct side_origin * side_origin) +{ + int perimeter = 0; + int area = 1; + int sides = 0; + + visited[y * width + x] = 1; + + for (int i = 0; i < cartesian_neighbor_count; i++) { + int nx = x + cartesian_neighbor[i].x; + int ny = y + cartesian_neighbor[i].y; + + char c = input[y * stride + x]; + char nc = input[ny * stride + nx]; + + if (!cartesian_inside(width, height, nx, ny) || c != nc) { + perimeter += 1; + bool new_side = walk_to_side_origin(input, + stride, + width, height, + x, y, + side_origin, + i); + sides += (int)new_side; + + } else { + if (!visited[ny * width + nx]) { + struct perimeter_area_sides npas = flood_fill(input, + stride, + width, height, + nx, ny, + visited, + side_origin); + perimeter += npas.perimeter; + area += npas.area; + sides += npas.sides; + } + } + } + + return (struct perimeter_area_sides){perimeter, area, sides}; +} + +typedef int (* part_func)(int perimeter, int area, int sides); + +static int solve(const char * input, int length, part_func func) +{ + int stride = parse_stride(input, length); + int height = parse_height(input, length); + int width = stride - 1; + char visited[width * height]; + memory_set_char(visited, 0, (sizeof (visited)) / (sizeof (visited[0]))); + struct side_origin side_origin; + + int sum = 0; + + int x = 0; + int y = 0; + for (int ix = 0; ix < length; ix++) { + if (x == stride - 1) { + x = 0; + y += 1; + continue; + } + + if (!visited[y * width + x]) { + side_origin.length = 0; + struct perimeter_area_sides npas = flood_fill(input, + stride, + width, height, + x, y, + visited, + &side_origin); + + sum += func(npas.perimeter, npas.area, npas.sides); + } + x += 1; + } + return sum; +} + +static int part1_sum(int perimeter, int area, int sides) +{ + return perimeter * area; +} + +static int part2_sum(int perimeter, int area, int sides) +{ + return area * sides; +} + +int64_t _2024_day12_part1(const char * input, int length) +{ + return solve(input, length, part1_sum); +} + +int64_t _2024_day12_part2(const char * input, int length) +{ + return solve(input, length, part2_sum); +} diff --git a/cartesian.c b/cartesian.c index e1cba1b..0ec617d 100644 --- a/cartesian.c +++ b/cartesian.c @@ -11,3 +11,10 @@ bool cartesian_inside(int width, int height, x < width && y < height ; } + +const struct cartesian_neighbor cartesian_neighbor[4] = { + [CARTESIAN_RIGHT] = { 1, 0}, + [CARTESIAN_LEFT ] = {-1, 0}, + [CARTESIAN_DOWN ] = { 0, 1}, + [CARTESIAN_UP ] = { 0, -1}, +}; diff --git a/cartesian.h b/cartesian.h index 56a331e..489566a 100644 --- a/cartesian.h +++ b/cartesian.h @@ -7,6 +7,22 @@ extern "C" { bool cartesian_inside(int width, int height, int x, int y); +struct cartesian_neighbor { + int x; + int y; +}; + +enum cartesian_direction { + CARTESIAN_RIGHT, + CARTESIAN_LEFT, + CARTESIAN_DOWN, + CARTESIAN_UP, +}; + +extern const struct cartesian_neighbor cartesian_neighbor[4]; + +#define cartesian_neighbor_count ((sizeof (cartesian_neighbor)) / (sizeof (cartesian_neighbor[0]))) + #ifdef __cplusplus } #endif diff --git a/gen.sh b/gen.sh index 3595bcd..003482e 100755 --- a/gen.sh +++ b/gen.sh @@ -5,7 +5,7 @@ set -ex year="$1" day="$2" -if [ ! -z $year && ! -z "$year/$day" ]; then +if [ ! -z $year ]; then re='^[0-9]+$' if ! [[ $year =~ $re ]] ; then echo "error: $year: not a number" >&2 @@ -20,12 +20,12 @@ if [ ! -z $year && ! -z "$year/$day" ]; then cat < ${year}/day${day}/solution.c #include -int64_t ${year}_day${day}_part1(const char * input, int length) +int64_t _${year}_day${day}_part1(const char * input, int length) { return -1; } -int64_t ${year}_day${day}_part2(const char * input, int length) +int64_t _${year}_day${day}_part2(const char * input, int length) { return -1; } diff --git a/input_dreamcast.inc b/input_dreamcast.inc index 339bfbd..7027949 100644 --- a/input_dreamcast.inc +++ b/input_dreamcast.inc @@ -24,6 +24,9 @@ #include "2024/day10/input.txt.h" #include "2024/day11/sample1.txt.h" #include "2024/day11/input.txt.h" +#include "2024/day12/sample1.txt.h" +#include "2024/day12/sample2.txt.h" +#include "2024/day12/input.txt.h" static struct start_size sample[][2] = { { @@ -98,6 +101,12 @@ static struct start_size sample[][2] = { { ( char *)&_binary_2024_day11_sample1_txt_start, (uint32_t)&_binary_2024_day11_sample1_txt_size }, }, + { + { ( char *)&_binary_2024_day12_sample1_txt_start, + (uint32_t)&_binary_2024_day12_sample1_txt_size }, + { ( char *)&_binary_2024_day12_sample2_txt_start, + (uint32_t)&_binary_2024_day12_sample2_txt_size }, + }, }; static struct start_size input[] = { @@ -125,4 +134,6 @@ static struct start_size input[] = { (uint32_t)&_binary_2024_day10_input_txt_size }, { ( char *)&_binary_2024_day11_input_txt_start, (uint32_t)&_binary_2024_day11_input_txt_size }, + { ( char *)&_binary_2024_day12_input_txt_start, + (uint32_t)&_binary_2024_day12_input_txt_size }, }; diff --git a/memory.c b/memory.c index 2e61d82..3753e14 100644 --- a/memory.c +++ b/memory.c @@ -2,16 +2,16 @@ #include "memory.h" -void memory_set_char(char * buf, char c, int size) +void memory_set_char(char * buf, char c, int length) { - for (int i = 0; i < size; i += 1) { + for (int i = 0; i < length; i += 1) { buf[i] = c; } } -void memory_set_int(int * buf, int c, int size) +void memory_set_int(int * buf, int c, int length) { - for (int i = 0; i < size; i += 1) { + for (int i = 0; i < length; i += 1) { buf[i] = c; } } diff --git a/memory.h b/memory.h index ea1ef7e..cba25df 100644 --- a/memory.h +++ b/memory.h @@ -4,8 +4,8 @@ extern "C" { #endif -void memory_set_char(char * buf, char c, int size); -void memory_set_int(int * buf, int c, int size); +void memory_set_char(char * buf, char c, int length); +void memory_set_int(int * buf, int c, int length); #ifdef __cplusplus } diff --git a/runner.c b/runner.c index 1e5115d..a98d6af 100644 --- a/runner.c +++ b/runner.c @@ -38,7 +38,7 @@ bool runner_tick(struct runner_state * runner_state) int year = solution[ix].year; int day = solution[ix].day; - if (year != 2023) { + if (year != 2024 || day != 12) { return false; } diff --git a/runner.inc b/runner.inc index da3ce10..010207a 100644 --- a/runner.inc +++ b/runner.inc @@ -25,6 +25,8 @@ int64_t _2024_day10_part1(const char * input, int length); int64_t _2024_day10_part2(const char * input, int length); int64_t _2024_day11_part1(const char * input, int length); int64_t _2024_day11_part2(const char * input, int length); +int64_t _2024_day12_part1(const char * input, int length); +int64_t _2024_day12_part2(const char * input, int length); struct day_funcs solution[] = { { @@ -87,4 +89,9 @@ struct day_funcs solution[] = { {_2024_day11_part1, _2024_day11_part2}, NULL, }, + { + 2024, 12, + {_2024_day12_part1, _2024_day12_part2}, + NULL, + }, }; diff --git a/solutions.mk b/solutions.mk index 784196f..f9f150a 100644 --- a/solutions.mk +++ b/solutions.mk @@ -37,4 +37,8 @@ DAY_OBJ = \ 2024/day10/solution.o \ 2024/day11/sample1.txt.o \ 2024/day11/input.txt.o \ - 2024/day11/solution.o + 2024/day11/solution.o \ + 2024/day12/sample1.txt.o \ + 2024/day12/sample2.txt.o \ + 2024/day12/input.txt.o \ + 2024/day12/solution.o