From 92f2a860e8fbc75a11c801bfda4ea119217712ba Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Mon, 2 Dec 2024 07:01:41 +0000 Subject: [PATCH] Initial commit Add boilerplate and day1 solution --- .envrc | 1 + .gitignore | 1 + day1/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++ day1/run.py | 44 +++ flake.lock | 27 ++ flake.nix | 33 ++ 6 files changed, 1106 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 day1/input.txt create mode 100644 day1/run.py create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..1d953f4 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29963da --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.direnv/ diff --git a/day1/input.txt b/day1/input.txt new file mode 100644 index 0000000..2281447 --- /dev/null +++ b/day1/input.txt @@ -0,0 +1,1000 @@ +15244 50562 +81245 49036 +92897 21393 +63271 60643 +49672 33212 +92232 76048 +53492 58600 +92941 61161 +58509 86979 +28174 73806 +70084 21118 +24410 68037 +84499 63407 +66548 35177 +65580 63759 +87805 49036 +83099 19486 +18390 12243 +26848 76511 +18807 86451 +72147 24247 +79927 19614 +11257 32484 +58028 46123 +75951 64756 +50715 78058 +95795 74458 +32111 39063 +46546 38789 +72734 39167 +98182 93444 +62716 53597 +89475 25175 +39176 55091 +40923 88724 +62512 51774 +86618 93444 +52758 47249 +13428 93526 +21791 94210 +93809 21118 +17938 14392 +60129 64756 +70192 49036 +12155 79882 +40333 53270 +23806 88706 +46661 85277 +88336 57672 +87513 36284 +41580 97455 +39488 79018 +53900 78058 +63780 98092 +18471 20090 +77849 73059 +93111 78100 +52950 22317 +81379 35177 +91351 19771 +14227 53597 +51335 39645 +98624 98092 +21994 54585 +60107 60337 +63161 47739 +42618 96226 +94665 84252 +79153 34048 +78730 80552 +75722 70308 +68857 47918 +88672 98092 +59881 27613 +85772 32111 +30276 98092 +14586 84246 +67593 49036 +72269 13771 +25858 56490 +33541 15922 +16446 54557 +47844 62540 +78173 49722 +50682 88706 +75282 74146 +62042 83481 +18797 76066 +24212 35217 +55048 57348 +91631 84573 +93807 97649 +88119 98092 +19366 77445 +76255 50452 +98264 93444 +64583 34766 +96480 54682 +67367 64709 +12629 53597 +55622 98092 +48715 75722 +38717 98460 +88940 42098 +57583 21667 +13512 32111 +89814 60737 +64756 93444 +16224 53597 +10346 46433 +73809 55198 +80544 20677 +11856 76359 +59087 21118 +72673 20090 +49449 45231 +20810 98650 +28257 76359 +72761 88706 +87721 84970 +33910 17682 +71512 76359 +51593 34928 +52645 73953 +65785 21745 +29202 39203 +84191 30175 +90538 28190 +36816 33095 +74544 38282 +97584 54184 +58739 93390 +75540 64756 +68067 64756 +52407 25292 +15044 66413 +20591 93444 +25885 37703 +26653 32104 +42596 88313 +23950 64756 +52254 88313 +70806 44075 +42195 20677 +36372 36394 +47944 93575 +38297 21118 +19998 76359 +88241 78058 +73698 44859 +92258 29814 +98092 78058 +28030 88927 +53514 59214 +77999 30893 +66582 71673 +79423 10257 +46938 86494 +42971 21118 +11339 13583 +71889 43763 +25429 62716 +81687 15843 +35428 14294 +21885 88053 +98374 37224 +81362 34784 +41486 20677 +20831 98092 +26838 45057 +89226 64709 +11351 66528 +20955 49036 +34764 42441 +43198 21118 +54892 21799 +64587 51818 +62645 88706 +39255 32111 +65266 40330 +20283 30516 +56574 21118 +12809 35177 +23338 15079 +58721 76273 +68541 33747 +46673 34048 +59073 25694 +80216 62716 +81975 28478 +44297 45993 +34344 98092 +63009 28253 +43350 24492 +95286 35177 +33964 82330 +87854 76359 +23407 81183 +95569 74797 +45440 77445 +80991 19568 +30893 61274 +26305 69824 +60205 68773 +12663 76359 +43419 89650 +39569 77945 +73240 17501 +84277 39378 +94177 89662 +95690 94786 +92242 91731 +73905 51412 +35977 13583 +27680 20677 +79830 79733 +84278 52001 +85984 62716 +39122 37115 +78800 35929 +33253 76179 +83659 33516 +91248 15310 +89362 39762 +15884 24386 +98545 18731 +15249 34048 +47287 77445 +68392 27779 +62854 73116 +43214 39063 +65154 73341 +71451 89287 +85490 10108 +10175 60337 +79597 54843 +15040 15044 +96993 21393 +36177 66813 +44659 38606 +10713 49127 +95267 84970 +38841 75464 +33233 71632 +73302 93444 +40471 21118 +26947 80385 +39627 51365 +47637 30893 +53778 29214 +79782 45138 +10038 45411 +86184 64709 +69322 93444 +70602 88706 +85109 49036 +58501 31677 +97931 25694 +24913 88313 +19478 93437 +51774 23744 +45194 46530 +78436 13583 +75773 53334 +24862 77445 +98325 49788 +68242 44288 +21878 78058 +22527 15044 +53407 98092 +33702 78511 +76946 86061 +34943 94066 +66974 23236 +87132 37827 +28641 88706 +78825 49515 +14741 98092 +56627 38087 +47539 85498 +40528 88706 +71885 11213 +83869 60337 +13761 97944 +75267 94765 +76391 40872 +84919 45561 +82510 26839 +42950 66528 +53597 88930 +51068 43621 +41152 77639 +82758 52077 +38873 70358 +88084 36028 +96405 64127 +24799 34048 +77846 98859 +20374 69465 +63292 73846 +11172 84410 +23525 74835 +94244 21118 +32196 95922 +28936 38955 +27350 25044 +20053 63490 +62187 53533 +15008 20677 +44778 75218 +34221 98092 +39018 98053 +23017 49363 +87337 21579 +72930 17695 +93295 39063 +66854 16885 +34104 34048 +60507 13583 +10728 15374 +24778 14446 +71424 89693 +40413 18036 +78058 75722 +37560 88706 +13236 77445 +87173 93444 +73989 37520 +14985 45194 +24184 81289 +28240 76359 +12680 21118 +97498 36199 +93727 75722 +17373 64709 +15927 39063 +30358 20677 +65650 35177 +46846 81415 +53260 86686 +32998 80757 +61488 21055 +95554 23175 +19043 88313 +99442 65217 +35322 56161 +58264 30893 +48887 76048 +96519 97502 +88445 49036 +22815 21393 +26997 56009 +45084 25370 +82066 63417 +88706 13583 +37524 92452 +67340 90779 +37641 60337 +84745 45323 +11631 83982 +19247 76359 +92635 34048 +36981 35177 +31598 74065 +54121 28812 +76881 60337 +99584 27133 +55312 55677 +83419 35177 +13942 23226 +89059 79979 +45943 14892 +49359 83296 +68331 84970 +36265 20090 +46411 98346 +25016 74405 +61228 86987 +47787 64766 +61125 43591 +23793 91663 +20371 49202 +40797 98092 +45793 88706 +68119 25069 +93194 73910 +29041 68173 +40414 90131 +35827 54613 +95241 34755 +34804 49863 +19037 54929 +15853 56399 +28746 57681 +33009 13250 +37386 50787 +89907 88313 +65824 37078 +29642 18922 +25336 60337 +77952 46523 +44241 87880 +25674 39063 +21393 48408 +58355 99461 +69496 39332 +27282 98092 +69938 71743 +83723 88313 +88439 45323 +46485 88255 +39718 23226 +23065 93444 +27197 78058 +72503 76359 +20982 64709 +60535 63346 +38653 13583 +77768 52721 +11298 49544 +42013 66528 +18141 45194 +81075 96111 +39115 37630 +18584 71632 +73719 94863 +85615 69932 +16171 24776 +78057 89054 +97570 12724 +51603 32111 +62411 76116 +72300 95646 +34238 21393 +38052 45323 +29020 84647 +41893 45194 +39513 48753 +11610 14667 +95685 21393 +95779 20677 +15324 63196 +76334 94163 +68091 45194 +38482 70862 +15369 88313 +89175 64021 +60543 34048 +56673 50331 +49457 34048 +71887 13583 +88321 21118 +71071 23226 +67178 49036 +91821 21118 +20076 10076 +87303 84970 +57511 12268 +43501 30007 +91975 66528 +15448 72284 +69907 43654 +25571 11414 +52353 15044 +69803 78058 +40474 52042 +26253 70310 +39802 97896 +83210 97215 +37474 88313 +31093 97572 +42301 23226 +19726 13583 +94312 49036 +58482 25755 +98687 38510 +19047 98092 +26950 78058 +71158 28096 +96412 84970 +35920 30893 +44526 99812 +42755 51182 +24379 30893 +70947 60543 +54882 71632 +51233 33596 +20462 79975 +53935 84134 +74070 62410 +54102 22085 +13298 20677 +26602 92907 +42648 49332 +22183 93444 +30822 98092 +86804 77932 +10838 88167 +24523 65219 +41568 62650 +80060 79089 +21439 70889 +66602 41342 +19704 34111 +67226 95394 +65479 92893 +37260 49036 +31997 30937 +97707 31068 +13170 78674 +26045 35177 +24059 35177 +32491 33653 +75897 71632 +10612 84970 +11001 88313 +35498 68825 +96341 10573 +23226 39063 +69398 67618 +17730 60337 +86503 45099 +72504 98743 +82150 90026 +68294 54832 +80912 34048 +96999 49036 +97530 20090 +35480 49036 +20998 30893 +70873 60337 +91802 62572 +54034 15709 +32710 84970 +58337 58861 +59198 59125 +61993 93321 +79647 21393 +26291 54259 +74198 76048 +57851 49450 +75838 37799 +60309 13382 +86676 72545 +29406 23958 +76718 75217 +33197 67338 +65924 20094 +88612 52547 +75554 14101 +36525 94200 +70266 20090 +36358 87645 +36508 93007 +28589 91657 +48088 77015 +22798 11552 +56726 20677 +80189 32314 +21360 96490 +90866 88706 +39003 18500 +27798 10095 +66032 15135 +11051 34048 +94174 88313 +15442 61388 +10452 20090 +11929 13583 +34739 41426 +64828 49036 +73891 39034 +52449 99470 +71065 77445 +89965 71632 +60544 34717 +21118 78369 +49478 35177 +26213 93444 +49857 23226 +74220 32262 +72833 27081 +38455 99610 +54342 61755 +43456 26783 +24034 76570 +32201 17321 +23799 39823 +72637 37646 +10964 34048 +42818 20090 +21006 39063 +39063 82696 +30375 66442 +15052 93444 +87906 50391 +17028 10100 +81936 32511 +12837 64709 +16027 78058 +49036 60337 +99212 39063 +28629 21118 +65863 84395 +20677 39063 +92405 60182 +55155 39063 +39167 69664 +74584 30893 +69147 41166 +75535 23751 +41314 88960 +47916 76048 +95846 15467 +14883 29065 +85080 93428 +52335 68547 +98645 93444 +39194 96760 +73927 23226 +90575 88313 +46134 11217 +85511 31236 +10109 37785 +20240 30893 +26094 56917 +35316 34048 +73503 25694 +89783 93444 +76048 84368 +63277 64756 +70675 53597 +44803 20677 +47915 20090 +12885 20090 +96783 88706 +55441 39063 +28482 98092 +91088 20088 +56209 49036 +73427 54203 +84253 46441 +45378 88313 +61961 65758 +68877 21118 +99259 53597 +52459 33058 +52656 56240 +95881 45231 +77445 13060 +91203 71632 +80736 20127 +33376 22802 +35538 34048 +98323 92633 +51634 45231 +55669 87627 +21536 17362 +32629 77445 +49199 71632 +57371 20583 +23040 90921 +73189 76359 +18892 84970 +75932 53597 +35376 53731 +29756 88313 +80575 64370 +11795 42629 +72509 82819 +80073 66528 +39611 78343 +55678 77155 +74003 35177 +82981 87429 +44472 88313 +15879 43889 +92293 30401 +68169 72422 +46139 13583 +25753 71632 +29238 13583 +65772 94594 +72372 98661 +49282 29132 +59258 51774 +20268 19289 +68202 10161 +30853 12555 +79108 66252 +93219 49036 +97625 14093 +15662 78058 +74532 12621 +84970 66528 +43513 68633 +24015 37782 +61575 50110 +75452 32111 +95466 69622 +27039 13583 +72285 35711 +84251 33375 +29424 76359 +58618 70025 +14379 66528 +89386 88706 +93381 20090 +91398 98680 +42769 45231 +12169 87022 +25979 78058 +72635 41261 +17059 63554 +47259 79838 +76636 98092 +73546 95012 +91197 19703 +65589 88706 +73955 16375 +23737 62914 +57497 65544 +89971 53597 +65549 60337 +49793 76048 +47384 76610 +23011 71632 +50105 41881 +56427 43543 +30880 76048 +24879 88313 +68581 69278 +74682 15597 +43180 76048 +90603 49036 +52305 12532 +22850 81110 +83915 39167 +19676 43682 +18372 71954 +89452 88706 +59733 65480 +70454 82540 +60701 46004 +90655 83636 +70929 71632 +28216 29450 +96165 67274 +34322 77426 +31874 57584 +54166 90667 +99511 98508 +31060 92465 +55106 51095 +79552 22669 +27806 75575 +46797 33693 +64746 32111 +76861 10157 +76339 65246 +13583 91436 +14467 16938 +85582 35177 +13718 20378 +99759 66607 +59581 15550 +96543 22529 +86658 75460 +65202 88706 +38311 38185 +19721 38534 +20090 65369 +21044 60105 +45323 93444 +41853 88706 +48731 39841 +44220 71632 +49345 80849 +77455 96766 +64991 79807 +84833 99183 +15508 15491 +31649 95360 +47963 15187 +32556 10033 +98424 72571 +20214 45512 +92261 73300 +83550 30893 +40965 30434 +73994 76048 +55035 53597 +25828 60337 +75771 88313 +67673 77526 +44405 93052 +18454 90175 +88189 33126 +87628 49036 +71632 71504 +37621 85292 +23775 66528 +52816 35363 +30089 60337 +98618 96587 +44216 21118 +26104 88313 +42299 45510 +45953 35177 +88461 49036 +94707 98092 +44832 34048 +30018 97006 +10073 60126 +32801 21118 +93444 78058 +14724 75670 +88496 89181 +97226 64756 +44779 84970 +20417 20090 +74763 34048 +86926 21988 +82229 51396 +41522 77498 +97004 64462 +94063 53597 +33439 77445 +52901 86349 +95858 45194 +46763 37729 +99339 32386 +97353 39063 +30474 20090 +29221 48754 +54778 62716 +32771 39063 +20116 71632 +69722 87766 +51398 43440 +97793 76359 +56926 32111 +66003 75722 +11344 94388 +45264 39251 +94465 49036 +12978 38585 +17184 53348 +87705 34048 +32187 85695 +51481 78692 +54232 60337 +99572 51669 +29822 15075 +65918 82780 +66528 23226 +40810 85626 +71957 88313 +93701 88706 +10667 73326 +51857 77839 +13968 15900 +99521 15237 +43540 92443 +27624 12544 +65271 76048 +44186 14578 +33230 21393 +33874 35177 +54932 45194 +18315 53578 +69769 71632 +75322 51896 +20861 47764 +88546 23226 +29838 93444 +83883 52312 +67889 35177 +59762 39167 +30665 65756 +13966 93444 +38266 43913 +60711 39167 +42774 72205 +76359 37929 +65904 13043 +34048 77445 +38275 66528 +84943 34580 +50731 74327 +64612 53597 +14016 49346 +55402 66508 +93047 76359 +49251 20090 +75392 87115 +90871 76589 +13432 49036 +18501 19808 +73315 38104 +18380 78457 +56744 85328 +44147 13583 +98969 79480 +16683 63967 +83183 68296 +33184 80175 +36362 93444 +40671 53597 +65788 71632 +23573 75722 +50571 60337 +67765 76048 +73101 48453 +67112 35176 +46594 70172 +75172 17447 +45231 76197 +20392 53244 +35352 32191 +20609 45194 +78496 95165 +12271 85861 +89991 76048 +65923 30779 +71880 30893 +73845 19368 +25694 77445 +44679 71632 +95542 29625 +72865 48533 +43025 65302 +38909 78058 +38961 77445 +12553 66528 +66378 76359 +79514 46457 +96727 76359 +12664 91220 +22671 32111 +60272 21393 +54910 43373 +78968 52670 +31357 84820 +98176 98092 +43398 88955 +51128 13514 +97517 39212 +53814 40263 +56961 35177 +90552 31236 +13602 13583 +12187 44890 +47432 44401 +84078 64709 +77515 71632 +88313 70149 +69118 78954 +75221 27687 +64709 20090 +89680 59037 +31715 65294 +61413 21118 +75865 32111 +67755 31175 +52584 94277 +47546 95471 +91225 55015 +28913 58527 +65645 71632 +19183 39377 +47460 95947 +75848 23226 +56518 43259 +60240 48233 +31724 84970 +37699 76048 +18796 64805 +37497 45231 +42751 75722 +28509 34048 +90061 17966 +65385 83274 +72856 25904 +41016 21118 +86979 93485 +18571 88706 +37984 84970 +36879 21118 +72715 56620 +88099 34048 +61613 85581 +15090 77445 +35177 86160 +52551 58172 +60337 20677 +95870 77445 +51272 34048 +31236 15332 +77046 35697 diff --git a/day1/run.py b/day1/run.py new file mode 100644 index 0000000..4a312bb --- /dev/null +++ b/day1/run.py @@ -0,0 +1,44 @@ +from typing import List, Dict + +EXAMPLE = """ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 +""" + + +class SplitLists: + def __init__(self, input: str): + self.list1, self.list2 = zip(*[val.split() for val in input.split("\n") if val]) + + def __str__(self) -> str: + part1 = 0 + for val in self.distances(): + part1 += val + part2 = 0 + for val, occ in zip(self.list1, self.occurances()): + part2 += int(val) * occ + return f"Part1: {part1}\nPart2: {part2}" + + def distances(self) -> List[int]: + return [ + abs(int(val1) - int(val2)) + for val1, val2 in zip(sorted(self.list1), sorted(self.list2)) + ] + + def occurances(self) -> List[int]: + return [self.list2.count(key) for key in self.list1] + + +def main(*args, **kwargs) -> None: + example = SplitLists(input=EXAMPLE) + print(example) + with open("input.txt", "r") as f: + print(SplitLists(input=f.read())) + + +if __name__ == "__main__": + main() diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9f04d53 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1733064805, + "narHash": "sha256-7NbtSLfZO0q7MXPl5hzA0sbVJt6pWxxtGWbaVUDDmjs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "31d66ae40417bb13765b0ad75dd200400e98de84", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2aef058 --- /dev/null +++ b/flake.nix @@ -0,0 +1,33 @@ +{ + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + outputs = + { self, nixpkgs }: + let + supportedSystems = [ + "x86_64-linux" + "x86_64-darwin" + "aarch64-linux" + "aarch64-darwin" + ]; + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system}); + in + { + devShells = forAllSystems ( + system: + let + python = pkgs.${system}.python3; + pythonEnv = python.withPackages ( + ps: with ps; [ + isort + mypy + ] + ); + in + { + default = pkgs.${system}.mkShellNoCC { packages = [ pythonEnv ]; }; + } + ); + }; +}