diff --git a/18/input.txt b/18/input.txt new file mode 100644 index 0000000..505fe6d --- /dev/null +++ b/18/input.txt @@ -0,0 +1,604 @@ +R 2 (#3e6b80) +U 6 (#2b1de3) +R 4 (#1465b0) +U 2 (#549d23) +R 6 (#aa9992) +U 6 (#27e7f3) +R 7 (#aa9990) +U 6 (#5a3933) +R 5 (#1465b2) +U 5 (#23ade3) +R 4 (#49b5b2) +U 6 (#39ad53) +R 7 (#54c4f2) +U 5 (#491513) +R 9 (#4f5960) +U 5 (#357be3) +R 3 (#4f2140) +U 6 (#258b43) +R 4 (#4f9570) +U 3 (#1ea371) +R 8 (#7be6c0) +U 5 (#67bd61) +R 5 (#a31240) +U 6 (#6bf7d1) +R 5 (#a31242) +U 4 (#3464a1) +R 3 (#7be6c2) +U 4 (#33f091) +R 5 (#5c0530) +U 6 (#4c4e11) +R 2 (#611e90) +U 3 (#128231) +R 6 (#5ecef2) +D 9 (#6eb251) +R 5 (#5e54d2) +U 9 (#1e8081) +R 3 (#73a8b0) +U 10 (#6dc731) +R 3 (#84d470) +U 2 (#6b91a1) +R 7 (#64edf0) +U 5 (#4da881) +R 10 (#710072) +D 5 (#4aa4f1) +R 7 (#4dd192) +D 6 (#4aa4f3) +R 3 (#2af062) +D 6 (#6fabe1) +R 5 (#177cc0) +U 5 (#26ba61) +R 5 (#5a3aa0) +U 9 (#3b5401) +R 5 (#012590) +U 2 (#747f11) +R 4 (#753b32) +U 7 (#965a31) +R 4 (#753b30) +U 3 (#20c281) +R 5 (#225830) +U 4 (#7a4da1) +R 4 (#716560) +U 6 (#036ca1) +R 5 (#55fd00) +D 4 (#064ad1) +R 4 (#93a480) +D 6 (#411d21) +R 3 (#990d00) +D 6 (#4af4a1) +R 3 (#0f8880) +D 4 (#0f56c3) +R 3 (#7f2590) +U 7 (#0f56c1) +R 7 (#374e40) +U 6 (#4af4a3) +R 2 (#161a20) +U 3 (#5277d1) +R 5 (#7c6760) +U 4 (#528313) +R 4 (#525840) +U 4 (#267643) +L 10 (#525842) +U 5 (#501273) +L 4 (#447950) +D 10 (#69cdc3) +L 3 (#530a00) +U 10 (#590643) +L 5 (#243450) +D 5 (#74a853) +L 6 (#7c2a42) +U 5 (#1d9673) +L 3 (#3f8d62) +U 8 (#606b43) +L 5 (#576480) +D 8 (#63d243) +L 5 (#86ad60) +U 4 (#63d241) +L 7 (#0be9f0) +U 8 (#4b0801) +L 2 (#64f9c0) +U 4 (#478081) +R 9 (#20b940) +U 4 (#a60cd1) +L 9 (#02c6a0) +U 5 (#0d8be1) +L 4 (#8226e0) +D 6 (#013a81) +L 3 (#5cf860) +D 4 (#985951) +L 5 (#162d72) +D 2 (#1c2c31) +L 2 (#654f82) +D 4 (#51b4e1) +R 10 (#401a32) +D 5 (#32c291) +L 7 (#84ff82) +D 2 (#25cf41) +L 3 (#43b090) +D 4 (#6208d1) +L 3 (#a428a0) +U 9 (#6208d3) +L 3 (#07d9c0) +U 9 (#6e8a01) +L 2 (#3ab640) +U 3 (#187711) +L 4 (#162d70) +U 6 (#8e5a81) +L 6 (#049580) +D 6 (#a81333) +L 2 (#342030) +D 3 (#233073) +L 7 (#510730) +D 4 (#15cbf3) +R 3 (#507520) +D 5 (#3be881) +R 6 (#52f2a0) +D 3 (#a52711) +L 3 (#0d7680) +D 5 (#1db6c3) +L 5 (#5f0450) +U 5 (#6c6d73) +L 2 (#47abc0) +D 5 (#707733) +L 5 (#771be2) +D 2 (#151c53) +L 3 (#413da2) +D 3 (#768703) +R 11 (#640b02) +D 2 (#37b343) +R 4 (#4ac8d0) +D 5 (#016421) +L 2 (#907990) +D 5 (#016423) +L 3 (#412220) +U 5 (#0f5603) +L 9 (#5e11d0) +D 5 (#24abb1) +L 7 (#1ab552) +U 2 (#06e641) +L 2 (#9e07e2) +U 4 (#06e643) +L 6 (#51f692) +U 4 (#763581) +L 8 (#3716a0) +U 4 (#1360d1) +R 5 (#567bc0) +U 2 (#222831) +R 9 (#7d2160) +U 6 (#72b991) +L 6 (#4a6840) +U 3 (#3ef773) +L 4 (#626a10) +U 4 (#4c3d93) +L 4 (#6fa5e2) +D 4 (#6e0b33) +L 4 (#6fa5e0) +U 3 (#38aaf3) +L 5 (#223552) +U 5 (#025c33) +L 4 (#4205c2) +D 4 (#49ddd3) +L 3 (#3aa782) +D 4 (#028fd3) +L 5 (#76e842) +D 3 (#028fd1) +L 3 (#9bc962) +U 4 (#6bde73) +L 9 (#9d6be0) +U 6 (#2db831) +L 5 (#1192c0) +U 3 (#6b5c33) +L 4 (#152940) +U 4 (#746923) +L 5 (#8648a0) +U 3 (#4cb8d1) +L 3 (#877170) +U 5 (#24ca21) +L 4 (#877172) +D 3 (#6e4261) +L 2 (#691310) +D 6 (#655001) +R 6 (#7e7740) +D 3 (#1562b1) +L 6 (#261a00) +D 4 (#700e91) +L 4 (#6ade10) +U 9 (#4a1251) +L 3 (#5a7c00) +U 7 (#5a30e1) +L 6 (#15a832) +U 3 (#152e01) +L 3 (#643622) +U 5 (#977db1) +L 7 (#4b7bc2) +U 2 (#546691) +L 7 (#8cd5a2) +U 7 (#5b7a31) +R 3 (#6c85f2) +U 6 (#6996a1) +R 8 (#458692) +U 3 (#370e51) +R 6 (#7bc6d2) +U 4 (#07aa01) +R 4 (#389dc2) +U 6 (#3de6d3) +R 6 (#54ece2) +U 5 (#625703) +R 10 (#0e9512) +D 5 (#1e8793) +R 3 (#873d92) +U 4 (#2eb4b3) +R 5 (#2d3432) +U 5 (#26b2f1) +R 2 (#2c8c52) +U 3 (#2ff4c1) +R 7 (#0e68f2) +U 3 (#32b371) +R 8 (#0e68f0) +U 4 (#5d6fb1) +R 3 (#128622) +U 5 (#06af41) +R 6 (#a95192) +U 4 (#274af1) +R 3 (#3af302) +U 6 (#50fff3) +R 6 (#3f9cf2) +U 2 (#50fff1) +R 3 (#4734a2) +U 3 (#1a5051) +L 12 (#986ce0) +U 3 (#224b61) +R 9 (#2d66c0) +U 4 (#6f2a31) +R 6 (#0aba80) +U 7 (#0ecb81) +R 4 (#606870) +U 3 (#0ecb83) +L 3 (#4e78e0) +U 3 (#4563f1) +L 11 (#8bed00) +U 3 (#3298c1) +L 5 (#5a39d0) +U 2 (#51d641) +L 8 (#8e6ee0) +U 4 (#233851) +R 4 (#31c7a0) +U 9 (#728831) +R 3 (#670cd0) +U 4 (#1f3621) +L 7 (#8df230) +U 4 (#44a361) +R 7 (#2aed30) +U 7 (#2a0161) +R 4 (#1db2c0) +U 3 (#6387c1) +R 3 (#1886b0) +D 3 (#128c21) +R 3 (#acb330) +D 3 (#3a9d01) +L 4 (#3658a0) +D 6 (#00ec51) +R 4 (#682712) +D 6 (#2440e1) +R 5 (#45f812) +D 9 (#6298d1) +R 3 (#778f22) +U 4 (#6298d3) +R 2 (#271462) +U 10 (#0d5ff1) +L 4 (#6a69e2) +U 5 (#0d5ff3) +R 6 (#24b5e2) +U 3 (#2440e3) +R 5 (#5f3192) +U 4 (#41c313) +R 3 (#236852) +U 7 (#6e15c1) +R 8 (#5187b2) +D 5 (#6e15c3) +R 2 (#65a3d2) +D 4 (#41c311) +R 11 (#3dfa02) +D 4 (#26ca51) +R 5 (#4e3912) +D 6 (#797803) +R 5 (#2f8ee2) +U 5 (#2a9b83) +R 8 (#3d6702) +D 5 (#4646e3) +R 3 (#3d6700) +D 2 (#43a1c3) +R 4 (#592f22) +D 3 (#9d61c1) +R 4 (#1f90f2) +D 5 (#172261) +R 7 (#5a7ba2) +D 8 (#797801) +R 6 (#4e4ad2) +D 8 (#28fda1) +R 5 (#55a862) +D 4 (#28fda3) +R 5 (#1665a2) +D 6 (#3fca41) +R 9 (#850700) +D 3 (#43f8f1) +R 3 (#3cbd90) +D 6 (#620311) +R 8 (#70b2b2) +D 6 (#25cb11) +R 3 (#336c52) +D 4 (#8da331) +R 4 (#336c50) +D 5 (#0594c1) +R 3 (#4a2b92) +U 8 (#31cac1) +R 5 (#392742) +D 8 (#233743) +R 6 (#798b32) +D 4 (#233741) +R 6 (#4fcde2) +D 4 (#1ffd91) +L 9 (#207ed2) +U 5 (#9314d1) +L 9 (#056d22) +D 5 (#56c131) +L 9 (#431340) +D 6 (#94bbb1) +R 8 (#357120) +D 2 (#19ca71) +R 8 (#8bebb0) +D 6 (#4257c1) +R 8 (#0c4fc0) +D 3 (#380131) +R 3 (#07a260) +D 3 (#02a841) +L 11 (#100a10) +D 2 (#07ad11) +L 4 (#4a2b90) +D 3 (#10d091) +R 6 (#609d22) +D 2 (#69a281) +R 9 (#320ed2) +D 5 (#0782c1) +R 2 (#67c382) +D 2 (#19a311) +R 7 (#14e152) +D 3 (#4ee351) +R 5 (#14e150) +D 8 (#54dae1) +R 3 (#428ba2) +D 5 (#0a5431) +R 3 (#1880e2) +D 2 (#2fc091) +R 9 (#440bc0) +D 6 (#758b11) +R 6 (#6a54b0) +D 3 (#31f8d1) +L 6 (#37e190) +D 5 (#0c4af1) +L 4 (#6acc62) +D 2 (#161df1) +L 4 (#72f272) +D 4 (#161df3) +L 7 (#088332) +D 4 (#182831) +L 8 (#82d720) +D 3 (#371df1) +L 7 (#7207b0) +D 6 (#206d61) +R 4 (#0c1082) +D 2 (#796721) +R 6 (#220252) +D 7 (#2948a1) +R 7 (#5f2c02) +U 7 (#137d21) +R 3 (#0fe252) +D 2 (#0164d1) +R 6 (#1ce912) +D 6 (#4e0983) +R 2 (#7d7c72) +D 11 (#598c93) +R 4 (#581202) +D 8 (#0ffba3) +L 4 (#500e32) +D 2 (#42bcf3) +R 4 (#31e852) +D 8 (#2d8913) +R 4 (#1d67d2) +D 5 (#5a03c3) +R 9 (#45c0b0) +D 4 (#3a1e53) +L 9 (#687430) +D 4 (#3a1e51) +L 4 (#25b1b0) +D 8 (#613e03) +L 7 (#4ea210) +D 8 (#366193) +L 3 (#4cb7c2) +D 8 (#452333) +L 6 (#675322) +D 6 (#6ae223) +L 3 (#0d88b2) +D 2 (#23a4a3) +L 8 (#60f512) +D 5 (#568a53) +L 3 (#0cbd02) +D 3 (#4bad03) +L 4 (#588672) +D 4 (#72dfa3) +L 2 (#960472) +D 9 (#394403) +L 5 (#28bcc2) +D 6 (#4eb073) +L 6 (#04e992) +D 3 (#22c803) +L 3 (#a76142) +D 5 (#22c801) +R 10 (#171512) +D 3 (#25f2f3) +R 6 (#581600) +D 7 (#3d0f33) +L 8 (#142a40) +D 4 (#6eb893) +L 5 (#142a42) +U 4 (#02a243) +L 9 (#522a40) +U 2 (#4d2a01) +L 4 (#081760) +D 7 (#17c601) +R 4 (#081762) +D 6 (#497a01) +R 5 (#2fbb50) +D 3 (#4be663) +R 4 (#3b3140) +D 2 (#48f803) +R 3 (#69ec82) +U 3 (#80c993) +R 5 (#3f05f2) +U 8 (#5d5463) +R 4 (#50d1c2) +D 3 (#472973) +R 3 (#1b68a2) +D 5 (#5ebab3) +R 7 (#464fd2) +D 3 (#64c0a1) +L 7 (#4062d2) +D 6 (#8e33b3) +L 5 (#1c3382) +D 6 (#8e33b1) +L 4 (#50b882) +D 4 (#64c0a3) +L 2 (#2bcfb2) +D 7 (#84fc61) +L 3 (#413452) +U 10 (#84fc63) +L 3 (#47ad42) +U 2 (#03ba03) +L 3 (#7197b2) +U 5 (#81aa33) +L 8 (#5c0552) +D 5 (#235433) +L 5 (#4236f2) +D 5 (#4e9bc3) +L 5 (#3740a0) +D 2 (#1e7f23) +L 10 (#3740a2) +U 3 (#5f66a3) +R 4 (#4236f0) +U 7 (#164f83) +R 4 (#5d1a30) +U 3 (#1192e1) +R 4 (#4c67a0) +U 5 (#954a91) +L 8 (#3348c0) +U 3 (#306c01) +L 4 (#694200) +U 8 (#52c163) +L 3 (#6abee0) +U 3 (#26c123) +L 4 (#6abee2) +U 4 (#4c3413) +L 9 (#4e8800) +U 5 (#1192e3) +L 3 (#2bb700) +U 4 (#21ceb1) +L 12 (#4ec360) +U 3 (#21ceb3) +L 4 (#32f940) +U 8 (#5d5f73) +L 4 (#1dcf10) +U 9 (#3cf413) +L 3 (#7cc870) +U 8 (#5f0953) +L 4 (#376c70) +U 6 (#01d623) +L 5 (#697e50) +U 5 (#99e693) +L 5 (#6f63b0) +U 3 (#576c53) +R 10 (#7fa030) +U 3 (#1fd933) +L 5 (#4eb2d2) +U 6 (#39a1f3) +L 4 (#3f0452) +D 4 (#42ffd3) +L 3 (#5b9d52) +U 7 (#25c2d3) +L 8 (#5ba250) +D 7 (#40d763) +L 5 (#5ba252) +D 3 (#5f2a73) +L 7 (#477ce2) +D 3 (#2652d1) +L 5 (#453770) +D 5 (#758781) +L 11 (#453772) +D 3 (#937381) +L 2 (#119e62) +D 5 (#131891) +R 5 (#3285e2) +U 3 (#211fd3) +R 11 (#8349d2) +U 4 (#211fd1) +R 4 (#3246c2) +U 3 (#2515f3) +R 9 (#5a5bd0) +D 7 (#6fbf83) +R 4 (#6a5680) +D 3 (#6fbf81) +R 9 (#329240) +D 7 (#750063) +R 5 (#5e71f2) +D 9 (#3358d3) +L 6 (#1d2652) +D 4 (#6a8ee3) +L 3 (#4e9cd2) +U 6 (#3e8623) +L 2 (#3607d2) +U 5 (#379d43) +L 6 (#3cf342) +U 3 (#853b63) +L 3 (#737102) +D 3 (#1de1b3) +L 2 (#66ff82) +D 10 (#634163) +L 3 (#2eff02) +U 6 (#2ac343) +L 2 (#528a42) +U 7 (#4d81d3) +L 3 (#2ea1e2) +D 5 (#19e063) +L 6 (#8b5a82) +D 7 (#4b8e33) +L 4 (#5e41d0) +D 2 (#159903) +L 5 (#31f3c0) +D 9 (#537013) +L 2 (#31f3c2) +D 7 (#4b7b43) +L 4 (#5bd890) +D 10 (#1be163) +L 5 (#0c3340) +D 3 (#540d83) +L 9 (#2449f0) +U 6 (#9411c1) +L 7 (#766db0) +U 7 (#9411c3) +L 4 (#37ee30) +D 3 (#516ad3) +L 3 (#0991b0) +D 2 (#98a733) +L 5 (#0ea042) +D 3 (#513f83) +L 2 (#a0c682) +D 8 (#616323) +L 4 (#a0c680) +D 3 (#4555b3) +L 3 (#79e032) +U 9 (#673de3) +L 4 (#5904b0) +U 7 (#495bd3) +L 3 (#5904b2) +U 2 (#49a633) +L 5 (#76a9c2) +U 10 (#10de23) diff --git a/18/part1.pl b/18/part1.pl new file mode 100644 index 0000000..6c5913d --- /dev/null +++ b/18/part1.pl @@ -0,0 +1,27 @@ +:- use_module(library(pio)). +:- use_module(library(dcg/basics)). +:- initialization(main, main). + +main([FileName|_]) :- + input(FileName, Moves), + area(Moves, Area), + write(Area), nl. + +area(Moves, Area) :- + area(Moves, 0, A1), MainArea is abs(A1), + convlist([r-N, N]>>(true), Moves, Horzs), sum_list(Horzs, Horz), + convlist([u-N, N]>>(true), Moves, Verts), sum_list(Verts, Vert), + Area is MainArea + Horz + Vert + 1. + +area([], _, 0). +area([u-Len|Moves], H, Area) :- NewH is H + Len, area(Moves, NewH, Area). +area([d-Len|Moves], H, Area) :- NewH is H - Len, area(Moves, NewH, Area). +area([r-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 + H*Len. +area([l-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 - H*Len. + +input(FileName, Moves) :- phrase_from_file(moves(Moves), FileName). +moves([]) --> eos, !. +moves([Move|Moves]) --> move(Move), moves(Moves). +move(DirAtom-Len) --> + alpha_to_lower(Dir), " ", number(Len), " (#", xdigits(_Color), ")", ("\n"; eos), + {char_code(DirAtom, Dir)}. diff --git a/18/test.txt b/18/test.txt new file mode 100644 index 0000000..fc7612e --- /dev/null +++ b/18/test.txt @@ -0,0 +1,14 @@ +R 6 (#70c710) +D 5 (#0dc571) +L 2 (#5713f0) +D 2 (#d2c081) +R 2 (#59c680) +D 2 (#411b91) +L 5 (#8ceee2) +U 2 (#caa173) +L 1 (#1b58a2) +U 2 (#caa171) +R 2 (#7807d2) +U 3 (#a77fa3) +L 2 (#015232) +U 2 (#7a21e3)