commit 300f2e69b08a3e9a50a14d172fd1fbb79363cbf9 Author: Daniel McCrystal Date: Wed Dec 3 23:19:54 2025 -0500 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fcdd3fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +node_modules/ + +/target +/checkouts +/src/gen +.cpcache/ +/build + +pom.xml +pom.xml.asc +*.iml +*.jar +*.log +.shadow-cljs +.idea +.lein-* +.nrepl-* +.DS_Store + +.calva/output-window +.calva/repl.calva-repl +.lsp/.cache +.clj-kondo/.cache \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..de60014 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,48 @@ +// Configurration of the getting-started project for use with Calva +{ + // Autostart the repl and connect it to the editor (Jack-in) + // https://calva.io/customizing-jack-in-and-connect/#customizing-jack-in + "calva.autoStartRepl": true, + // If you disable the above setting, you start the repl + // manually with the command; + // "Calva: Start a Project REPL and Connect (aka Jack-in)" + // https://calva.io/connect-sequences/ + "calva.replConnectSequences": [ + { + "name": "The Get Started REPL", + "autoSelectForConnect": true, + "autoSelectForJackIn": true, + "projectRootPath": ["."], + "cljsType": "none", + "projectType": "deps.edn", + "menuSelections": { + "cljAliases": ["test"] + } + } + ], + + // The below settings are more suitible for User settings. + // They are included here to make it easier to write guides + // about how to use the project. + // You can also see them as a suggestion for a nice repl + // workflow setup. Move the settings you like to your + // User (global) settings.json file. + + // We use the Output “terminal” for evaluation results + // and side effect output. + // See https://calva.io/output/ + "calva.outputDestinations": { + "evalResults": "terminal", + "evalOutput": "terminal", + "otherOutput": "terminal" + }, + // Auto-open the Calva Inspector when the repl connects. + // (All evaluation results are available in the inspector.) + "calva.autoOpenInspector": true, + "calva.enableInspectorRainbow": true, + // Don't open the REPL prompt window automatically + // We recommend using regular editor files instead. + // See also: https://calva.io/fiddle-files/ + // (There's a command for opening the REPL window.) + "calva.autoOpenREPLWindow": false +} diff --git a/deps.edn b/deps.edn new file mode 100644 index 0000000..d69a804 --- /dev/null +++ b/deps.edn @@ -0,0 +1 @@ +{:deps {org.clojure/clojure {:mvn/version "1.12.0"}}} \ No newline at end of file diff --git a/inputs/aoc2024/input1.txt b/inputs/aoc2024/input1.txt new file mode 100644 index 0000000..e1e570b --- /dev/null +++ b/inputs/aoc2024/input1.txt @@ -0,0 +1,1000 @@ +49744 57964 +20738 85861 +20319 65072 +79568 74248 +78194 83454 +48701 94102 +69552 26808 +62781 67392 +85323 47428 +99344 72568 +27523 97243 +48039 36600 +91532 31571 +21306 31571 +52409 10805 +33901 31571 +80772 38756 +13849 54584 +72294 28326 +86065 65553 +93987 72533 +81640 39741 +25701 89912 +98611 57082 +80949 94974 +84717 61876 +31599 57082 +87119 65871 +56659 22897 +60864 45613 +64914 23217 +41931 23325 +13675 56060 +85486 66429 +99589 34428 +80942 50436 +66446 27795 +62260 94102 +17991 95754 +38666 94018 +82715 65319 +96748 95959 +76620 75639 +39724 86975 +83462 61805 +80757 66429 +80161 66912 +27338 97381 +29349 58983 +19921 95959 +33222 95959 +29944 13408 +33806 85400 +70346 93552 +62146 56773 +29455 80011 +13072 39741 +78082 85362 +68244 22897 +92699 85216 +77401 20843 +53297 82515 +47145 90966 +21714 83969 +38897 81770 +26583 96472 +33538 94102 +50607 51437 +29920 18034 +86162 28326 +20887 26374 +70011 95959 +91072 33837 +78041 78550 +36971 96504 +93552 45613 +35166 39027 +55765 21306 +62548 27834 +25287 27430 +16941 92472 +92686 35418 +18196 61876 +98271 56773 +70197 57082 +60087 36019 +94691 57607 +71834 36600 +66838 72703 +99514 30035 +87478 37752 +31855 89828 +63670 55131 +96582 96472 +56506 28326 +22986 50890 +28459 76391 +81838 56060 +73857 57964 +65911 96472 +70631 78246 +35372 83680 +59537 53263 +69802 83656 +60922 95754 +98033 55131 +61192 56233 +10544 96472 +70076 96748 +10345 72533 +44069 59959 +51368 24943 +32209 94323 +93608 15236 +66052 18518 +18194 74248 +61876 60690 +38359 91941 +99648 94102 +26870 95959 +42700 22080 +60343 57082 +86403 63844 +68549 71668 +94395 31571 +54117 76136 +82957 91182 +76970 30786 +21467 96999 +63240 61876 +41407 52311 +79043 64533 +68714 18737 +88316 43212 +74330 56060 +95754 42389 +97007 15593 +23600 61876 +35794 37497 +51155 33837 +38878 57779 +88160 66923 +85960 15356 +19608 90678 +15335 19142 +37858 28326 +52362 61567 +92440 25615 +40806 68569 +71751 97177 +42549 70211 +97573 97882 +70977 72533 +82166 87204 +73168 45613 +33988 40287 +81017 24791 +97826 39494 +49366 57853 +58833 30509 +12049 99552 +44295 28655 +33286 86203 +68443 28326 +72269 59959 +56222 28326 +66315 57082 +76461 90360 +46531 28326 +63925 80949 +34114 91182 +81992 31571 +24536 11763 +22518 70755 +11355 31571 +31145 28326 +55129 17000 +17135 54266 +19316 57094 +63206 26374 +31039 57082 +20090 45613 +25633 34423 +95984 74248 +28231 31899 +79070 33837 +20608 10744 +31697 41568 +13523 99552 +44342 74248 +58138 66429 +53615 11293 +13400 99229 +44548 22051 +24137 37497 +30607 56348 +53530 14398 +44035 83213 +56874 38315 +79779 99487 +43670 58472 +18036 94582 +92084 36917 +95857 89269 +59178 48607 +77507 14389 +24249 94980 +68856 14162 +46913 13677 +77339 59959 +40867 94102 +20361 27399 +10126 40204 +56279 57964 +37924 33837 +35066 28326 +79906 33390 +77938 18925 +30427 74248 +49792 39885 +10401 72533 +27300 12967 +15461 66429 +86381 10670 +25350 72755 +79472 90026 +11038 78545 +31085 82018 +29807 94018 +50918 37018 +56092 21306 +18839 97675 +12995 26374 +89946 62988 +59719 56060 +23083 50209 +14050 77608 +61314 53662 +55468 87206 +32735 39741 +54600 91182 +15821 77607 +88847 22065 +99872 95959 +53375 22897 +35209 56060 +77630 91182 +96800 96472 +26264 66429 +35274 25151 +25538 61863 +23186 96504 +91734 39741 +91485 59959 +89103 36687 +78785 96472 +13949 65200 +44396 31571 +16507 29954 +65200 56352 +67353 98520 +44969 45613 +70144 10313 +52148 90071 +43359 21780 +83268 52625 +92052 42928 +56773 32010 +77013 33885 +83505 38104 +44966 20462 +30790 94102 +73511 57082 +17994 13777 +52046 31571 +71445 38756 +31099 57082 +96873 72533 +63090 47113 +39327 68753 +33913 60253 +38546 53200 +16726 29956 +86820 42850 +61083 38756 +40096 55131 +95004 23484 +17136 61958 +87117 80803 +44050 92626 +65352 22440 +13813 61876 +82994 99641 +16136 45613 +13490 56775 +51061 80949 +61335 91182 +52053 33837 +50455 45613 +50980 41238 +58258 38756 +52546 10801 +32924 50528 +98144 31571 +74993 37070 +27437 36600 +46078 69578 +35719 36796 +91307 66923 +82413 98969 +21224 59959 +95996 90116 +61607 33837 +71741 14132 +48452 79616 +16452 36600 +29032 22897 +68251 80913 +15226 83141 +82072 62781 +78732 39741 +26072 57964 +44560 96564 +57175 78034 +86181 64955 +70004 13437 +21403 13757 +25396 90508 +22388 52004 +70087 96504 +35852 65506 +16149 94963 +12499 33837 +49826 57082 +64984 29694 +84227 56060 +13306 60690 +74909 11772 +74115 55131 +82914 72533 +32578 19223 +30971 86868 +58566 24936 +68362 38756 +23665 66429 +45658 28326 +29325 66923 +11640 96472 +73355 95114 +87940 62631 +47689 53862 +80029 39694 +94261 66429 +84444 34312 +65441 62781 +93632 24791 +27259 60690 +52365 20133 +39145 29503 +54077 45613 +22106 78246 +21462 78868 +61680 96472 +87688 10794 +82919 85055 +70741 55416 +94102 45462 +20816 72533 +23126 80949 +46112 54307 +78700 91182 +37497 10418 +34307 96426 +32939 91637 +55698 73001 +28008 62824 +56695 66157 +45273 79240 +26479 62781 +17458 28326 +13240 96504 +49411 16963 +11293 40392 +59492 11248 +39242 18166 +82125 19380 +10425 43878 +96169 94102 +72148 96504 +98699 55131 +64519 52279 +75839 26129 +99109 35627 +52989 24557 +19839 39741 +33892 57082 +57138 34347 +85986 61876 +63721 30120 +11728 96504 +97643 59959 +75752 35597 +78681 70815 +69201 86837 +22897 33144 +84476 38522 +70192 39741 +11796 57964 +24791 38756 +91343 82170 +71121 29320 +19725 99552 +55131 37497 +10398 64652 +43837 57964 +96472 21420 +15661 66429 +73100 81872 +16347 66923 +78667 20821 +62503 62781 +55388 26374 +30709 66923 +34765 95959 +13082 29914 +92169 76512 +74594 92616 +74628 53874 +36549 25654 +35684 62381 +44535 36600 +41585 64032 +35820 21306 +48491 57082 +36868 56612 +24081 66429 +44738 69207 +14242 61270 +66040 86333 +38756 15652 +12973 93977 +39993 52251 +74626 27427 +50280 39741 +96839 54610 +80128 91182 +78847 59523 +91308 65211 +26341 26687 +53571 95959 +18687 95754 +61386 26984 +44578 56060 +21602 66294 +39402 19968 +98549 21306 +57082 57082 +95948 96472 +55751 28461 +42067 35169 +28553 27971 +47930 26374 +32007 43799 +52341 31491 +71093 55131 +74053 19526 +59959 96472 +34557 39741 +55998 56060 +22907 45181 +23079 95754 +40762 88028 +11191 58553 +37934 56923 +12082 85950 +61831 36600 +15330 24791 +70852 41905 +85973 56773 +34561 75129 +74529 78267 +39741 28059 +20706 21306 +80276 70751 +65709 56060 +36696 94102 +94364 28879 +20233 98589 +27112 80065 +99335 59959 +37076 91182 +92060 71029 +46294 42031 +25253 24610 +45857 89413 +41637 42336 +93798 61876 +17452 94018 +36934 23498 +22889 45613 +71786 91182 +40024 91182 +35594 69578 +46950 22480 +12379 31571 +16945 30582 +61614 68940 +48173 57082 +32624 58684 +94003 80949 +21551 72636 +49500 56060 +91508 20461 +71692 96504 +62379 94102 +70549 11293 +87238 54313 +16792 95243 +93509 41331 +72142 59959 +92474 76566 +53189 85632 +77138 56060 +41950 61876 +85591 40423 +78605 72026 +62515 87456 +49015 56060 +41423 77742 +47452 74248 +57647 66923 +21068 27043 +30120 95754 +95959 18741 +93197 61876 +80423 21650 +57729 71451 +29453 66923 +28326 87009 +46744 59056 +81115 66720 +38857 74550 +49849 70483 +55419 26374 +78335 45613 +60739 12508 +35968 17587 +18079 94018 +53376 80949 +41369 95754 +30754 14438 +81555 28326 +43955 41187 +38988 78246 +38187 67264 +99187 45613 +37551 21995 +13548 57964 +16827 72533 +43704 79494 +19039 36600 +70278 78246 +80016 22311 +62776 45613 +79357 33868 +64692 66923 +98491 42514 +88957 86978 +74622 57082 +47277 56060 +96504 53011 +87114 78246 +49142 68730 +92395 61876 +78246 45633 +11014 94102 +18985 48066 +76726 10822 +57367 77129 +28336 56773 +24092 42238 +25097 27558 +94664 68325 +51015 98113 +40965 69363 +89650 69743 +76254 54738 +69293 31098 +11002 43227 +60647 46055 +46338 97100 +36587 14512 +89640 96472 +27182 38982 +11523 54465 +33740 14458 +71700 78246 +85059 29940 +93168 61876 +96566 96501 +91222 94871 +62135 18552 +75319 24791 +14722 37543 +91216 59756 +58320 96504 +74828 99175 +11918 43162 +84262 30120 +47931 66308 +46840 94018 +24878 71006 +20196 36600 +20053 97794 +67727 36600 +97721 45613 +99910 96504 +51916 61876 +39198 39741 +15353 96472 +27494 83600 +52327 54203 +25445 55131 +29317 39741 +94384 10226 +19572 93557 +36386 44570 +31160 70870 +73783 84105 +54235 28326 +16618 66240 +16583 11293 +19080 91182 +57657 31571 +73272 48955 +69949 96472 +75895 89320 +41001 80919 +14825 57964 +94637 57010 +54556 56655 +33409 68761 +74248 68712 +25684 99655 +48181 63856 +69001 31571 +49706 36600 +54409 39741 +91718 66923 +31725 94777 +72533 27698 +45613 78246 +15604 87841 +32504 35779 +62179 62336 +72501 99090 +30561 39148 +79165 11307 +31571 65867 +13483 20228 +20894 89446 +23467 21201 +92291 55131 +94833 91236 +95658 91182 +51242 98018 +73738 62574 +30352 70801 +27292 17870 +86166 11293 +72308 61796 +73796 91182 +30666 96472 +13744 56060 +94746 69471 +15788 58248 +58081 78246 +23677 35070 +20968 28326 +56889 34484 +63353 66429 +12017 61948 +85307 52672 +59926 51517 +46647 55131 +99274 19268 +34708 21306 +26098 84160 +70078 45613 +86009 71606 +65008 57082 +19264 83154 +20880 46063 +80697 36600 +71856 52774 +62253 85982 +49783 95959 +46304 59716 +21948 61876 +96173 56060 +67970 65512 +29760 78254 +73066 97659 +77146 15368 +37411 79698 +13440 56060 +70769 48563 +24345 24307 +38871 96472 +34643 39899 +85582 97868 +48894 61876 +94213 97721 +18933 96472 +92678 95736 +53120 96472 +64527 96472 +10371 78098 +59311 88758 +44618 56981 +86901 37114 +90476 91182 +49214 45967 +12902 22940 +77674 19791 +58536 54989 +55151 95959 +62585 59296 +79446 91182 +42137 48087 +12461 44870 +19364 33837 +45512 71150 +68482 71531 +85801 78226 +27769 65652 +88199 81929 +99552 96748 +20141 61876 +22666 66429 +86571 85514 +20972 66429 +67365 28326 +96745 70447 +30339 62505 +64329 57964 +96535 26191 +61214 94102 +41068 82628 +54705 78246 +58853 31571 +80242 63529 +50060 57572 +47480 28326 +12425 61026 +44531 87545 +70463 50053 +62417 21306 +41173 74875 +72821 50395 +27947 96504 +15054 26374 +42867 16834 +71107 61876 +21999 91182 +87293 66292 +57292 53687 +89185 22897 +66923 23550 +57480 56060 +92097 56060 +97667 72991 +50851 86690 +92405 36161 +22888 94102 +86556 28570 +62406 11574 +17094 66429 +62672 56060 +27924 30120 +82298 32659 +89119 59959 +74159 69406 +69593 78246 +88983 83908 +93972 83391 +36585 57082 +52166 66923 +62447 95959 +94429 39880 +41624 54107 +14949 64308 +51582 28326 +54462 81726 +92666 64896 +73886 38756 +95390 57082 +75706 87003 +72752 95754 +96156 59816 +35797 31571 +76304 62517 +17302 56078 +29863 45613 +71018 41031 +79393 96504 +39665 84870 +59897 28326 +19583 89861 +39734 55131 +54048 21306 +53737 36600 +25787 92176 +68097 38864 +84659 35639 +66422 78246 +61057 77596 +26983 33837 +78620 95754 +75994 96472 +91182 31571 +39465 99552 +31512 64487 +67267 99879 +92670 61876 +88963 12495 +69591 74404 +34360 95959 +21342 51751 +48368 68547 +84355 71495 +72598 13991 +25399 75100 +77633 38756 +12872 67701 +12911 13630 +67871 17769 +79299 23907 +62490 28214 +71363 26374 +42174 86827 +23543 18277 +33152 73936 +60595 25272 +76463 38756 +53592 83420 +66429 78246 +25297 19454 +48577 57964 +42304 14722 +93639 89903 +42775 71581 +50460 11293 +29524 80109 +46795 40266 +79152 53926 +14530 61876 +68493 26374 +24568 82687 +60047 93799 +16856 57484 +11257 55131 +45834 91182 +67239 99552 +90933 31571 +82510 39741 +41567 57964 +67771 12794 +51836 23333 +24272 34097 +98163 78032 +42341 28326 +99975 50627 +86706 78246 +63008 57082 +33127 94102 +56060 74408 +37624 19600 +17196 46856 +77494 29078 +31050 30252 +30922 68664 +13399 24791 +54645 94102 +62173 56060 +62597 95959 +25348 95754 +60690 34683 +58377 92313 +38765 91182 +59869 59959 +95782 21975 +43833 24559 +57964 47902 +79937 22798 +35657 99552 +38354 39741 +91373 32691 +28546 23562 +38067 66077 +60370 39741 +36600 80189 +92953 61431 +43812 69640 +28600 26374 +56239 94102 +88573 99863 +23117 99552 +18732 74248 +39600 31571 +73867 53714 +77524 95959 +45578 26950 +46821 36659 +62249 97476 +29888 99552 +54493 57468 +25883 29690 +53727 55505 +28962 11293 +89727 11115 +60204 26859 +27607 66429 +54053 36600 +78805 13083 +27832 94102 +69578 72533 +13366 66923 +50257 80949 +61725 12887 +74296 39275 +49595 45613 +68879 79435 +30887 31571 +77646 40579 +55065 95754 +71461 55131 +20455 25666 +15976 96504 +44244 94102 +19368 33837 +66895 59959 +63579 38775 +25319 62695 +65478 38944 +98576 88366 +30591 88848 +92278 26374 +11161 26374 +24787 86464 +32547 93818 +34401 44410 +19631 47153 +97521 48956 +42475 28326 +45770 33837 +96953 52782 +77277 99552 +21192 30120 +96102 49059 +83877 99552 +43843 83930 +94704 36600 +33068 36600 +32295 53884 +14212 29797 +26374 58819 +72056 90078 +33837 93677 +74749 31723 +84678 57082 +37631 96472 +89434 61876 +41106 91182 +67810 18348 +52560 97721 +28995 54202 +17694 42638 +19388 36600 +19607 66429 +63536 12795 +43226 10644 +85270 81984 +11781 38756 +59217 36600 +20981 73723 +41651 66429 +51009 19419 +27331 64134 +52422 83283 +60900 21538 +40218 49769 +46711 48222 +47987 33837 +41207 70442 +47097 45613 +77564 99991 +94018 96504 +74639 32409 +56126 28988 diff --git a/inputs/aoc2024/input2.txt b/inputs/aoc2024/input2.txt new file mode 100644 index 0000000..7370319 --- /dev/null +++ b/inputs/aoc2024/input2.txt @@ -0,0 +1,1000 @@ +9 12 14 16 17 18 15 +86 88 91 94 95 95 +15 18 20 21 23 25 28 32 +70 72 74 77 78 83 +57 60 62 64 63 64 65 +44 45 44 47 46 +33 35 32 33 36 36 +83 86 88 89 87 88 90 94 +56 59 62 65 68 65 68 75 +36 39 40 40 43 +87 90 93 95 95 97 94 +90 91 92 92 95 95 +11 14 14 15 16 19 23 +35 37 39 39 44 +59 61 63 67 68 69 +86 87 91 92 91 +33 36 38 39 43 44 47 47 +82 84 86 89 93 94 98 +4 5 7 10 13 17 24 +51 54 60 63 64 67 68 +38 40 43 45 51 54 56 53 +8 9 10 15 16 17 17 +24 26 33 34 38 +61 62 64 66 68 74 80 +44 43 46 48 49 50 51 53 +5 2 5 8 6 +12 11 14 16 17 18 18 +3 1 3 4 7 9 13 +60 58 59 62 63 70 +45 44 41 42 43 44 46 +12 11 13 12 15 13 +56 53 50 52 53 53 +70 69 72 69 70 71 72 76 +53 51 54 57 55 58 64 +26 24 26 28 28 29 31 33 +33 32 35 35 38 40 43 42 +82 81 81 82 85 86 86 +49 47 47 50 51 55 +39 36 36 39 40 41 48 +65 62 66 67 70 72 75 +20 18 22 24 26 23 +53 51 53 57 60 63 65 65 +22 20 23 26 29 33 37 +47 46 48 51 55 56 63 +55 53 60 63 65 +36 35 36 39 40 47 44 +3 2 3 4 9 9 +55 54 61 64 65 69 +17 16 19 24 26 28 29 34 +87 87 90 92 94 +66 66 68 70 72 69 +69 69 71 72 75 77 77 +74 74 77 78 82 +84 84 85 86 88 95 +55 55 57 58 59 60 59 62 +94 94 95 93 95 94 +38 38 41 38 40 40 +69 69 70 73 76 79 76 80 +4 4 6 3 8 +74 74 74 77 78 +34 34 34 37 36 +55 55 55 57 58 60 62 62 +37 37 39 40 40 41 44 48 +50 50 53 55 56 56 57 64 +11 11 12 16 17 +3 3 6 9 10 14 15 13 +71 71 74 76 80 82 85 85 +2 2 3 6 8 12 14 18 +86 86 87 91 93 94 99 +61 61 62 69 70 71 +61 61 64 71 74 76 79 78 +82 82 84 90 93 94 94 +72 72 73 75 82 83 87 +8 8 11 17 23 +7 11 14 15 17 18 +19 23 25 27 28 30 31 30 +63 67 70 72 74 76 78 78 +51 55 57 60 63 67 +42 46 48 50 53 55 62 +16 20 21 24 27 29 26 27 +37 41 40 42 45 48 46 +90 94 97 99 96 96 +43 47 48 50 52 51 55 +76 80 83 86 83 86 87 93 +81 85 85 88 90 +21 25 25 27 30 29 +11 15 15 17 17 +80 84 84 85 86 88 91 95 +3 7 7 8 14 +24 28 32 33 36 39 +57 61 65 66 68 70 72 70 +9 13 14 18 21 24 24 +28 32 34 35 37 41 42 46 +56 60 64 65 72 +5 9 14 16 17 19 21 +40 44 47 48 49 54 53 +50 54 57 64 64 +7 11 17 18 22 +67 71 73 78 80 82 85 92 +28 34 36 38 40 42 43 45 +69 76 79 82 79 +53 60 63 66 67 70 70 +51 57 60 61 62 66 +78 84 87 88 91 97 +87 92 90 93 94 +31 37 36 39 40 41 38 +2 8 9 12 11 11 +78 85 87 86 88 90 93 97 +27 32 30 33 35 38 40 46 +48 55 58 61 63 63 66 +78 85 88 88 89 88 +52 59 62 64 65 65 65 +52 58 59 62 65 65 69 +33 40 43 43 46 51 +6 12 14 18 20 +51 56 60 63 61 +18 23 24 28 29 31 31 +5 12 13 17 18 19 23 +64 70 73 77 82 +61 66 71 72 74 75 76 +11 16 23 26 29 30 28 +70 77 78 84 84 +57 62 65 72 76 +20 25 28 29 35 38 40 46 +84 81 78 75 73 76 +13 10 8 7 4 4 +12 11 10 9 7 3 +99 97 94 93 86 +95 94 92 94 93 91 90 87 +13 11 9 7 8 5 7 +32 30 28 29 29 +94 92 91 90 91 90 86 +65 62 59 61 59 54 +36 34 34 31 30 28 +53 50 49 46 43 42 42 43 +91 88 85 83 83 80 80 +75 72 70 70 68 65 61 +9 7 7 6 1 +87 84 82 78 75 +46 45 41 39 36 33 31 34 +91 88 86 83 80 77 73 73 +66 64 62 59 58 56 52 48 +33 31 29 28 24 18 +78 75 73 72 65 64 +20 17 15 8 11 +55 53 50 44 44 +46 44 43 37 33 +98 96 90 89 88 86 79 +69 71 69 66 63 +31 33 30 27 30 +91 92 90 87 86 83 81 81 +82 84 82 81 77 +53 55 53 51 46 +38 41 44 41 40 +95 97 96 94 97 94 93 96 +32 33 30 33 33 +46 48 47 49 45 +83 85 84 81 79 82 75 +77 78 77 77 76 +11 12 12 11 8 5 8 +81 82 82 81 78 76 76 +92 95 92 91 89 89 86 82 +21 22 19 18 18 15 14 9 +37 38 34 31 29 +28 31 28 24 22 20 17 20 +42 44 42 41 40 36 33 33 +67 68 64 61 57 +73 74 70 69 67 60 +79 80 78 76 75 69 66 64 +80 83 76 75 73 70 72 +96 97 92 89 89 +44 47 45 39 38 35 31 +68 70 67 65 58 57 52 +51 51 50 47 46 45 42 39 +53 53 50 47 45 43 46 +66 66 65 63 61 58 58 +49 49 46 44 40 +17 17 16 14 13 6 +66 66 65 62 64 61 +57 57 55 56 55 58 +95 95 94 96 96 +65 65 67 65 64 62 58 +35 35 32 33 32 25 +57 57 57 54 52 51 50 49 +47 47 47 45 42 45 +42 42 42 39 39 +54 54 53 51 51 47 +19 19 19 16 11 +56 56 54 50 48 45 +80 80 77 76 75 74 70 73 +90 90 88 85 84 82 78 78 +29 29 28 24 20 +88 88 85 84 83 82 78 72 +18 18 12 9 8 6 4 +18 18 12 10 12 +98 98 95 90 89 86 84 84 +41 41 39 34 30 +98 98 97 95 93 87 82 +96 92 90 87 84 +65 61 58 57 54 53 54 +38 34 32 30 28 25 22 22 +93 89 86 85 81 +58 54 52 51 50 45 +86 82 80 79 76 75 76 74 +54 50 47 49 52 +57 53 52 49 50 48 48 +64 60 57 58 55 51 +56 52 53 50 43 +90 86 85 84 84 82 +66 62 61 59 58 58 59 +86 82 81 81 78 75 75 +63 59 56 56 55 54 52 48 +86 82 79 79 78 75 70 +49 45 44 40 37 36 +95 91 87 84 82 79 76 77 +65 61 59 58 56 52 51 51 +56 52 50 46 44 41 37 +19 15 14 10 9 3 +95 91 85 84 81 +16 12 5 3 5 +95 91 84 83 82 79 76 76 +65 61 60 55 51 +72 68 67 66 59 52 +64 59 57 55 54 52 50 48 +98 91 89 88 86 85 82 83 +32 26 23 20 17 14 14 +88 81 78 76 73 69 +66 61 58 56 53 52 50 45 +63 58 59 57 55 53 +35 29 26 24 26 29 +45 40 41 39 38 37 35 35 +63 58 57 60 57 53 +37 31 30 28 27 24 25 19 +61 56 53 53 51 49 +29 22 21 20 20 18 15 17 +75 68 67 64 64 63 63 +92 85 83 82 82 81 77 +35 29 26 24 24 21 16 +40 35 34 30 27 26 25 +40 33 32 28 27 30 +25 19 17 13 13 +32 26 25 21 17 +87 80 77 76 72 71 65 +67 60 57 52 49 +22 17 11 8 10 +96 90 87 81 81 +40 33 31 30 28 26 20 16 +65 58 55 50 48 45 44 37 +75 75 77 80 85 87 88 85 +93 94 96 93 93 +9 16 13 14 14 +79 79 78 79 79 +20 19 22 23 27 28 30 +26 22 20 13 12 8 +71 64 63 57 56 53 50 50 +60 62 63 63 67 +43 38 37 35 34 37 34 +64 60 59 61 58 57 54 48 +19 14 13 11 11 +89 87 91 94 94 +3 7 10 11 14 19 21 20 +91 90 93 91 91 +26 26 24 20 17 16 +57 53 51 49 47 46 47 +35 32 29 31 28 27 20 +15 15 16 18 21 21 +18 22 23 23 26 26 +29 31 33 34 38 40 41 38 +25 19 16 12 5 +57 54 56 56 61 +7 14 17 21 23 +52 57 62 63 64 67 70 74 +79 75 73 74 77 +55 52 54 55 56 53 +56 55 52 51 51 48 48 +58 60 58 61 59 +84 86 83 77 75 +32 32 33 33 37 +54 50 47 40 40 +43 40 44 47 51 +58 58 60 61 64 65 65 72 +85 88 86 85 82 81 80 73 +42 47 49 50 52 56 55 +12 12 11 11 9 4 +22 26 30 32 35 32 +80 73 72 74 73 71 67 +22 20 17 17 13 +77 72 69 68 61 +75 74 77 79 79 79 +28 32 34 38 41 43 45 +30 30 27 25 24 22 22 18 +34 37 35 33 31 31 +73 77 80 84 90 +55 50 52 50 47 45 39 +89 85 83 79 78 81 +30 34 37 39 41 42 44 47 +26 26 25 25 23 23 +45 38 35 33 30 28 26 25 +73 77 79 79 83 +86 82 82 81 74 +29 32 30 25 18 +30 30 25 23 19 +19 12 13 11 11 +92 88 85 82 79 80 78 74 +65 64 65 68 71 74 77 77 +13 13 13 10 9 12 +74 75 77 80 82 88 86 +34 35 34 32 31 31 28 29 +17 11 9 9 7 +34 38 37 39 41 +50 49 46 46 45 42 39 42 +13 19 20 23 24 27 27 25 +33 40 45 46 46 +21 27 29 30 31 33 33 +81 74 71 65 63 61 60 +74 78 81 83 90 94 +21 21 14 11 4 +70 70 69 65 63 56 +46 50 51 51 54 57 58 57 +52 58 60 61 62 64 64 65 +42 42 36 33 32 29 28 31 +74 75 74 72 75 73 71 67 +62 62 64 67 74 75 78 85 +79 75 72 71 70 68 +53 58 59 56 57 58 61 +85 82 85 86 86 83 +4 6 8 6 6 +27 28 35 38 41 42 43 43 +94 92 90 91 90 87 86 82 +34 34 35 35 37 39 36 +18 19 20 19 16 14 +62 67 70 73 74 78 78 +64 70 75 78 81 +58 58 61 60 59 52 +85 79 75 72 68 +68 68 71 68 65 62 59 55 +75 76 74 68 66 65 65 +43 47 51 54 54 +56 59 57 53 50 48 +33 37 38 38 43 +84 79 72 70 64 +67 65 68 70 69 68 +23 22 23 24 29 +18 24 25 26 26 33 +11 16 20 22 23 26 27 31 +68 68 67 66 64 +44 38 38 37 37 +62 58 58 55 53 50 52 +11 14 15 15 18 21 21 +36 39 41 40 38 41 +42 46 49 53 54 55 57 61 +49 47 44 45 48 51 53 57 +62 68 70 71 73 +32 32 33 39 41 43 44 44 +85 82 86 89 87 +20 24 25 32 35 42 +73 73 75 77 80 84 87 93 +64 64 66 68 70 69 73 +29 27 25 22 21 19 15 9 +25 26 27 29 33 36 39 +14 19 20 22 25 27 26 +55 57 54 54 51 50 +41 34 31 29 25 +44 44 41 39 38 37 40 42 +15 13 15 16 17 20 21 24 +3 5 6 7 12 15 +13 13 15 18 21 26 30 +61 58 61 67 71 +11 8 11 14 20 22 22 +53 53 55 57 60 63 +61 59 54 53 50 48 44 +50 43 39 36 37 +53 52 51 50 46 44 42 +54 50 48 45 43 39 +65 65 62 61 59 57 53 +96 96 95 93 91 90 84 +42 44 48 51 57 +82 80 80 83 87 +78 78 82 85 88 +18 22 25 26 24 26 28 28 +17 17 20 24 25 26 27 31 +81 80 79 77 73 +35 33 29 26 25 23 24 +81 77 74 68 70 +51 53 50 49 51 46 +19 23 24 26 30 +36 36 35 34 32 32 +6 9 9 12 10 +24 22 16 14 11 9 9 +23 20 18 15 13 10 7 8 +70 71 78 79 83 +66 71 74 77 80 87 84 +31 35 38 36 39 40 43 42 +65 63 64 65 70 72 +25 25 23 19 17 14 11 13 +25 31 32 33 36 35 39 +87 83 82 80 80 +45 49 51 53 56 59 59 +84 82 79 77 76 76 +39 45 46 47 50 55 60 +16 16 14 17 19 20 23 +37 35 38 40 42 40 41 41 +82 82 85 87 89 90 94 94 +12 14 13 10 9 +63 67 69 71 73 74 71 +15 19 22 24 22 24 28 +82 82 83 89 90 91 94 95 +42 41 39 36 33 32 26 28 +10 13 14 17 17 22 +85 85 86 84 85 85 +62 57 57 56 51 +91 85 84 84 82 84 +64 65 66 69 72 74 79 +64 57 56 50 48 44 +29 29 29 27 24 22 +99 95 94 92 89 87 83 82 +79 83 85 87 94 96 97 +95 91 88 84 83 80 79 72 +86 86 84 85 84 +83 86 85 81 76 +30 29 28 26 22 19 15 +67 63 62 64 64 +6 6 10 13 14 11 +54 53 50 52 58 +37 36 36 35 33 30 27 21 +86 87 85 82 81 79 76 78 +46 50 53 56 59 65 +76 78 81 85 88 92 +62 58 57 55 54 54 50 +57 57 59 61 62 61 +83 79 78 75 74 68 66 59 +56 52 48 47 44 44 +54 50 48 46 43 43 42 +15 14 15 16 17 19 22 26 +72 73 68 67 64 63 62 58 +12 19 20 22 26 28 29 36 +26 33 30 32 35 41 +27 29 31 32 33 37 +64 64 62 61 57 54 51 51 +54 61 61 62 66 +59 63 66 71 73 76 79 79 +95 88 86 84 83 82 78 75 +61 62 61 61 61 +61 58 57 51 50 48 +39 35 38 36 34 +44 44 47 50 52 54 56 60 +42 40 38 35 32 26 +30 27 24 21 22 20 23 +19 19 22 24 27 28 34 +49 50 47 46 42 42 +82 77 79 78 76 77 +2 1 3 3 4 5 6 +77 77 76 74 69 67 66 64 +49 50 53 54 56 58 58 +83 86 84 82 78 77 74 75 +60 54 50 49 47 46 44 44 +49 48 47 47 44 42 39 36 +77 73 73 70 67 67 +31 27 22 19 18 +64 60 58 56 54 49 +62 66 68 68 70 73 75 +89 94 95 97 99 99 99 +51 53 49 47 46 43 39 +8 10 11 12 17 18 25 +87 88 90 93 91 92 95 99 +70 70 71 68 70 73 80 +57 55 61 64 62 +58 59 61 64 62 64 +26 28 30 31 33 31 +67 71 74 75 74 81 +33 34 33 31 30 28 24 +42 35 33 31 29 27 25 27 +24 22 21 17 17 +70 63 62 62 60 56 +33 35 35 38 39 40 +2 2 4 4 5 5 +43 43 41 40 36 33 29 +85 85 86 86 89 92 95 +26 32 29 32 34 36 33 +26 27 30 28 34 +51 54 54 51 50 48 44 +71 71 65 62 59 59 +58 53 48 45 44 46 +97 93 91 87 84 80 +11 10 13 14 15 16 23 28 +43 48 51 52 57 +43 42 44 48 50 56 +58 63 64 65 66 69 70 74 +80 79 76 73 68 61 +4 4 7 4 3 +82 81 80 78 77 +81 84 87 89 90 91 +67 64 62 61 58 56 53 50 +84 82 80 77 76 +70 71 73 74 77 78 81 82 +24 26 27 29 30 32 +32 30 28 26 25 23 21 20 +36 38 39 41 43 +32 29 26 25 23 22 19 18 +40 37 34 33 32 31 29 +81 84 85 87 89 +20 22 23 25 28 +53 50 49 48 47 +48 49 50 53 55 56 +18 17 14 13 12 9 6 4 +14 12 9 8 5 4 3 +9 10 11 12 13 16 18 +50 48 47 45 44 41 40 37 +46 48 50 52 53 +21 20 19 18 16 +28 26 23 21 19 +82 80 79 76 73 72 70 +70 69 66 65 64 63 +83 86 87 90 92 95 +46 49 52 55 58 59 62 63 +30 27 24 22 19 18 16 +19 17 14 12 11 9 +48 51 54 55 56 59 61 63 +17 16 15 14 12 11 +71 68 66 64 63 61 59 +74 73 72 69 66 64 61 60 +38 39 41 42 44 +38 35 32 31 29 +53 52 51 48 46 44 41 39 +23 22 20 17 15 14 +39 38 37 35 32 30 27 24 +60 59 57 54 52 49 +34 37 39 40 42 +76 79 82 85 88 +65 62 59 57 55 53 52 51 +20 22 24 27 28 31 33 36 +76 79 81 83 85 86 +37 34 32 30 27 24 23 +41 42 44 45 47 50 +6 8 9 10 11 12 +51 53 55 56 59 +65 62 60 58 57 55 54 52 +7 8 11 13 16 19 20 22 +49 46 45 44 42 +50 53 55 58 60 63 65 68 +63 60 58 57 54 +9 11 14 17 20 21 22 +37 36 35 32 31 30 29 28 +82 79 76 73 70 67 66 64 +8 11 12 15 18 20 +78 79 80 82 85 86 +96 93 90 89 88 86 84 +69 72 75 76 77 79 82 +50 47 44 43 42 41 38 35 +67 69 70 73 74 75 77 +52 53 55 58 59 +23 25 28 31 33 35 38 +77 78 79 80 82 83 +91 89 87 84 81 +17 14 11 8 6 +40 43 44 47 49 51 52 53 +62 65 68 69 71 74 76 +34 36 38 40 42 44 +86 83 80 79 76 73 72 +82 83 84 87 90 92 94 97 +14 15 16 17 18 19 20 +77 80 83 84 87 88 +80 77 75 72 70 69 67 66 +44 42 40 38 36 +39 40 41 44 46 48 +17 15 13 12 9 +54 56 57 60 63 +86 89 91 93 96 +36 33 31 29 27 25 23 21 +66 63 60 59 56 53 52 49 +79 81 83 86 89 90 91 +36 35 32 31 29 28 26 24 +80 82 83 85 87 +45 48 51 52 55 57 58 61 +90 89 88 86 83 80 +28 29 31 32 34 36 37 +7 10 11 13 15 +78 81 84 87 89 90 91 92 +73 74 77 80 82 83 +94 93 92 90 87 86 83 80 +72 73 75 78 81 82 84 86 +2 3 4 7 8 +77 79 80 81 82 83 +67 66 65 62 59 56 55 53 +37 38 41 43 46 47 +57 59 62 65 67 +78 80 81 83 86 88 90 +12 15 16 17 18 20 23 25 +59 58 57 55 53 51 +80 82 84 85 87 90 +60 61 62 64 66 68 69 70 +99 96 94 91 90 +80 77 76 74 72 71 69 +44 45 48 51 53 54 56 +22 23 25 26 29 30 +40 39 36 34 32 +11 10 7 6 5 +46 49 50 52 55 57 +83 85 88 90 93 +57 58 60 63 66 +76 78 81 82 85 +5 7 8 10 11 13 15 16 +24 25 26 28 30 32 34 +53 54 55 57 59 +34 37 38 41 43 46 47 49 +68 70 73 74 77 79 +41 39 36 35 33 30 27 26 +62 59 58 56 53 52 49 +27 25 24 22 20 +3 6 9 11 14 17 18 +51 48 45 43 41 40 38 36 +99 98 97 95 92 90 87 +22 19 18 16 14 11 8 +13 15 18 21 24 26 27 +75 73 72 71 68 65 +97 95 92 91 88 +65 66 69 71 72 73 74 +46 48 49 52 55 58 +43 42 40 39 37 35 33 31 +19 18 15 13 12 11 10 7 +63 66 68 70 73 75 +60 62 65 68 71 72 73 75 +97 96 93 91 88 86 +74 75 77 80 81 82 +52 53 56 57 59 60 61 63 +16 19 20 23 25 +44 43 40 39 37 35 +25 23 22 20 19 17 14 +22 20 19 17 16 15 12 10 +32 30 28 27 24 +44 45 48 51 52 53 54 56 +71 72 75 78 80 +65 67 70 71 73 75 77 79 +25 27 29 32 35 37 39 42 +66 64 61 60 59 +65 64 61 60 59 57 +72 71 68 66 65 62 +68 71 74 75 76 77 +19 16 13 11 9 +48 45 43 42 40 38 37 +51 48 47 46 45 42 40 39 +43 44 47 48 49 52 55 +86 83 82 80 78 +80 78 75 72 70 +70 67 64 63 62 59 56 55 +96 94 92 89 88 +83 84 85 88 89 91 +80 81 82 83 85 88 90 +36 37 39 41 44 45 +41 43 44 45 47 48 51 +62 65 68 70 72 75 77 80 +83 84 87 88 89 92 95 +34 37 40 43 45 47 +62 60 58 56 54 +81 83 84 87 89 90 93 +98 96 95 93 92 91 89 +28 31 33 34 35 36 39 41 +35 34 32 30 29 +75 73 70 68 66 64 62 59 +17 18 21 24 25 27 30 32 +31 33 34 36 39 +67 66 65 63 62 59 +45 47 50 53 54 +8 9 11 13 15 16 +22 20 17 15 14 13 11 +81 84 87 89 90 +54 56 58 59 60 61 63 +51 52 55 57 59 62 65 67 +73 76 78 79 81 83 86 89 +94 93 90 89 88 +30 31 32 33 36 38 40 +46 44 41 40 38 35 +66 64 62 61 58 56 54 +14 16 19 22 24 +55 58 60 61 63 66 69 72 +67 66 65 63 61 58 55 +55 57 60 62 64 67 70 +25 28 31 33 35 37 +98 97 95 93 91 90 +58 61 63 65 67 69 70 +75 74 72 69 66 +71 74 75 78 79 80 81 +13 16 18 20 22 25 26 28 +84 86 87 89 92 +10 11 12 15 18 21 23 26 +91 88 86 83 81 78 76 +62 63 64 67 69 72 +32 31 30 27 24 21 20 17 +49 51 52 55 56 58 60 +76 77 79 82 83 86 +76 77 79 80 81 83 85 88 +17 20 22 25 26 29 31 +62 59 57 56 53 +12 10 7 6 5 4 3 +65 64 63 60 57 56 54 +90 91 92 95 97 98 +21 24 25 27 28 29 31 +33 34 37 38 40 +16 15 12 9 7 +71 73 75 78 79 +94 91 90 88 85 82 +80 77 75 72 69 +80 82 83 86 87 89 91 94 +89 91 92 94 95 98 +60 58 55 52 49 46 +44 45 47 49 52 55 +66 65 64 62 59 56 54 51 +49 50 51 52 53 54 56 +15 12 9 7 5 4 1 +19 17 16 14 11 8 +29 28 27 25 22 21 19 +23 20 18 15 13 10 +19 22 25 28 29 32 +55 53 52 51 48 47 45 44 +15 17 20 22 24 25 26 +52 53 56 58 59 62 65 67 +79 80 82 84 85 88 91 +3 6 7 8 11 12 13 16 +21 23 24 27 30 31 +37 40 41 42 43 45 47 50 +66 67 68 69 72 +51 52 53 54 55 +33 34 37 40 41 42 45 +85 84 83 80 77 +54 51 49 46 45 44 +96 93 91 90 87 84 81 80 +82 80 79 78 77 74 71 69 +49 47 46 43 41 40 39 +25 24 22 21 18 +98 95 93 92 89 +35 36 39 41 42 44 +45 44 42 39 38 35 34 31 +68 70 71 74 76 77 80 82 +44 46 48 49 52 55 +87 86 83 80 78 76 +78 76 75 72 70 69 67 65 +56 59 61 62 63 66 69 +64 66 67 68 69 +78 80 82 85 88 90 93 96 +85 88 89 91 93 95 98 99 +33 34 36 38 39 +34 33 31 30 27 25 23 20 +16 15 13 12 9 7 6 +62 59 57 56 55 +72 71 68 65 64 61 60 +6 7 8 10 11 14 17 +78 79 80 83 84 87 88 91 +66 69 70 72 75 76 77 79 +99 96 95 93 92 90 87 84 +4 6 8 11 12 14 16 +39 36 35 32 30 29 +93 91 88 85 84 +31 33 34 36 38 40 43 +59 56 55 54 53 50 47 44 +14 16 18 21 24 27 30 31 +33 30 28 26 24 +83 82 79 76 73 +44 41 40 39 38 37 36 33 +5 6 9 11 14 16 17 19 +11 12 15 16 18 20 23 +33 31 30 28 25 22 20 +43 42 40 39 37 34 31 29 +1 4 7 8 10 13 +30 32 34 35 37 39 +37 39 42 45 46 49 51 52 +72 75 77 78 79 80 82 +85 83 80 77 76 74 72 70 +60 57 56 54 52 51 +62 61 60 57 54 +85 82 80 78 75 +42 45 47 48 50 51 52 54 +40 42 43 46 47 50 +44 47 49 50 51 +42 45 47 48 49 52 53 +24 26 28 29 31 33 +28 25 23 22 19 16 +14 13 11 9 6 3 1 +68 66 63 60 57 56 54 51 +3 4 5 8 11 14 16 +41 43 44 45 48 50 53 55 +62 64 67 70 72 74 76 +16 13 11 10 7 5 3 1 +87 86 83 82 79 +26 29 30 32 35 36 37 +58 61 62 64 67 +83 82 79 76 73 70 +65 67 69 70 72 73 75 77 +64 65 66 67 69 71 +1 3 5 7 9 +51 53 54 55 58 61 +19 16 15 13 11 10 7 5 +82 79 76 74 71 68 67 64 +32 30 28 27 25 22 20 +71 72 73 76 78 81 +45 43 40 38 37 35 34 31 +35 34 32 31 28 +16 17 18 21 22 25 28 29 +24 23 22 21 18 17 16 13 +54 56 59 60 63 66 68 +56 59 61 64 65 +63 62 59 56 54 +43 45 48 50 52 55 56 +80 77 76 75 73 71 +35 36 39 42 45 47 49 +6 9 12 15 18 20 23 +71 73 76 77 80 83 85 +57 59 61 63 64 67 68 70 +30 28 25 22 21 18 15 14 +70 67 64 63 61 58 57 +26 24 21 20 18 17 15 13 +60 59 56 54 51 48 47 45 +93 95 96 98 99 +91 88 86 84 81 80 79 76 +12 10 9 6 3 +22 19 16 15 14 11 8 +40 39 38 35 32 +64 62 60 58 56 55 +31 33 35 38 40 42 +18 17 14 11 9 6 5 2 +82 85 87 88 90 91 +65 64 61 58 57 54 +28 30 32 33 34 35 38 +58 55 54 51 50 47 45 42 +31 30 28 25 22 19 18 +53 55 56 59 61 +16 15 13 10 8 5 3 1 +34 37 40 43 45 47 50 53 +38 35 34 31 29 +20 17 16 14 11 +27 24 21 20 18 +79 80 83 84 87 88 89 +30 29 26 24 22 21 +47 50 53 56 58 61 +77 74 72 69 66 +78 77 75 72 70 67 65 64 +79 77 74 73 70 69 67 64 +54 56 58 59 61 64 +87 85 82 80 79 +59 60 63 65 68 71 72 +82 83 86 89 91 94 97 98 +15 14 12 9 7 6 4 3 +24 25 27 29 31 32 35 +68 65 64 61 58 57 +31 34 36 38 40 41 +49 51 52 55 56 58 61 64 +15 14 13 10 7 +88 87 86 84 82 80 79 78 +60 61 64 65 68 69 +90 92 94 97 99 +62 64 66 68 70 72 73 74 +34 35 36 38 41 43 45 +25 27 29 30 31 33 34 +80 81 82 84 85 86 +22 19 16 15 13 11 10 +45 48 49 52 53 54 57 +60 57 55 52 51 48 45 +95 92 89 88 86 84 +51 50 48 46 43 40 39 +60 58 57 55 53 50 47 +69 67 65 63 60 57 +37 40 42 43 44 46 49 51 +11 14 16 18 21 22 25 +51 48 46 45 44 41 40 +80 81 82 84 87 90 +46 44 42 40 37 35 32 29 +62 63 65 67 68 71 74 +5 7 8 11 13 16 19 20 +19 16 13 10 9 +45 48 49 51 53 54 55 56 +3 4 5 6 8 11 12 15 +44 47 48 51 54 57 60 +83 82 80 77 74 72 71 68 +69 68 65 63 62 61 59 56 +14 11 8 6 4 +82 83 86 87 90 92 +62 59 57 56 55 54 53 +64 65 67 70 72 75 +48 47 44 42 41 40 38 36 +26 25 23 20 19 16 +61 59 58 55 54 52 +70 73 75 76 77 78 79 +68 71 72 74 77 78 80 83 +69 70 71 72 75 76 78 80 +84 85 87 90 91 94 96 99 +2 3 5 8 9 +27 29 31 33 34 37 38 +65 63 61 58 57 56 +59 57 54 53 51 49 +46 47 49 51 54 57 +66 68 70 72 74 77 80 81 +55 53 51 48 46 43 +84 83 80 79 76 75 73 +60 63 66 68 71 72 74 77 +82 84 85 86 88 89 91 +51 53 55 58 61 62 65 66 +55 57 59 61 64 65 +41 42 44 47 48 50 +67 64 63 61 59 58 55 52 +20 22 25 26 28 31 32 +32 35 38 41 43 46 +13 10 9 8 6 3 1 +31 28 27 26 23 20 +61 60 59 57 55 +77 80 83 86 89 90 +29 26 25 22 19 +32 34 37 39 42 43 +76 74 73 71 69 66 +23 26 28 29 32 34 36 37 +34 33 32 30 29 27 24 22 +62 59 57 56 55 52 49 46 +63 62 60 58 57 54 +52 54 57 60 62 65 +1 4 5 6 7 +8 9 12 15 17 19 21 +16 18 21 23 26 29 +72 69 68 67 65 62 60 59 +51 50 47 45 44 41 40 39 +27 24 22 19 18 17 +21 22 24 27 28 31 33 +84 83 80 79 78 76 74 73 +84 85 86 88 90 92 93 +38 39 41 44 47 49 52 +3 6 9 10 13 14 15 +14 12 11 9 6 4 +79 77 74 71 69 67 66 64 +55 54 53 50 49 47 45 +54 55 56 58 60 62 63 65 +41 44 45 48 49 52 +75 77 78 79 81 83 86 +55 57 58 59 61 63 +97 96 94 93 90 87 +78 80 82 84 85 88 89 91 +57 54 51 50 48 47 45 43 +66 65 63 60 59 56 +26 24 23 22 19 17 16 14 +46 43 40 39 37 +71 69 66 63 61 +68 66 64 61 58 55 53 51 +68 65 63 60 58 57 55 +65 68 69 72 74 76 77 79 +82 81 78 75 72 69 66 65 +79 76 73 71 68 67 66 +21 23 24 25 26 +39 36 34 31 30 28 25 24 +6 9 10 12 15 16 +33 30 27 25 23 20 19 16 +46 48 50 52 54 +75 77 79 81 84 85 86 89 +83 84 85 87 88 90 93 +43 45 46 48 51 54 56 58 +29 32 35 38 40 +29 27 26 24 22 +41 38 35 33 30 27 26 +42 43 45 48 50 51 54 55 +93 91 90 89 88 85 83 +10 13 15 17 20 +62 64 67 68 69 +18 17 15 13 10 8 7 +44 46 49 51 54 +41 40 37 34 31 29 +89 92 94 96 97 99 +81 79 76 73 71 69 66 63 +46 49 52 55 58 60 61 63 +40 41 43 44 46 48 +67 69 72 73 75 76 77 +90 87 85 84 81 +8 7 4 2 1 +35 36 37 39 41 43 +72 74 75 76 77 78 80 +87 84 83 80 78 75 73 +78 80 82 85 88 90 91 +57 54 52 51 49 48 45 42 +30 33 34 36 39 40 43 +52 55 58 60 62 64 +72 69 67 66 64 63 +98 95 92 90 88 87 85 82 +96 94 91 89 87 86 +42 41 38 36 34 32 29 28 +73 76 79 82 85 87 +30 32 33 36 39 41 42 +75 72 69 68 67 66 65 64 +94 93 90 87 86 84 +32 34 36 38 40 43 46 +29 26 25 24 21 +89 92 93 94 95 97 +69 72 74 75 77 78 79 81 +77 74 73 72 70 69 +67 65 62 60 59 +11 13 15 17 18 21 22 +21 19 16 15 12 9 6 3 +90 87 85 83 80 78 75 +27 30 31 34 35 36 38 +54 55 57 58 60 62 65 67 +38 41 44 46 49 +24 25 26 29 32 +80 79 76 73 72 +73 70 68 65 63 61 58 +28 26 23 20 17 16 14 +36 34 31 28 26 23 +66 64 63 62 59 58 diff --git a/inputs/aoc2025/input1.txt b/inputs/aoc2025/input1.txt new file mode 100644 index 0000000..3f9481d --- /dev/null +++ b/inputs/aoc2025/input1.txt @@ -0,0 +1,4333 @@ +R27 +R47 +R21 +L37 +R5 +L48 +R16 +L21 +R34 +R28 +R12 +L34 +R45 +R12 +L39 +R36 +L25 +R16 +R43 +R18 +L27 +R12 +R48 +L50 +L25 +R24 +L30 +L47 +R12 +R1 +R38 +R21 +R1 +L39 +L15 +L27 +L26 +L20 +L47 +L41 +R23 +R30 +L11 +L31 +L5 +L3 +L16 +L47 +L21 +R95 +L90 +R16 +R90 +R1 +R73 +R57 +R70 +R29 +R11 +L40 +L21 +L96 +R32 +L9 +L38 +L87 +R27 +R45 +R35 +L88 +L89 +R9 +L6 +L14 +R47 +R53 +R6 +L35 +L23 +L42 +L6 +R68 +R27 +L37 +L7 +L69 +R56 +R62 +R14 +R50 +R41 +R95 +L94 +R94 +L29 +L2 +L69 +L36 +R36 +L83 +R42 +L50 +L64 +R51 +L42 +R90 +L90 +R46 +L88 +L14 +L651 +R53 +L95 +R57 +R233 +L95 +L91 +L46 +L78 +R15 +L51 +R52 +L73 +R76 +R96 +R88 +R30 +L65 +L84 +R331 +L23 +R23 +L79 +L74 +L449 +R84 +R96 +L47 +L27 +R48 +L552 +L82 +L48 +R568 +R762 +R9 +L86 +L23 +R38 +L58 +R20 +L14 +L26 +R40 +L36 +R436 +L43 +R43 +R24 +L82 +L42 +R68 +L984 +R816 +R6 +R94 +L45 +R408 +R2 +L79 +L650 +L36 +L64 +L78 +L58 +R869 +L44 +L6 +L19 +R55 +R57 +R161 +L73 +R79 +R21 +L89 +L68 +R20 +L135 +L943 +R15 +L70 +L30 +L34 +R34 +L92 +L8 +L25 +L72 +R97 +L35 +R119 +L984 +L82 +L37 +L7 +R26 +R72 +L75 +R74 +L371 +R238 +L543 +R323 +R74 +R8 +R13 +R87 +R47 +R53 +L54 +L46 +L38 +R33 +L52 +R89 +R55 +R13 +L1 +R1 +L7 +R408 +L66 +L49 +R204 +R10 +L950 +R50 +L386 +R18 +R68 +R650 +R65 +R507 +R78 +L68 +R68 +R701 +L55 +R15 +L759 +L17 +R21 +L427 +L8 +L24 +R753 +L56 +R56 +L6 +L94 +R67 +L507 +L80 +R20 +R812 +R88 +R921 +L28 +R75 +L73 +R216 +R21 +L32 +L114 +L94 +L92 +R457 +L57 +L732 +R32 +L30 +L54 +L16 +L919 +R44 +L180 +R412 +L957 +R97 +R956 +R94 +R847 +R34 +L65 +R38 +L67 +R282 +L76 +L51 +L89 +L21 +L79 +L60 +R60 +L65 +R43 +L10 +R48 +L57 +R41 +L67 +R3 +L68 +L65 +L12 +L70 +L21 +R50 +R93 +R25 +R32 +L86 +L62 +R48 +L95 +L779 +L92 +R82 +R57 +R27 +R154 +R987 +R40 +R712 +L93 +L20 +L5 +L75 +R7 +L60 +R53 +L59 +R24 +L88 +R457 +L34 +R897 +R3 +R65 +R90 +R6 +L86 +L175 +L913 +L493 +R6 +L684 +L16 +L19 +L26 +R66 +R14 +L35 +R7 +L18 +L69 +R89 +L809 +R49 +R78 +R73 +L18 +R61 +L43 +R8 +R92 +R921 +R41 +L62 +L13 +R90 +L77 +L87 +R51 +R31 +R5 +L21 +R35 +R59 +L73 +R438 +L21 +R983 +L40 +L67 +R17 +R6 +L96 +L11 +R85 +L94 +R27 +L30 +L136 +L384 +L13 +L60 +R49 +L53 +L1 +R355 +R51 +R24 +R71 +L91 +L77 +L632 +R83 +R41 +R88 +L970 +L69 +L3 +L774 +R604 +R27 +L21 +R151 +R543 +R31 +L31 +L72 +R72 +R56 +L70 +R49 +R65 +L33 +L33 +R76 +R45 +L94 +L61 +R97 +L30 +R8 +L29 +R16 +R650 +L67 +R82 +L72 +R145 +R26 +R99 +L63 +R97 +L5 +L66 +R27 +R360 +R127 +R897 +R27 +L866 +R40 +L444 +L97 +L11 +R44 +R42 +L559 +L575 +R56 +R49 +R95 +L99 +L58 +L25 +R39 +R54 +R95 +R163 +R31 +L82 +R86 +R588 +L92 +L59 +L92 +L49 +L10 +L184 +R94 +L25 +R25 +L837 +L49 +L14 +L95 +L41 +R20 +L84 +R46 +L46 +R34 +L97 +R78 +L890 +R75 +L60 +L40 +R296 +R84 +L98 +R99 +L70 +L42 +R65 +L66 +L230 +L69 +L97 +L872 +L24 +R24 +L655 +R75 +R80 +L62 +L54 +R168 +R69 +R986 +L86 +L921 +L13 +R438 +L25 +L43 +L638 +R64 +R24 +L25 +L976 +R44 +R67 +R83 +L932 +R76 +R54 +L78 +L354 +L566 +R3 +L203 +L53 +R19 +L66 +L9 +L91 +L39 +R39 +R91 +R94 +R15 +L91 +L9 +R17 +L86 +L35 +R70 +L66 +L666 +L22 +L96 +R84 +L18 +R18 +R40 +R43 +R1 +R47 +L31 +L53 +L71 +R42 +L18 +R70 +R30 +L74 +R50 +R48 +R130 +L16 +R65 +R84 +L32 +R345 +L20 +L80 +R939 +R72 +R189 +R36 +L13 +L74 +R551 +L68 +R84 +L816 +R97 +L52 +R45 +L490 +R25 +L25 +R199 +L59 +R24 +L90 +L74 +L941 +L43 +L16 +R95 +R217 +R89 +L26 +R25 +R312 +R82 +L94 +R60 +L14 +R22 +L68 +R74 +L81 +R1 +R6 +L80 +R46 +R665 +R64 +R2 +R5 +R98 +L27 +L73 +R54 +L88 +L32 +R61 +L33 +L82 +L67 +R87 +L470 +R676 +L17 +R23 +R97 +R82 +R189 +L80 +L29 +L71 +R64 +R44 +L976 +R89 +L69 +L23 +R84 +R38 +R249 +L25 +L43 +L493 +R61 +R65 +L320 +R20 +R35 +L4 +R4 +R31 +L31 +L48 +R748 +R30 +L57 +L48 +R54 +L422 +L33 +L724 +L37 +R94 +R77 +R46 +L46 +R6 +R67 +L107 +R6 +R94 +R272 +R28 +L86 +R86 +L104 +L820 +R724 +R1 +L49 +R91 +L37 +L769 +L80 +L24 +R67 +R596 +R55 +L51 +L951 +L45 +L4 +R54 +L54 +R97 +L97 +L7 +L35 +L58 +R27 +R573 +L65 +R17 +L52 +L57 +L96 +R53 +L48 +R199 +R93 +R53 +L8 +R52 +R82 +L723 +L82 +L618 +L36 +R7 +L71 +L85 +R85 +R689 +R13 +L39 +R425 +R3 +L46 +R335 +R53 +R67 +R889 +R5 +L485 +L75 +L34 +L558 +L42 +L87 +R93 +R14 +R83 +L77 +L29 +R97 +R2 +R84 +L47 +L33 +L74 +L26 +L87 +L67 +L67 +L79 +L28 +R18 +R84 +R57 +L94 +L57 +L780 +R87 +R86 +R86 +L759 +L354 +L931 +L15 +R45 +L62 +L683 +R58 +R44 +L75 +L27 +R61 +R70 +L98 +L23 +L10 +L76 +L88 +L36 +L31 +L14 +R45 +R998 +R632 +L93 +R63 +L40 +L60 +L37 +R48 +R33 +L344 +L90 +L448 +L60 +L2 +R71 +R29 +R89 +L226 +L63 +L677 +L94 +R55 +R88 +R928 +R94 +L44 +R50 +L14 +L84 +R98 +L29 +R29 +L16 +L37 +L47 +R807 +L7 +L809 +L67 +R88 +R88 +L56 +R656 +R10 +R60 +R22 +L392 +L62 +R75 +L784 +L70 +L59 +L22 +L638 +R60 +R45 +L345 +R6 +R57 +L40 +R73 +L54 +R58 +L801 +R396 +R59 +R75 +L30 +R6 +R343 +L48 +L32 +R921 +L60 +R27 +L78 +R1 +R54 +R767 +L88 +L13 +R42 +L41 +R99 +R47 +R654 +R89 +R86 +L75 +L106 +R984 +L6 +L72 +R57 +L17 +R25 +R35 +R41 +L641 +R51 +L51 +R20 +L20 +R87 +L22 +R748 +R771 +R416 +L76 +L26 +R2 +L90 +R527 +L488 +L94 +L475 +L38 +R35 +R23 +R95 +R824 +L79 +R94 +R66 +R28 +L482 +R97 +L12 +R91 +R34 +L45 +L53 +L35 +L71 +L52 +L78 +R78 +R26 +L26 +R518 +R62 +R94 +R793 +L75 +R91 +R85 +R69 +L37 +R741 +L41 +R4 +R321 +R69 +L94 +R95 +L846 +L49 +L85 +L60 +R63 +R97 +R25 +R25 +L51 +L17 +L97 +L70 +R270 +L85 +L15 +R80 +L80 +L68 +L732 +L72 +R79 +L7 +L90 +R90 +R74 +R89 +R20 +L17 +L66 +L515 +R427 +L412 +L79 +R706 +L776 +R12 +R337 +L23 +L89 +R75 +R57 +L20 +L41 +R429 +R63 +L938 +R669 +L182 +R50 +R50 +L90 +R65 +L224 +R535 +L186 +L82 +L997 +L21 +L29 +R80 +L51 +L44 +R63 +R381 +R823 +L23 +L121 +R821 +R16 +R83 +R65 +L664 +R883 +R99 +R18 +R62 +R4 +L997 +L369 +L49 +L51 +L93 +R93 +R88 +L88 +L363 +L616 +R39 +L40 +L94 +L51 +L29 +L46 +R43 +L11 +L58 +R72 +R54 +R16 +L23 +R7 +L29 +L59 +L215 +L97 +L47 +L53 +R76 +R24 +R767 +L94 +L973 +L89 +R569 +R1 +R57 +R62 +R450 +L67 +R17 +R84 +R34 +R44 +L45 +R67 +R16 +R556 +R1 +L57 +L50 +R7 +L61 +L92 +R96 +L76 +R37 +R734 +R5 +L440 +R661 +L76 +L998 +L47 +L8 +R48 +L37 +R97 +L60 +L28 +L12 +R46 +R81 +R673 +R29 +R87 +R684 +R632 +L57 +L435 +L40 +L173 +R373 +R93 +L52 +R90 +L93 +R62 +L15 +L11 +R7 +L91 +L990 +L622 +L578 +L72 +R72 +R132 +R89 +R79 +R13 +R64 +R18 +L68 +R12 +L50 +R28 +L93 +L70 +R39 +L93 +R806 +R432 +L86 +R36 +L38 +L50 +L60 +R67 +L8 +L98 +R89 +L539 +L55 +L832 +L22 +R5 +R7 +L405 +L49 +L21 +R321 +R26 +L69 +L16 +L41 +L380 +L53 +R33 +R89 +L48 +R31 +L68 +L34 +R30 +L146 +L82 +L72 +L611 +L89 +R24 +R14 +L85 +R47 +R99 +R58 +R26 +R28 +L82 +L529 +R25 +R33 +R72 +R83 +L67 +L62 +L47 +L272 +L37 +R8 +L83 +R49 +L59 +L23 +L20 +L6 +L94 +R255 +R802 +R118 +R225 +L58 +L58 +L84 +R803 +R403 +L906 +L86 +R65 +R21 +R95 +R68 +R26 +R35 +R909 +L6 +L7 +R82 +R948 +R423 +L21 +L57 +L93 +L2 +L594 +R215 +L21 +R36 +L27 +L49 +L60 +R46 +R57 +L42 +R913 +L5 +R31 +L87 +R87 +R42 +R517 +R477 +L421 +R87 +R31 +R30 +R42 +R128 +L70 +R37 +R14 +L314 +R330 +R25 +R45 +L738 +R2 +L64 +L14 +R98 +R16 +L43 +R43 +L45 +R82 +L37 +L97 +R40 +R57 +R27 +R297 +R76 +L69 +L31 +R75 +R25 +R40 +L440 +R72 +R28 +R1 +R79 +L43 +L37 +R71 +L71 +L16 +L364 +L57 +R744 +R17 +R645 +R90 +R24 +R193 +R20 +L96 +R750 +R65 +R51 +L94 +R97 +L24 +R55 +R99 +L99 +R27 +L58 +R38 +L35 +L73 +L99 +L73 +R73 +L4 +L77 +R475 +L32 +R265 +R970 +L97 +L28 +L2 +L836 +L91 +L43 +R523 +R77 +R34 +R16 +R98 +R17 +L865 +R670 +R69 +L39 +L95 +L273 +R83 +R71 +R51 +L46 +L18 +L1 +R328 +L868 +L87 +L19 +L13 +L44 +L20 +R11 +L60 +L89 +R3 +L8 +R94 +R62 +R16 +R69 +R746 +R7 +L619 +L81 +R91 +L91 +L63 +R606 +L57 +R40 +R53 +R57 +R71 +R93 +R98 +L98 +R59 +R41 +R28 +L28 +L70 +R70 +R30 +L62 +L45 +L20 +R15 +L58 +R51 +L18 +R886 +L479 +L907 +R39 +L32 +R30 +L375 +R281 +L42 +L53 +R59 +R14 +L14 +R629 +R442 +L468 +L56 +L143 +R55 +R64 +L56 +L690 +R72 +R51 +R66 +L51 +L15 +L84 +R84 +R94 +L557 +R76 +L113 +R47 +R72 +L54 +L65 +R49 +R114 +R56 +R812 +R503 +R5 +R39 +L47 +R63 +R91 +R97 +R34 +R81 +L93 +L212 +L61 +R69 +R47 +R63 +L24 +L247 +R8 +R53 +R95 +R5 +R61 +R5 +L29 +L46 +L162 +R82 +R445 +R35 +L91 +R98 +R65 +R40 +R36 +L35 +L13 +L93 +L343 +L208 +R53 +L642 +R78 +L290 +R6 +R848 +R18 +L5 +L13 +R37 +L37 +R66 +R10 +R66 +L4 +L74 +L64 +L84 +R14 +R70 +L517 +L179 +L31 +R90 +R76 +R28 +R90 +R730 +L787 +L7 +L75 +R682 +R34 +L90 +R27 +L562 +L26 +L5 +R647 +R75 +R563 +L849 +L26 +L88 +L68 +R25 +L39 +R82 +R115 +L15 +L59 +R81 +R861 +R34 +R83 +R3 +L86 +R91 +R5 +R6 +L819 +R22 +L13 +R94 +R43 +R54 +R20 +L20 +R76 +R70 +R50 +R4 +R63 +R555 +L18 +L25 +R25 +L122 +L11 +L31 +L62 +L74 +R52 +R164 +L748 +R439 +L7 +L352 +L9 +L94 +R56 +R20 +R25 +L299 +R874 +L14 +L28 +L79 +R678 +R722 +L91 +L68 +R53 +R6 +L70 +L89 +R43 +R516 +L476 +R76 +L68 +R69 +L1 +R34 +R529 +L76 +R76 +L212 +L91 +L55 +R95 +R44 +R90 +R96 +L25 +R12 +L32 +L70 +L82 +R190 +R404 +L3 +R11 +L635 +L963 +R163 +L78 +L928 +L94 +L84 +R61 +R91 +L811 +L35 +R78 +L75 +L98 +R85 +L511 +L1 +R925 +R59 +L71 +L39 +R37 +L11 +L71 +L29 +R893 +R785 +L93 +R9 +L94 +L89 +L80 +L31 +L68 +R10 +R11 +R473 +L98 +R987 +L996 +L71 +R952 +L599 +L64 +R18 +L67 +R647 +R72 +R60 +R36 +R748 +R953 +R96 +L30 +R42 +R84 +L9 +R213 +R78 +R59 +L536 +R391 +R8 +L67 +R11 +R52 +R4 +R58 +R22 +L63 +R43 +L60 +L633 +R82 +L66 +R217 +R57 +R43 +R4 +R12 +L118 +R2 +L30 +R615 +L152 +L149 +R69 +R7 +L19 +L41 +L55 +L22 +R377 +L23 +L98 +R33 +R77 +L389 +R333 +R53 +L48 +L24 +L588 +L26 +L421 +R21 +R39 +R951 +R79 +R71 +L26 +L82 +R68 +R923 +R77 +R44 +R307 +R549 +L35 +L1 +L23 +R59 +R17 +L212 +L127 +R953 +L31 +L44 +L56 +L37 +L75 +L88 +L55 +L45 +L52 +R52 +R6 +R99 +L559 +L2 +R656 +R1 +R1 +L676 +R61 +R350 +R63 +L42 +R42 +L46 +R946 +R23 +L23 +R18 +R68 +R58 +R56 +L77 +R5 +L64 +L84 +L382 +R97 +R91 +L41 +R19 +L60 +R36 +L80 +L55 +L39 +R42 +L18 +L690 +L466 +R377 +L867 +R39 +L74 +R796 +R195 +L43 +L70 +L74 +R7 +R80 +R963 +R61 +R43 +R433 +L40 +L751 +R54 +R33 +R861 +L92 +L90 +L29 +L70 +R724 +R63 +L63 +R85 +R26 +R682 +R24 +L337 +L80 +L3 +R62 +R62 +R91 +L12 +L95 +L53 +L218 +L93 +R9 +R50 +R72 +R28 +R49 +L70 +R21 +R99 +L199 +L42 +L34 +R15 +R24 +L63 +L45 +R44 +R1 +L35 +L83 +L82 +R58 +L58 +R48 +L86 +R7 +R431 +R829 +R671 +R72 +R23 +L95 +R76 +L54 +L22 +L896 +L4 +L6 +R7 +R86 +L99 +R89 +R23 +L89 +R991 +R33 +R9 +L44 +L99 +L501 +R40 +L38 +L2 +L29 +L23 +L848 +L51 +R31 +R438 +R35 +R52 +L94 +R32 +L912 +L2 +L211 +R52 +R81 +L56 +L68 +L27 +R19 +R56 +R146 +R97 +L136 +R18 +L53 +R53 +R98 +L50 +L48 +L57 +R761 +R25 +L86 +R57 +R364 +L78 +L86 +R77 +R818 +L662 +L42 +L91 +L26 +L874 +R49 +L49 +L334 +L27 +R85 +R5 +L29 +L647 +L53 +R67 +L33 +L74 +L60 +R39 +L39 +R96 +L80 +L41 +L54 +L21 +R239 +L471 +R41 +L5 +R134 +R956 +L94 +R39 +R73 +L99 +R148 +R23 +R16 +L741 +L51 +L70 +L51 +L43 +R56 +L76 +R76 +R2 +R70 +R9 +R290 +L71 +L93 +L7 +L25 +R11 +R7 +L93 +R93 +R4 +R9 +R94 +R838 +R761 +R89 +R130 +R67 +L24 +L83 +R89 +L91 +L76 +L68 +L32 +L18 +L82 +L31 +L77 +L55 +R832 +L85 +R16 +L30 +R30 +L7 +L42 +L51 +R905 +R43 +R152 +L326 +R7 +L681 +R781 +L96 +L438 +R53 +L43 +R61 +L228 +L590 +L24 +L76 +L55 +R53 +R77 +L42 +R694 +R96 +L166 +R146 +R76 +L15 +L71 +L93 +R86 +R681 +L9 +R364 +L22 +L91 +L294 +R85 +R80 +L80 +R113 +R87 +R10 +R30 +R923 +L57 +L97 +L9 +L49 +L24 +L480 +R53 +L629 +R29 +R59 +R41 +R969 +R80 +L45 +R469 +L559 +L7 +L307 +R3 +L3 +L92 +L27 +L81 +L59 +R65 +L82 +R95 +R433 +R912 +L64 +L40 +L71 +R80 +L17 +R78 +L87 +R57 +R76 +R31 +L7 +R3 +R97 +L85 +R609 +R676 +L13 +L25 +L60 +L20 +L71 +L123 +L88 +L269 +R97 +R77 +R53 +R678 +L8 +R24 +L388 +L164 +L2 +L298 +L32 +R472 +R60 +R453 +L80 +R774 +R45 +L92 +R321 +R24 +L436 +L409 +R65 +L147 +L28 +R42 +L995 +R63 +R52 +L52 +R11 +L75 +L36 +L5 +R62 +R95 +L77 +R25 +R105 +L5 +L47 +R47 +R52 +R178 +R628 +L58 +R626 +L51 +R25 +R55 +L4 +R21 +R92 +R87 +L51 +R85 +L86 +R701 +L519 +R28 +R91 +L94 +L6 +L35 +L355 +L58 +R52 +R887 +L69 +R96 +L79 +R61 +R30 +L33 +L97 +L22 +L78 +R79 +R285 +R71 +L70 +R35 +L12 +R56 +R656 +R925 +R75 +L60 +R460 +R62 +L22 +L759 +R738 +R81 +L27 +R27 +L82 +L18 +L950 +L750 +L19 +R19 +R22 +R32 +R46 +L55 +R231 +R42 +R7 +R375 +R304 +R96 +R46 +L58 +R712 +R74 +R26 +R20 +R80 +L26 +R87 +L14 +R31 +L82 +R4 +L252 +R792 +R96 +L41 +R98 +R92 +L85 +R15 +R92 +L15 +R12 +L29 +R125 +L351 +R42 +L80 +L11 +L85 +L43 +L72 +L630 +R50 +L920 +L68 +L678 +R15 +L96 +L33 +L40 +R60 +R40 +R12 +L412 +R90 +L619 +R9 +L80 +R241 +L41 +R94 +R206 +R22 +R99 +L14 +R150 +R42 +R1 +R9 +L5 +L92 +L561 +R16 +R33 +R81 +R19 +R85 +R115 +R84 +L84 +R30 +R37 +R33 +L33 +R70 +L37 +L84 +R17 +L94 +L943 +L27 +L69 +R62 +R38 +R34 +L34 +L35 +L36 +L29 +R51 +L54 +R83 +L196 +L93 +R65 +R89 +R55 +R99 +R1 +R221 +L87 +L83 +R349 +R166 +L81 +R81 +L66 +L16 +L84 +L895 +R79 +L57 +R83 +L10 +L24 +L74 +R98 +R95 +R75 +L50 +L84 +L40 +L42 +R9 +R21 +R45 +R4 +L612 +R43 +R36 +L73 +R310 +R63 +R68 +L68 +R20 +L20 +L46 +R983 +L490 +R49 +R72 +R82 +R9 +L51 +L73 +L35 +L324 +R7 +R17 +L97 +R98 +L40 +R39 +L82 +L33 +R66 +R82 +L73 +R9 +R31 +R48 +R52 +L94 +L31 +R25 +L43 +L897 +R40 +R2 +L2 +R17 +R83 +R52 +L52 +R764 +R36 +L26 +R86 +R10 +L20 +L490 +L6 +R43 +R30 +L27 +R38 +L38 +R58 +R55 +L613 +R846 +L546 +L75 +R33 +L58 +R54 +L54 +L4 +R4 +L778 +L22 +L4 +R4 +R90 +L12 +R28 +L6 +L347 +L54 +R801 +R22 +R63 +L42 +R4 +R267 +R22 +L15 +L21 +L37 +R37 +R80 +L87 +L903 +R56 +R454 +R76 +L76 +R10 +R90 +L317 +R23 +L60 +R86 +L967 +L65 +L72 +L28 +L21 +L879 +L45 +L55 +R56 +R44 +R555 +L98 +L70 +L29 +R416 +R976 +R50 +R88 +R735 +R86 +L9 +L490 +L10 +R41 +R646 +R23 +L10 +L55 +L667 +L7 +R29 +R58 +R45 +R97 +R70 +L75 +R5 +R13 +R87 +R812 +R99 +R89 +L7 +R33 +L60 +L66 +R961 +L95 +L66 +R28 +L11 +R78 +R5 +L99 +L7 +R6 +R732 +L430 +L902 +R86 +L89 +R3 +L5 +R66 +R62 +R477 +R956 +R50 +R4 +L10 +R53 +R47 +R60 +R40 +R79 +R95 +L74 +L71 +R71 +L405 +L17 +R22 +L84 +R80 +R54 +L22 +L28 +L63 +R63 +L9 +L91 +R74 +L88 +L86 +R41 +L49 +L792 +L220 +R80 +R40 +R87 +L62 +L10 +R685 +L95 +R95 +L431 +R483 +R25 +L77 +L1 +R56 +L58 +L77 +L737 +R54 +R563 +R666 +R11 +L718 +R22 +L39 +L22 +L20 +R9 +L94 +L13 +R30 +R468 +R77 +R941 +R97 +R1 +R84 +R23 +R77 +L251 +L21 +R2 +R70 +R326 +L90 +R64 +L43 +L56 +R299 +L44 +R88 +L96 +L48 +R18 +R72 +L90 +L42 +R42 +R428 +L92 +L36 +R9 +L88 +R79 +L23 +R23 +R93 +R7 +R949 +R51 +R625 +L53 +R3 +L83 +R664 +R12 +R32 +L91 +R53 +L21 +R59 +R17 +L617 +R332 +L71 +L86 +R13 +L75 +R87 +L84 +R27 +R8 +L51 +R36 +L36 +L63 +L38 +L703 +R4 +L543 +R92 +L59 +R407 +R44 +L898 +L10 +L46 +L87 +L54 +R78 +L974 +L10 +R60 +R99 +R1 +L61 +L97 +L60 +R61 +L809 +L34 +R95 +R27 +L98 +R89 +L13 +R58 +R642 +R72 +R13 +L33 +L33 +R60 +L79 +L948 +R48 +L78 +R14 +R164 +R936 +R22 +R63 +R79 +L7 +R7 +R79 +R21 +L66 +R453 +R19 +L406 +L2 +L436 +L47 +L66 +R56 +R295 +R77 +L187 +R9 +L41 +R38 +R22 +R582 +R616 +L16 +R30 +L30 +R4 +R96 +L68 +L24 +L8 +L985 +R628 +L80 +R96 +L55 +R25 +R13 +R77 +R930 +L49 +L1 +L499 +L49 +R83 +R66 +L32 +L31 +L647 +R20 +L40 +L88 +R429 +R89 +L30 +L9 +R74 +R59 +R360 +R46 +R39 +R61 +L749 +R55 +R73 +R68 +R53 +R311 +R789 +L85 +L53 +L62 +L71 +L29 +R67 +L75 +L91 +R88 +L880 +L70 +R195 +L34 +R63 +R29 +L92 +L15 +L59 +R74 +R70 +R30 +R7 +L29 +L48 +R70 +L99 +L43 +L58 +L68 +L20 +R63 +R96 +R54 +L13 +R13 +L525 +L50 +L311 +R77 +L8 +L30 +L55 +L49 +R6 +L34 +L44 +R7 +L9 +R49 +L333 +R84 +L61 +L84 +R29 +L84 +R34 +L34 +R45 +L27 +L18 +R636 +L8 +R341 +R92 +L95 +R34 +R69 +R21 +L45 +R47 +R43 +L35 +R6 +L84 +R842 +L67 +R172 +L6 +L32 +R69 +R52 +L10 +R104 +R50 +L47 +L98 +R849 +L44 +R73 +R71 +R23 +L13 +L89 +L21 +R38 +R545 +L697 +R598 +L530 +L854 +R404 +R377 +R56 +L74 +R92 +R79 +L53 +L81 +R33 +L632 +R91 +L17 +R49 +L80 +L69 +R25 +L113 +R413 +R22 +R78 +R95 +R705 +L485 +L15 +L57 +R753 +R4 +L55 +R455 +L57 +L98 +R55 +L48 +R1 +L53 +R885 +R22 +L36 +L871 +R184 +R716 +L24 +L77 +L80 +R29 +L1 +R17 +L59 +L23 +R18 +L70 +R11 +L5 +R34 +L565 +R43 +L48 +L3 +R3 +L521 +R21 +R94 +L406 +R472 +R60 +L979 +R71 +L387 +L25 +R17 +L36 +R91 +L72 +R20 +R80 +R467 +L332 +L935 +R88 +L4 +L84 +R41 +L35 +L8 +R2 +R31 +R93 +R26 +L778 +L553 +R81 +L43 +L952 +R240 +L47 +R2 +R642 +R8 +L5 +R13 +R48 +L29 +L209 +L90 +R23 +R99 +R95 +R8 +L3 +R87 +L587 +L891 +R89 +L27 +L87 +R16 +R52 +L28 +R276 +L227 +R10 +L26 +R80 +L20 +R83 +L65 +R57 +L48 +R256 +R18 +L76 +L42 +L37 +R72 +L35 +R40 +R80 +L22 +R2 +L47 +R47 +L65 +R4 +R61 +L640 +L60 +R41 +L31 +L575 +L960 +R537 +R96 +R56 +R96 +L51 +L23 +L86 +L10 +L90 +R196 +R780 +R23 +L820 +L33 +L246 +L51 +L72 +R32 +L609 +L31 +L9 +L11 +L49 +R42 +L2 +L43 +R23 +R80 +L14 +R89 +R73 +R22 +L89 +L93 +R212 +R33 +L69 +L21 +R93 +R3 +L45 +L38 +R71 +L27 +L87 +L278 +R350 +L70 +L515 +L13 +L45 +L9 +R67 +R53 +L57 +R255 +L771 +L74 +L6 +L10 +L90 +R66 +L66 +R58 +R1 +R4 +L319 +L360 +R16 +R20 +R11 +R90 +R46 +L767 +R7 +L47 +R40 +L42 +L158 +R61 +R39 +R35 +L35 +R32 +R68 +L76 +L72 +R48 +L13 +L87 +R38 +L38 +L301 +L69 +L98 +R68 +R28 +L655 +R27 +L45 +L469 +L95 +L360 +L83 +R16 +R36 +L48 +R248 +R33 +L33 +L86 +R86 +L57 +R57 +L87 +R867 +R20 +L572 +R13 +L41 +R12 +R88 +R59 +R41 +L29 +R53 +L6 +L118 +R67 +R33 +R48 +R75 +R77 +L87 +L795 +R47 +R35 +L239 +R90 +L51 +L262 +R152 +L90 +R687 +L4 +L83 +R27 +L41 +R319 +L260 +L67 +L278 +L37 +R37 +L80 +L720 +R34 +R13 +R53 +L86 +L942 +R736 +R8 +R84 +R63 +R42 +R35 +L18 +R244 +R33 +R93 +R8 +L309 +L91 +L17 +R77 +R40 +R524 +R15 +R61 +L82 +L18 +R80 +L7 +R76 +L75 +R92 +R34 +L5 +L54 +R60 +R31 +R89 +R79 +R67 +R15 +R13 +R12 +L89 +R85 +R13 +R84 +R165 +R41 +R24 +L59 +R96 +L27 +R3 +L82 +R54 +R10 +L523 +L580 +L83 +R489 +L9 +L295 +R878 +L75 +L27 +L73 +R73 +R44 +R58 +R98 +L42 +R126 +L897 +R13 +R551 +R949 +L85 +R71 +L703 +L83 +R45 +R94 +L51 +R12 +R87 +L562 +L26 +L51 +L863 +R15 +R60 +L60 +R94 +R14 +L50 +L9 +R72 +R66 +L87 +L67 +R766 +R60 +R61 +R38 +L58 +L457 +L43 +R55 +R27 +L82 +L783 +L17 +R37 +L38 +L244 +L65 +R62 +L52 +L405 +R88 +R17 +R55 +R15 +R730 +R85 +L85 +L24 +R12 +L88 +R66 +L66 +L20 +L538 +L42 +R80 +L80 +L93 +R93 +L20 +R822 +R43 +L11 +R95 +L29 +R240 +R360 +R14 +L71 +L426 +R83 +L46 +L3 +L497 +L65 +R11 +L36 +L10 +L54 +L622 +L96 +L35 +L923 +L61 +L129 +R56 +R26 +L394 +L37 +R15 +R99 +L99 +L12 +R938 +R74 +L14 +L5 +L81 +R71 +R68 +L39 +L48 +L52 +L228 +R63 +R65 +R52 +L52 +R18 +L349 +R31 +R85 +L85 +R49 +L24 +R660 +R40 +L89 +L71 +R314 +R947 +R42 +L68 +L66 +L97 +R42 +L605 +R24 +R49 +R653 +R566 +L578 +R23 +L611 +L21 +L579 +R94 +R416 +R90 +R4 +R96 +L8 +R43 +L985 +L96 +L57 +L99 +R2 +L86 +R86 +L3 +L622 +R23 +L1 +R282 +R90 +R837 +R82 +R46 +R68 +L209 +L2 +L23 +L510 +R63 +L52 +R22 +L63 +L28 +L839 +R36 +R73 +R18 +L726 +R38 +R954 +R70 +L60 +R52 +R24 +R54 +L884 +L10 +L753 +L47 +L985 +R85 +R15 +R85 +L2 +L298 +R37 +R63 +R12 +R59 +L25 +L837 +L20 +R50 +L70 +R39 +L8 +R11 +R45 +L38 +R552 +L70 +R96 +R21 +L17 +R9 +R91 +R63 +L34 +R71 +R48 +R24 +R15 +L87 +R581 +R32 +R505 +L54 +R36 +L82 +R829 +R53 +L42 +R10 +R1 +L69 +L43 +R660 +L17 +R38 +R48 +L6 +R42 +L22 +L34 +R43 +L20 +R11 +L894 +L40 +R48 +R55 +R44 +L13 +L48 +R40 +R21 +L10 +L3 +L78 +R78 +R58 +L894 +L64 +R83 +R88 +R83 +R76 +L33 +L63 +L34 +R59 +L259 +R31 +R140 +L99 +R828 +L102 +L13 +R415 +R659 +L43 +R84 +R58 +L958 +L39 +L61 +L60 +L5 +L75 +R66 +R80 +L48 +L58 +R92 +R8 +R51 +L51 +L63 +R63 +R98 +L53 +R55 +L46 +L54 +L10 +L88 +R38 +L64 +R94 +R230 +L95 +L491 +L18 +L76 +R47 +L567 +L33 +R38 +L74 +R3 +R55 +L89 +R157 +R73 +R67 +R303 +R808 +R30 +R35 +L87 +R37 +R26 +R51 +L82 +R682 +R404 +R396 +L467 +R4 +R79 +L16 +R90 +R40 +R70 +L57 +R29 +R81 +L53 +L28 +R63 +L30 +L5 +R23 +L23 +R78 +R852 +L30 +R8 +R58 +L78 +R92 +L62 +R66 +L3 +L67 +R86 +L91 +R91 +R63 +R98 +L318 +L43 +R59 +L59 +L414 +L75 +L54 +L95 +R438 +R67 +R33 +R96 +R304 +L83 +R83 +R7 +R93 +L14 +L20 +L66 +R149 +L51 +R49 +L47 +R8 +R92 +R89 +L93 +L96 +L44 +L54 +L81 +L19 +L66 +R64 +R18 +R126 +R56 +L40 +L60 +L546 +R80 +L782 +L52 +R98 +L98 +R43 +L43 +R97 +L31 +L88 +R55 +R86 +R59 +L59 +R81 +R51 +R58 +L50 +L550 +L9 +R58 +R42 +R68 +R32 +R47 +L47 +R53 +L92 +L861 +L26 +L8 +R534 +L56 +L44 +R967 +R19 +R14 +L359 +R59 +L70 +R70 +R35 +L35 +L62 +L496 +R29 +R94 +R63 +R24 +R48 +L41 +L86 +L242 +R67 +L6 +R81 +R73 +R69 +R85 +R1 +L78 +L423 +L62 +R97 +L42 +L22 +L65 +R94 +L30 +R16 +R405 +R14 +R973 +R83 +R31 +R19 +R19 +L71 +L859 +R707 +L3 +R796 +L761 +L63 +L76 +L98 +R64 +L4 +L62 +L883 +R11 +R79 +L39 +L10 +R42 +R730 +R91 +L21 +R75 +L475 +L59 +L2 +R161 +R47 +L108 +L87 +L39 +R87 +R20 +L7 +R68 +L986 +R251 +L2 +R56 +R13 +L13 +L15 +R15 +L12 +L939 +R68 +R295 +R88 +R96 +L44 +L6 +R52 +R32 +L30 +L96 +L355 +R92 +L7 +R524 +L858 +L62 +R98 +R93 +R90 +L74 +R92 +L86 +R49 +R7 +R220 +L5 +L22 +R78 +R22 +R36 +R444 +L80 +L72 +R14 +R19 +L61 +L77 +L367 +L56 +L23 +L63 +R70 +L29 +L42 +R87 +L17 +R9 +R72 +L18 +R54 +L73 +L5 +R7 +L24 +R95 +L66 +R5 +R73 +R888 +L851 +L449 +R148 +R23 +R129 +R8 +L82 +R605 +L31 +L47 +L13 +R60 +R29 +R238 +L67 +L28 +L26 +L54 +L56 +L36 +R39 +R25 +L364 +R24 +L32 +R86 +L57 +R349 +L4 +R31 +L797 +L4 +R60 +R19 +R61 +R64 +L55 +L45 +L550 +R99 +R66 +R8 +L287 +L36 +L44 +L68 +R12 +L15 +R2 +L89 +L55 +R2 +R69 +L1 +R54 +L567 +R86 +L86 +L62 +R534 +L22 +L50 +L11 +L89 +L97 +R11 +L14 +L57 +R57 +R81 +L72 +R844 +R47 +R49 +R376 +R31 +R32 +R55 +L43 +R659 +R41 +R95 +R28 +R77 +L3 +L47 +R44 +L94 +R42 +R51 +L44 +R351 +L39 +R39 +L13 +R13 +L92 +R70 +R682 +L46 +L802 +L73 +L95 +R668 +R197 +L44 +R48 +R587 +L3 +R95 +L92 +R50 +R57 +L94 +R87 +R834 +L34 +L64 +L276 +R92 +R43 +L95 +R21 +L12 +L28 +R319 +L92 +L8 +L72 +L28 +L59 +L32 +R96 +R95 +R50 +R64 +R67 +R19 +L82 +L53 +R72 +R77 +R67 +L44 +L27 +L94 +L38 +R56 +L12 +R476 +L633 +L89 +L517 +L59 +R97 +L12 +R15 +L34 +R37 +R14 +L17 +R35 +R65 +L85 +R73 +L50 +L86 +L21 +L61 +R30 +L932 +R12 +L80 +R58 +L58 +L44 +L456 +R54 +R21 +L8 +L30 +L42 +R5 +R53 +L98 +L20 +R88 +L23 +L212 +L187 +L1 +L56 +R28 +R38 +L78 +R768 +R993 +R7 +R73 +R627 +R67 +L94 +L72 +L347 +R25 +L55 +R75 +L99 +R80 +L361 +R84 +L3 +L623 +R86 +L653 +L4 +L6 +R902 +R70 +R465 +R63 +L35 +R335 +L48 +R48 +L62 +L48 +R65 +L34 +R57 +R922 +R42 +L2 +R24 +R87 +L151 +R95 +R79 +L62 +L12 +R22 +L8 +R86 +R949 +R61 +R34 +L49 +R5 +L40 +L60 +R4 +R96 +L45 +L435 +R506 +L26 +R677 +R81 +R801 +R735 +L94 +L35 +L4 +R57 +R82 +R73 +L6 +R693 +L982 +R40 +L518 +R99 +L18 +L81 +L85 +R59 +R26 +R93 +R42 +L683 +R48 +R62 +R38 +R34 +R214 +R92 +R36 +L14 +L328 +R299 +L34 +R6 +R71 +R869 +L841 +R16 +L56 +L13 +L64 +R83 +L60 +L812 +L54 +R23 +L67 +R48 +L51 +L68 +L7 +R64 +R114 +R34 +R66 +L31 +R31 +L17 +L22 +R18 +L567 +R1 +R87 +R9 +L9 +R55 +R23 +R7 +R53 +R39 +L748 +L57 +R355 +L63 +L64 +R62 +L37 +R655 +R18 +R53 +R49 +L85 +R85 +R92 +R89 +R87 +L7 +R39 +R4 +R96 +L84 +L16 +R99 +L11 +L59 +L29 +R85 +L41 +R57 +R13 +L37 +L49 +L74 +L59 +L95 +L574 +R74 +R79 +L253 +L680 +R854 +L607 +R55 +R324 +R28 +L25 +R27 +L38 +L91 +R27 +L73 +R19 +R32 +L78 +R63 +R37 +L77 +L22 +L1 +L26 +L28 +R92 +L13 +R18 +R10 +L53 +R55 +L84 +R53 +L24 +L79 +R79 +L36 +R36 +R54 +R46 +R15 +R85 +L22 +L45 +R67 +L31 +L34 +R65 +L50 +R17 +R33 +L78 +L5 +L50 +R89 +L19 +L48 +R11 +R44 +L29 +L16 +L5 +R16 +L18 +L50 +R48 +R25 +R15 +L48 +R17 +R44 +L20 +R10 +R33 +L36 +R26 +L22 +R4 +R40 +R45 +R7 +R36 +L10 +R42 +R8 +R12 +R3 +L21 +L14 +R32 +L30 +L6 +R38 +L50 +R36 +L35 +L18 +L9 +L12 +R7 +L21 +L21 +R44 +L27 +R35 +R6 +L49 +L41 +R43 diff --git a/src/aoc2024/1.clj b/src/aoc2024/1.clj new file mode 100644 index 0000000..a946086 --- /dev/null +++ b/src/aoc2024/1.clj @@ -0,0 +1,18 @@ +(ns aoc2024.1 + (require '[clojure.string :as str])) + + +(def pairs (map (fn [ln] (map Integer/parseInt (str/split ln #"\s+"))) + (str/split (slurp "input1.txt") #"\n"))) + +(def sum #(reduce + %)) + +(defn adv1_2 + [l r] + (->> l + (map #(* % ((frequencies r) % 0))) + sum)) + +(let [A (map first pairs) + B (map second pairs)] + (adv1_2 A B)) diff --git a/src/aoc2024/2.clj b/src/aoc2024/2.clj new file mode 100644 index 0000000..8e81b97 --- /dev/null +++ b/src/aoc2024/2.clj @@ -0,0 +1,54 @@ +(ns aoc2024.2 + (:require + [aoc.utils :refer [read-input]])) + + +;; Each row is a report +;; Each number in the report is a level +(def tdata '((7 6 4 2 1) + (1 2 7 8 9) + (9 7 6 2 1) + (1 3 2 4 5) + (8 6 4 4 1) + (1 3 6 7 9))) + +;; A report is safe if: +;; - The levels are either strictly increasing or strictly decreasing +;; - Any two adjacent levels differ by at: +;; - at least 1 +;; - at most 3 + +;; The goal is to determine how many reports are safe + +(defn report-is-safe + ;; unknown if increasing or decreasing + ([report] + (or (report-is-safe report -) + (report-is-safe report +))) + + ;; we know the direction + ([report dir] + (let [[this next :as levels] report] + (or + (nil? next) + (and + (<= 1 (dir (- next this)) 3) + (report-is-safe (rest levels) dir)))))) + +(defn without-each + [v] + (map-indexed + (fn [idx _] + (concat + (take idx v) + (drop (inc idx) v))) + v)) + +(defn report-is-safe-with-allowance + [report] + (boolean (some true? (map report-is-safe (cons report (without-each report)))))) + +(map report-is-safe-with-allowance tdata) + +(let [input (read-input "inputs/input2.txt")] + (count (filter report-is-safe-with-allowance input))) diff --git a/src/aoc2025/1.clj b/src/aoc2025/1.clj new file mode 100644 index 0000000..761faa5 --- /dev/null +++ b/src/aoc2025/1.clj @@ -0,0 +1,68 @@ +(ns aoc2025.1 (:require [utils :refer [read-strs]])) +;; https://adventofcode.com/2025/day/1 + +(def turn-strs (read-strs "inputs/aoc2025/input1.txt")) + +(defn turn-val + [[dir & num]] + (* + (if (= dir \L) -1 1) + (Integer/parseInt (apply str num)))) +(turn-val "R35") + +(def N 100) +(defn get-position + [initial change] + (mod (+ initial change) N)) + +(def start 50) +(get-position start (turn-val "L50")) + +(defn password + [position [turn-str & rest] count] + (if (= turn-str nil) + count + (password + (get-position + position + (turn-val turn-str)) + rest + (if (= position 0) + (inc count) + count)))) + +(password start turn-strs 0) + +;; part 2 of the challenge added the complication that you're counting +;; the number of times the dial ~crosses~ 0, not just the number of times +;; it lands on 0 + +(defn cross-count + [position turn-val] + (+ + (quot (abs turn-val) N) ;; guaranteed to cross at least x // N times + (let + [next-pos (get-position position turn-val)] + (if (neg? turn-val) + (if (and (not= position 0) + (or (> next-pos position) + (= next-pos 0))) + 1 + 0) + (if (< next-pos position) + 1 + 0))))) + +(cross-count 0 -100) +(defn password-2 + [position [turn-str & rest] count] + (if (= turn-str nil) + count + (password-2 + (get-position + position + (turn-val turn-str)) + rest + (+ count (cross-count position (turn-val turn-str)))))) + +(password-2 start turn-strs 0) diff --git a/src/utils.clj b/src/utils.clj new file mode 100644 index 0000000..1027d0d --- /dev/null +++ b/src/utils.clj @@ -0,0 +1,12 @@ +(ns utils) +(require '[clojure.string :as str]) + +(defn read-ints + [filename] + (let [data (slurp filename) + lines (str/split data #"\n") + parse-line #(map Integer/parseInt (str/split % #"\s+"))] + (map parse-line lines))) + +(def read-strs #(str/split (slurp %) #"\n")) +