From 09bc5908e1bbb2c20f217370f16fcd1620921fb8 Mon Sep 17 00:00:00 2001 From: Connor Johnstone Date: Tue, 19 Dec 2023 00:05:37 -0700 Subject: [PATCH] This day was pretty easy, though I made a stupid mistake and took too long. Also started way late. But only 13 lines total for part 2 --- day_18/Pipfile | 12 + day_18/Pipfile.lock | 64 ++++ day_18/input.txt | 794 ++++++++++++++++++++++++++++++++++++++++++++ day_18/main.py | 5 + day_18/part1.py | 31 ++ day_18/part2.py | 27 ++ day_18/test.py | 32 ++ 7 files changed, 965 insertions(+) create mode 100644 day_18/Pipfile create mode 100644 day_18/Pipfile.lock create mode 100644 day_18/input.txt create mode 100644 day_18/main.py create mode 100644 day_18/part1.py create mode 100644 day_18/part2.py create mode 100644 day_18/test.py diff --git a/day_18/Pipfile b/day_18/Pipfile new file mode 100644 index 0000000..e831a7c --- /dev/null +++ b/day_18/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +numpy = "*" + +[dev-packages] + +[requires] +python_version = "3.11" diff --git a/day_18/Pipfile.lock b/day_18/Pipfile.lock new file mode 100644 index 0000000..f4d4697 --- /dev/null +++ b/day_18/Pipfile.lock @@ -0,0 +1,64 @@ +{ + "_meta": { + "hash": { + "sha256": "09a1230e580eaa3316a4e22c8cde61e6c6f10a97b72d483d6afb8e89cfdda897" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.11" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "numpy": { + "hashes": [ + "sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a", + "sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6", + "sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2", + "sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79", + "sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9", + "sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919", + "sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d", + "sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060", + "sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75", + "sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f", + "sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe", + "sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167", + "sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef", + "sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75", + "sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3", + "sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7", + "sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7", + "sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d", + "sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b", + "sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186", + "sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0", + "sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1", + "sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6", + "sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e", + "sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523", + "sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36", + "sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841", + "sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818", + "sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00", + "sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80", + "sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440", + "sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210", + "sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8", + "sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea", + "sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec", + "sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==1.26.2" + } + }, + "develop": {} +} diff --git a/day_18/input.txt b/day_18/input.txt new file mode 100644 index 0000000..6bee4c1 --- /dev/null +++ b/day_18/input.txt @@ -0,0 +1,794 @@ +R 4 (#4b18e0) +U 4 (#0b4f93) +R 4 (#6d70b0) +U 12 (#86edc3) +R 4 (#435460) +U 3 (#07f023) +R 8 (#33dd00) +U 5 (#599aa3) +L 11 (#83c702) +U 5 (#3f0501) +L 7 (#4bf232) +U 9 (#3f0503) +L 2 (#4955d2) +U 5 (#24f2e3) +L 9 (#16abf2) +U 6 (#60f753) +L 3 (#678dd2) +U 3 (#736093) +L 3 (#007482) +D 7 (#446e11) +L 6 (#0482a2) +D 8 (#997fd1) +L 4 (#4891e2) +D 6 (#2547b1) +L 5 (#501bf2) +D 8 (#7ed033) +L 8 (#0dabe2) +U 8 (#7184d3) +L 2 (#748a42) +U 5 (#12e093) +L 7 (#672432) +D 7 (#19c6a3) +L 4 (#1c5c22) +D 2 (#6e8a23) +L 10 (#5cd602) +U 9 (#1d8ff3) +L 7 (#359ce2) +U 6 (#333143) +R 11 (#0422f2) +D 10 (#235323) +R 6 (#64bc72) +U 10 (#6ea5f3) +R 11 (#68df60) +U 10 (#0952c3) +L 4 (#5206d2) +U 6 (#09c2a3) +L 5 (#45f7e0) +U 6 (#6d15e3) +L 6 (#271740) +D 6 (#6d15e1) +L 7 (#2e6a20) +U 9 (#178883) +L 9 (#430370) +U 4 (#2ee7e3) +L 7 (#8bdcf0) +D 9 (#5cebd3) +L 3 (#3d5a50) +D 4 (#5ecc23) +L 8 (#095b52) +U 9 (#3b7121) +L 10 (#8061b2) +U 4 (#3b7123) +L 7 (#209272) +U 4 (#493833) +L 9 (#7d9b02) +U 5 (#283633) +L 3 (#0db702) +U 3 (#437d73) +L 14 (#721282) +U 4 (#059a63) +L 2 (#4630d2) +U 5 (#6c5f43) +L 13 (#2949c2) +U 3 (#590a93) +R 5 (#4f5650) +U 5 (#71c3e3) +L 8 (#308540) +D 15 (#4fbc53) +L 2 (#4fa760) +U 15 (#41d523) +L 8 (#6bd380) +U 6 (#5cb553) +R 6 (#76acc0) +U 10 (#6be3a3) +R 6 (#5d61b0) +D 10 (#6dd101) +R 4 (#04f600) +U 4 (#4ea101) +R 2 (#6c2630) +U 5 (#498ac1) +R 5 (#0667a0) +U 5 (#120ef3) +R 3 (#31c080) +U 5 (#861cd3) +R 11 (#364e90) +D 5 (#6dd103) +R 9 (#6fe5b0) +D 11 (#119d43) +R 6 (#111310) +D 14 (#2ff323) +R 7 (#177432) +U 12 (#0ccbd3) +R 2 (#77c592) +U 9 (#6eee43) +R 10 (#21e622) +U 8 (#0bc513) +L 8 (#5398a0) +U 2 (#53cca3) +L 10 (#463c20) +U 5 (#53cca1) +R 8 (#174b20) +U 11 (#09ddc3) +R 6 (#20c940) +U 11 (#2fc6c3) +R 8 (#7ab1b0) +U 6 (#7ab291) +R 3 (#057160) +U 6 (#008331) +R 11 (#62c440) +U 12 (#3233a1) +R 2 (#1ceaa0) +U 4 (#4ef663) +R 3 (#7e5670) +U 2 (#4ef661) +R 5 (#3ccc40) +U 8 (#6e3531) +L 13 (#3964a0) +U 5 (#68b801) +R 13 (#83d220) +U 5 (#459901) +R 2 (#053a70) +U 6 (#4d18d3) +R 11 (#8a23d0) +U 8 (#4d18d1) +R 9 (#2cce90) +D 14 (#48af61) +L 6 (#045500) +D 6 (#0b4971) +L 8 (#18fa70) +D 7 (#7d8d03) +L 3 (#6ba530) +D 9 (#061783) +R 9 (#2c9c30) +D 13 (#402993) +R 8 (#18e9c0) +D 7 (#51e7a3) +R 15 (#18e9c2) +D 3 (#0ae133) +R 5 (#4929f0) +D 3 (#8d4623) +R 4 (#277680) +U 11 (#034583) +R 7 (#1ea1a0) +D 11 (#6cc5e3) +R 8 (#8894e0) +U 5 (#2fc6c1) +R 6 (#4dd6d0) +U 3 (#7f5b21) +R 11 (#219440) +U 4 (#2db8a1) +R 6 (#4053a0) +U 6 (#2df7e1) +R 12 (#086710) +U 8 (#47c7c1) +R 4 (#41ee90) +U 3 (#1dfa61) +R 3 (#5c3610) +U 7 (#483023) +R 10 (#2b6060) +D 3 (#327133) +R 8 (#2e4b30) +D 14 (#212321) +R 8 (#4bfd00) +D 5 (#5f0b81) +R 4 (#718450) +D 14 (#320dd1) +R 5 (#103630) +D 6 (#911953) +R 4 (#3f6190) +D 7 (#212323) +L 4 (#7f84b0) +D 10 (#2816a1) +R 5 (#026f80) +D 2 (#528ab1) +R 8 (#04e160) +D 11 (#655ca3) +R 2 (#0a1bf0) +D 3 (#6872c3) +R 12 (#7ad510) +D 8 (#72fe63) +R 7 (#109a50) +D 9 (#66ae31) +R 3 (#0828a2) +D 12 (#039eb1) +R 8 (#6f2c60) +D 6 (#46dae1) +R 12 (#76c900) +D 8 (#724711) +L 10 (#0a41a0) +D 8 (#73f301) +L 2 (#029092) +D 5 (#2ee5b3) +R 9 (#794702) +U 9 (#2ee5b1) +R 9 (#745f72) +U 2 (#108e61) +R 4 (#30e792) +U 10 (#099281) +R 11 (#347f32) +U 4 (#319ab1) +L 5 (#44a712) +U 9 (#623681) +L 6 (#3b5002) +U 10 (#25e431) +R 6 (#4f3f22) +U 4 (#226f51) +R 5 (#26f7b2) +U 8 (#588341) +R 4 (#09de02) +D 11 (#423f21) +L 6 (#6c9ee2) +D 10 (#423f23) +R 6 (#3badf2) +D 4 (#2c0a93) +R 4 (#521a32) +U 7 (#4ee803) +R 15 (#47f6d2) +U 2 (#673651) +R 4 (#5c10b2) +U 9 (#4dc641) +L 11 (#4d7032) +U 6 (#299111) +L 8 (#8d06b2) +U 8 (#22e4d1) +L 7 (#7dac02) +U 4 (#58e171) +L 7 (#17e332) +D 12 (#211931) +L 4 (#7e1732) +D 5 (#502911) +L 4 (#88c6c2) +D 5 (#430ba1) +L 3 (#3e4de0) +D 13 (#481b11) +L 5 (#5925e0) +U 4 (#1cecb1) +L 7 (#11ecf0) +U 7 (#634bc1) +R 7 (#6218d2) +U 7 (#7990f3) +L 5 (#576b42) +U 4 (#7990f1) +L 10 (#145832) +U 9 (#609ef1) +L 3 (#0d8822) +U 4 (#2b1f83) +L 3 (#77a562) +U 5 (#2b1f81) +L 6 (#3d05c2) +U 7 (#4b56d1) +L 5 (#1f6272) +U 8 (#916891) +R 6 (#087ce0) +U 6 (#2cf203) +R 12 (#285e60) +U 9 (#6ae623) +R 9 (#8a34a0) +U 9 (#6ae621) +L 9 (#15b200) +U 11 (#40c541) +R 5 (#0c7fc0) +D 7 (#2d5ad3) +R 9 (#42f280) +D 7 (#8140a3) +R 3 (#255770) +D 10 (#8140a1) +R 12 (#4ac260) +D 5 (#2d5ad1) +R 8 (#083780) +U 15 (#40c543) +R 7 (#028ab0) +U 13 (#2cf201) +R 5 (#1461d0) +U 2 (#23bff1) +R 4 (#1a4992) +U 3 (#355fc1) +R 7 (#6cafd2) +U 5 (#355fc3) +R 6 (#226752) +D 6 (#5af021) +R 11 (#526e82) +D 6 (#055ac1) +R 4 (#460a42) +D 3 (#055ac3) +R 6 (#565542) +D 3 (#3cd6a1) +L 7 (#2da922) +D 10 (#708ea3) +R 7 (#687472) +D 4 (#4ec333) +R 4 (#58d602) +U 7 (#4dd3e3) +R 3 (#23a7c0) +U 10 (#51fa83) +R 5 (#23a7c2) +D 5 (#188363) +R 14 (#5bc432) +U 4 (#3f0d23) +R 8 (#27a940) +U 3 (#62a3a3) +R 10 (#27a942) +U 6 (#0ceab3) +R 2 (#4479c2) +U 12 (#8beb63) +L 2 (#0b84a2) +U 3 (#3aa313) +L 7 (#270672) +U 15 (#4bd563) +L 5 (#4d8072) +U 6 (#045183) +R 12 (#08fed2) +U 11 (#52d323) +R 2 (#050992) +U 9 (#618533) +R 4 (#17a282) +D 7 (#08e921) +R 3 (#1a0d22) +D 6 (#0e8541) +R 11 (#61b232) +D 7 (#6635f1) +R 5 (#617832) +D 5 (#08f4f3) +R 2 (#490c22) +D 3 (#234821) +R 3 (#476942) +D 12 (#234823) +R 11 (#31b6d2) +D 4 (#08f4f1) +L 6 (#129582) +D 6 (#507ed1) +R 6 (#1e7010) +D 8 (#5490e1) +R 10 (#093bb0) +D 4 (#7cefc1) +R 9 (#6fe430) +D 3 (#0160b1) +L 8 (#1a8570) +D 2 (#2722f3) +L 4 (#2eb860) +D 12 (#572d83) +L 7 (#556c20) +U 12 (#50d5c1) +L 6 (#3a0932) +D 3 (#0a1701) +L 6 (#2294f0) +D 4 (#5f04e1) +L 13 (#62c590) +D 7 (#5f04e3) +R 6 (#1660e0) +D 2 (#34e001) +R 6 (#23b340) +D 12 (#1e92e1) +R 6 (#786d10) +U 12 (#44f8d1) +R 4 (#786d12) +D 3 (#3f6cf1) +R 3 (#2e2812) +D 3 (#185ac3) +R 3 (#7976e2) +D 14 (#0a5201) +R 4 (#15e3e2) +D 3 (#825221) +R 3 (#699e12) +U 3 (#8ca423) +R 14 (#04ffb2) +U 3 (#185ac1) +R 2 (#0a3482) +U 4 (#59d541) +L 10 (#5b8ab2) +U 4 (#59d543) +L 6 (#395af2) +U 3 (#2fdcb1) +R 7 (#1d5670) +U 3 (#3801c1) +R 6 (#65de30) +U 7 (#522db1) +R 11 (#9a9020) +U 12 (#382413) +R 11 (#55b6c0) +U 8 (#382411) +L 4 (#4549e0) +U 7 (#2f1091) +L 7 (#127550) +U 7 (#3e2ee1) +R 7 (#1b7ba0) +U 5 (#0177e1) +L 10 (#581e30) +U 4 (#0177e3) +L 8 (#287b30) +U 5 (#4667a1) +R 6 (#3a6730) +U 6 (#7575e1) +R 6 (#4d8f90) +U 8 (#06a251) +R 2 (#32a980) +U 5 (#92bbf3) +R 3 (#465200) +D 4 (#1e82a3) +R 7 (#5e49b0) +U 4 (#282471) +R 6 (#95ba62) +U 3 (#3fc1e1) +R 3 (#95ba60) +U 9 (#495841) +R 3 (#3bece0) +D 13 (#06a253) +R 3 (#58ed10) +D 4 (#3c4df3) +R 7 (#830800) +D 10 (#3c4df1) +R 4 (#39bca0) +D 4 (#0e26a1) +R 6 (#09cd40) +D 6 (#725971) +R 10 (#624800) +D 11 (#49ae11) +R 11 (#3ed060) +D 7 (#49ae13) +L 12 (#3e0b20) +D 4 (#569191) +L 3 (#1bb070) +D 7 (#0b1803) +L 10 (#045fa0) +U 6 (#8cb0a3) +L 7 (#57ca40) +D 6 (#146f43) +L 9 (#5ad0b0) +D 3 (#22f873) +R 10 (#249e42) +D 5 (#429003) +R 11 (#35bf52) +D 7 (#162bc1) +R 7 (#5689a2) +D 10 (#162bc3) +R 12 (#286a32) +D 9 (#54b443) +R 10 (#505c32) +D 3 (#831903) +R 7 (#003ab0) +D 11 (#6a9af3) +R 10 (#39f710) +U 11 (#1f31b3) +R 5 (#6fc5c0) +D 4 (#071b73) +R 7 (#3fe110) +D 9 (#5fd6e3) +R 9 (#3fd500) +D 3 (#2fc9b3) +R 6 (#727a40) +D 7 (#531d23) +R 14 (#02afc0) +D 6 (#1e5cb1) +R 4 (#717490) +D 12 (#6efba1) +R 11 (#5996f0) +U 5 (#763861) +L 5 (#444cf0) +U 8 (#763863) +R 7 (#2e2c60) +U 7 (#543fa1) +L 7 (#95e230) +U 3 (#543fa3) +R 5 (#41fd20) +U 3 (#19bf61) +R 5 (#656540) +D 7 (#391283) +R 4 (#33ebc0) +D 13 (#391281) +R 9 (#709320) +D 6 (#498291) +R 3 (#03c942) +D 6 (#3391a1) +R 6 (#5a83e2) +D 5 (#4eaff1) +R 7 (#2ca112) +D 4 (#2de1c1) +L 6 (#8724f0) +D 9 (#4b7fc1) +L 5 (#005232) +U 9 (#322291) +L 7 (#6a7682) +D 4 (#5d2381) +L 5 (#6e5312) +U 13 (#5d2383) +L 8 (#4a5e52) +D 13 (#61a5a1) +L 3 (#2adb12) +D 6 (#1056e3) +L 3 (#74eb12) +U 10 (#1056e1) +L 12 (#4c3122) +D 9 (#02d251) +R 9 (#30a702) +D 7 (#7cd9f1) +R 10 (#56a522) +D 6 (#25e4f1) +R 7 (#720682) +D 3 (#11a711) +R 10 (#4810c0) +U 9 (#7233d1) +R 13 (#47d8b0) +D 5 (#222c51) +R 6 (#270630) +U 9 (#6c2991) +R 5 (#251ce0) +D 9 (#0ce373) +R 5 (#0f3af0) +D 4 (#234033) +L 13 (#399410) +D 3 (#1091f3) +L 11 (#12ab92) +D 3 (#2c05c3) +L 9 (#53cc00) +D 5 (#662eb3) +R 3 (#53cc02) +D 3 (#19fbf3) +R 8 (#12ab90) +D 11 (#13a3c3) +R 10 (#6b7ed0) +D 7 (#480071) +L 10 (#39ba10) +D 12 (#414181) +L 11 (#6be3c0) +D 4 (#308403) +L 4 (#5081d2) +U 3 (#4a1c33) +L 6 (#412360) +U 11 (#5cad03) +L 4 (#412362) +U 11 (#1670a3) +L 8 (#5081d0) +U 7 (#36b3f3) +L 8 (#4a86c0) +D 7 (#1903f1) +L 11 (#5aa690) +U 9 (#88cd01) +L 3 (#3843d0) +U 14 (#4c44d1) +L 8 (#92ea62) +D 5 (#205b31) +L 14 (#2d2130) +D 4 (#1600d1) +L 2 (#5eed20) +D 8 (#504601) +L 9 (#4238f2) +D 10 (#8a3821) +L 3 (#524dd2) +D 6 (#8a3823) +L 3 (#106f82) +U 8 (#3d0d81) +L 6 (#1ec032) +U 6 (#040993) +L 4 (#1ff1d2) +D 14 (#17b973) +L 3 (#3c2ae2) +D 7 (#7c2501) +L 7 (#633cd2) +D 4 (#6530d3) +L 3 (#082de2) +D 7 (#16f433) +L 13 (#89eb52) +D 5 (#17b971) +L 3 (#252512) +U 15 (#040991) +L 2 (#90d092) +U 10 (#0a1021) +L 8 (#1cd900) +U 6 (#4a13d1) +R 10 (#7a6bf2) +U 4 (#4683c1) +R 7 (#7a6bf0) +D 11 (#3a66f1) +R 8 (#488f20) +U 11 (#7135a1) +R 5 (#4cc380) +U 5 (#0bf121) +R 3 (#4c2e80) +U 2 (#7908a1) +R 3 (#259e00) +U 10 (#6bafe3) +L 5 (#52e6d0) +U 4 (#506603) +L 6 (#1fec10) +D 7 (#3a1983) +R 6 (#389e30) +D 2 (#2f7281) +L 6 (#55f170) +D 7 (#4cb8e1) +L 5 (#389e30) +U 6 (#2642e1) +L 10 (#7394e0) +U 3 (#642bf1) +R 10 (#7394e2) +U 7 (#132c01) +L 6 (#3c4a80) +D 4 (#3e4d21) +L 4 (#989ad0) +U 7 (#473211) +L 8 (#0aa900) +D 6 (#3a8a11) +L 12 (#4307a2) +D 9 (#13b0c1) +L 6 (#7e59a2) +D 11 (#00a041) +L 3 (#44b0d2) +D 6 (#0efc51) +L 6 (#8a1302) +D 9 (#160fa1) +L 4 (#4afa62) +D 2 (#68e871) +L 14 (#5ecd60) +D 5 (#6a51d1) +L 5 (#764000) +D 8 (#1a6d61) +L 4 (#713042) +D 14 (#0b92e1) +L 5 (#5b77e2) +D 3 (#0a0581) +R 10 (#212752) +D 3 (#0a0583) +R 14 (#3f0ca2) +D 8 (#13d911) +R 3 (#307832) +D 4 (#72d201) +R 6 (#133522) +U 13 (#6e4581) +R 4 (#70fe22) +D 13 (#082221) +R 7 (#44fff2) +D 4 (#731171) +R 3 (#10eda2) +D 9 (#0e5d31) +L 14 (#37bc32) +D 6 (#3852c3) +L 7 (#5f43c2) +U 13 (#8c7593) +L 9 (#2ff4f2) +U 10 (#1787b3) +L 13 (#68b4a2) +U 3 (#15fd23) +L 3 (#515622) +U 3 (#618313) +L 11 (#2d09d2) +U 10 (#6bb2f3) +L 5 (#1f22a2) +U 10 (#4d8e33) +L 6 (#1cb690) +U 3 (#09c3b3) +L 9 (#214c20) +U 9 (#5bfe23) +L 9 (#848910) +U 10 (#1a73e3) +L 10 (#3d9252) +U 3 (#089003) +R 11 (#7ddbb2) +U 8 (#20c473) +R 15 (#071dc2) +U 7 (#554823) +R 13 (#0cfb42) +U 7 (#1ccaa1) +L 15 (#847822) +U 8 (#5f0271) +L 4 (#03cdd2) +U 10 (#4f69b1) +L 3 (#4b1902) +U 8 (#8129b1) +L 4 (#5e69f2) +D 5 (#1f33b3) +L 5 (#2e2582) +D 13 (#67aea3) +L 4 (#54aba2) +U 3 (#08d7a3) +L 4 (#4eebe0) +D 8 (#030763) +L 9 (#2d4760) +D 14 (#79e223) +L 9 (#7c3342) +D 3 (#334c93) +L 4 (#2b0202) +D 9 (#04d053) +L 2 (#1475a2) +D 7 (#8aed93) +L 8 (#62b4f2) +D 5 (#14c931) +R 11 (#29bc82) +D 3 (#65a951) +R 12 (#656f62) +D 3 (#7a7283) +L 8 (#2bec52) +D 7 (#1a75a3) +L 8 (#988402) +D 4 (#1a75a1) +L 3 (#1aad22) +D 9 (#373923) +L 10 (#7e3ef0) +U 7 (#3e1c93) +L 11 (#3f89d0) +U 6 (#3e1c91) +L 3 (#652e40) +D 9 (#35acc3) +L 7 (#5b0fa0) +U 4 (#46ca63) +L 10 (#079fa0) +U 7 (#391523) +L 3 (#079fa2) +U 3 (#585573) +L 8 (#1f43e0) +D 2 (#403c21) +L 9 (#144b10) +D 5 (#8fa921) +L 5 (#144b12) +U 7 (#084fb1) +L 4 (#661600) +D 6 (#5e06f3) +L 13 (#3f87a0) +D 8 (#3ca8a1) +L 13 (#4214e0) +D 10 (#567b51) +R 4 (#7a3080) +D 8 (#17de11) +R 8 (#644090) +D 12 (#55ba83) +R 3 (#025e60) +D 8 (#554783) +R 6 (#0d2eb0) +D 10 (#552813) +L 6 (#61a7d0) +D 10 (#272cb3) +L 7 (#34d6a0) +D 3 (#36cf03) +R 11 (#14be00) +D 3 (#52b543) +R 4 (#1fa362) +D 11 (#713693) +L 3 (#652112) +D 8 (#5c8463) +L 12 (#4c1362) +D 4 (#66e201) +L 8 (#07caa2) +D 9 (#6ccbd1) +L 3 (#3b9ee2) +D 5 (#5798b1) +L 13 (#4fb342) +U 6 (#231223) +L 2 (#33e3b2) +U 5 (#022ea3) +L 6 (#3f1112) +U 6 (#3dde83) +L 6 (#2732a0) +U 8 (#1e6bc3) +L 8 (#10f4e0) +U 15 (#45e363) +L 3 (#10f4e2) +U 4 (#4c9523) +R 11 (#2732a2) +U 12 (#174303) +L 10 (#5b4532) +U 13 (#6195e1) +L 8 (#7fab60) +U 2 (#1e7dd1) +L 2 (#7fab62) +U 12 (#4da741) +L 4 (#09efc2) +D 5 (#3d0d83) +L 5 (#47d532) +U 6 (#1f7441) +L 12 (#558832) +D 6 (#24e093) +L 4 (#20bfc2) +U 6 (#606283) +L 11 (#639142) +U 2 (#854311) +L 5 (#318ff2) +D 8 (#7037c1) +L 12 (#1ee752) +U 5 (#6bad43) +L 5 (#662cd2) +U 6 (#23fec3) +L 6 (#11cec2) +U 9 (#0c5b23) +L 8 (#91c052) +U 3 (#62e783) +L 6 (#08ee02) +U 11 (#11a283) diff --git a/day_18/main.py b/day_18/main.py new file mode 100644 index 0000000..645f348 --- /dev/null +++ b/day_18/main.py @@ -0,0 +1,5 @@ +import part1 as p1 +import part2 as p2 + +# print(p1.run()) +print(p2.run()) diff --git a/day_18/part1.py b/day_18/part1.py new file mode 100644 index 0000000..07ea2d6 --- /dev/null +++ b/day_18/part1.py @@ -0,0 +1,31 @@ +import numpy as np + +def test(input, solution): + # print(f"Running input {input}") + result = process(input) + print(f"Solution was {result}") + assert result == solution + +def run(): + file = open("input.txt", "r") + return process(file.read()[:-1]) + +def process_line(line): + (direction, amount, _) = line.split() + return direction, int(amount) + +direction_map = {"L": (0,-1), "R": (0,1), "D": (-1,0), "U": (1,0)} + +def process(input): + points = [] + perimeter_area = 0 + current_point = (0,0) + for line in input.split("\n"): + (dir_letter, amount) = process_line(line) + direction = (direction_map[dir_letter][0] * amount, direction_map[dir_letter][1] * amount) + perimeter_area += amount + current_point = (current_point[0] + direction[0], current_point[1] + direction[1]) + points.append(current_point) + indices = list(range(len(points) - 1)) + [-1] + determinants = [np.linalg.det(np.array([[points[i][1], points[i+1][1]],[points[i][0], points[i+1][0]]])) for i in indices] + return round(abs(sum(determinants))/2) + perimeter_area/2 + 1 diff --git a/day_18/part2.py b/day_18/part2.py new file mode 100644 index 0000000..ab3eca5 --- /dev/null +++ b/day_18/part2.py @@ -0,0 +1,27 @@ +from numpy.linalg import det + +def test(input, solution): + # print(f"Running input {input}") + result = process(input) + print(f"Solution was {result}") + assert result == solution + +def run(): + file = open("input.txt", "r") + return process(file.read()[:-1]) + + +def process(input): + points = [] + perimeter_area = 0 + current_point = (0,0) + for line in input.split("\n"): + dir_letter = {"2": "L", "0": "R", "1": "D", "3": "U"}[line.split()[2][7]] + amount = int(line.split()[2][2:7], 16) + direction = [amount * x for x in {"L": (0,-1), "R": (0,1), "D": (-1,0), "U": (1,0)}[dir_letter]] + perimeter_area += amount + current_point = [sum(x) for x in zip(current_point, direction)] + points.append(current_point) + indices = list(range(len(points) - 1)) + [-1] + determinants = [det([[points[i][1], points[i+1][1]],[points[i][0], points[i+1][0]]]) for i in indices] + return round(abs(sum(determinants))/2) + perimeter_area/2 + 1 diff --git a/day_18/test.py b/day_18/test.py new file mode 100644 index 0000000..d95f052 --- /dev/null +++ b/day_18/test.py @@ -0,0 +1,32 @@ +import part1 +import part2 + +part1.test("""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)""", 62) + +part2.test("""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)""", 952408144115)