From cf7d87c04d016cc6d543818ca7709b98f03faa11 Mon Sep 17 00:00:00 2001 From: Jakob Lechner Date: Sat, 7 Dec 2024 17:45:16 +0100 Subject: [PATCH] initial commit --- .envrc | 1 + .gitignore | 2 + day1/.gitignore | 1 + day1/Cargo.lock | 54 ++ day1/Cargo.toml | 7 + day1/input | 1000 +++++++++++++++++++++++++++++++++ day1/src/main.rs | 48 ++ day2/.gitignore | 1 + day2/Cargo.lock | 7 + day2/Cargo.toml | 6 + day2/input | 1000 +++++++++++++++++++++++++++++++++ day2/src/main.rs | 51 ++ day3/.gitignore | 1 + day3/Cargo.lock | 54 ++ day3/Cargo.toml | 7 + day3/input | 6 + day3/src/main.rs | 43 ++ day4/.gitignore | 1 + day4/Cargo.lock | 54 ++ day4/Cargo.toml | 7 + day4/input | 4 + day4/input2 | 140 +++++ day4/src/main.rs | 60 ++ day5/.gitignore | 1 + day5/Cargo.lock | 7 + day5/Cargo.toml | 6 + day5/input | 1387 ++++++++++++++++++++++++++++++++++++++++++++++ day5/src/main.rs | 59 ++ day6/.gitignore | 1 + day6/Cargo.lock | 7 + day6/Cargo.toml | 6 + day6/input | 130 +++++ day6/src/main.rs | 115 ++++ shell.nix | 8 + 34 files changed, 4282 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 day1/.gitignore create mode 100644 day1/Cargo.lock create mode 100644 day1/Cargo.toml create mode 100644 day1/input create mode 100644 day1/src/main.rs create mode 100644 day2/.gitignore create mode 100644 day2/Cargo.lock create mode 100644 day2/Cargo.toml create mode 100644 day2/input create mode 100644 day2/src/main.rs create mode 100644 day3/.gitignore create mode 100644 day3/Cargo.lock create mode 100644 day3/Cargo.toml create mode 100644 day3/input create mode 100644 day3/src/main.rs create mode 100644 day4/.gitignore create mode 100644 day4/Cargo.lock create mode 100644 day4/Cargo.toml create mode 100644 day4/input create mode 100644 day4/input2 create mode 100644 day4/src/main.rs create mode 100644 day5/.gitignore create mode 100644 day5/Cargo.lock create mode 100644 day5/Cargo.toml create mode 100644 day5/input create mode 100644 day5/src/main.rs create mode 100644 day6/.gitignore create mode 100644 day6/Cargo.lock create mode 100644 day6/Cargo.toml create mode 100644 day6/input create mode 100644 day6/src/main.rs create mode 100644 shell.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..e197866 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.direnv/ +**/target diff --git a/day1/.gitignore b/day1/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day1/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day1/Cargo.lock b/day1/Cargo.lock new file mode 100644 index 0000000..3f5791e --- /dev/null +++ b/day1/Cargo.lock @@ -0,0 +1,54 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "day1" +version = "0.1.0" +dependencies = [ + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" diff --git a/day1/Cargo.toml b/day1/Cargo.toml new file mode 100644 index 0000000..04ff611 --- /dev/null +++ b/day1/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day1" +version = "0.1.0" +edition = "2021" + +[dependencies] +regex = "1.11.1" diff --git a/day1/input b/day1/input new file mode 100644 index 0000000..013f38b --- /dev/null +++ b/day1/input @@ -0,0 +1,1000 @@ +77221 93653 +61169 27995 +49546 69782 +11688 41563 +15820 48282 +63235 37517 +28850 68189 +80735 25255 +42616 65322 +55068 99897 +30851 35509 +14907 49013 +64732 92011 +16709 68830 +67643 36207 +44080 23559 +96480 58330 +99450 40186 +21169 63410 +58096 21671 +53828 79572 +47026 44529 +90101 28656 +45773 73412 +71303 85991 +45304 78294 +96528 23559 +19794 17882 +74831 17211 +88912 11644 +98961 80435 +15788 96101 +16350 86995 +96806 19028 +99959 77868 +58887 90255 +42568 25255 +29278 88912 +94028 63269 +42810 21548 +97490 71747 +89051 24477 +73916 31808 +97751 88912 +73608 77868 +62426 13754 +29429 36177 +11070 10894 +78656 85185 +31308 60500 +96166 91114 +36906 85134 +99662 77868 +66402 41563 +37085 14475 +80907 53324 +61650 53324 +84223 63753 +83891 47827 +15973 77536 +68843 40593 +98854 31274 +42426 97404 +25255 67531 +44559 50141 +93909 50674 +28070 32858 +24880 24813 +29338 89795 +64883 77868 +66924 57646 +32984 66502 +32238 39062 +38816 23559 +58770 65322 +74953 91636 +70592 19028 +93111 11644 +31065 23537 +67370 19028 +18314 47412 +71075 74334 +21544 44529 +59137 50980 +20440 80749 +14393 38495 +72130 90255 +43828 68830 +23262 73660 +11923 50980 +47754 14164 +96043 34362 +27162 28090 +20838 50713 +75009 11121 +92099 31274 +22054 38248 +43518 80106 +68189 13153 +50520 12727 +51425 40674 +42998 31053 +52443 33051 +37256 54436 +16648 95555 +81123 17329 +46974 79835 +36328 77868 +76373 23559 +82592 70046 +70600 22417 +27116 89690 +28090 34969 +86348 23559 +53145 50980 +30203 83301 +23347 77681 +76433 26236 +28046 92869 +58920 50980 +25518 28090 +12791 44529 +61967 31808 +98022 53056 +24326 12263 +41095 13121 +24045 82448 +31274 16530 +78021 21589 +63029 19658 +75684 14475 +31258 36493 +40561 48589 +20457 54974 +14783 88465 +39433 23537 +34774 53324 +10455 14329 +26338 74416 +55227 37003 +36963 40380 +31910 68189 +94894 18220 +23166 44111 +48884 46787 +73036 89795 +83519 25205 +50205 93653 +85926 50141 +69194 23559 +25529 11642 +10182 31274 +13638 61987 +83588 19028 +75911 20768 +44692 24325 +43278 94888 +48148 24394 +86205 99327 +82605 58818 +52770 68189 +89068 84917 +66452 83679 +50217 85099 +64914 52073 +76460 78294 +43026 24410 +44179 50980 +47653 90255 +78061 50980 +14475 71478 +77868 37150 +99645 28090 +86267 70055 +58072 68830 +96428 66585 +77501 50141 +52344 93653 +49534 35509 +46925 12437 +40005 87987 +17329 86995 +17585 89795 +32296 59660 +81836 11644 +89435 65322 +55149 59423 +56971 50141 +26342 95142 +57894 56227 +49762 33007 +48949 65641 +40453 53505 +67613 23537 +27110 87987 +25231 63910 +92546 50713 +70074 27554 +39649 93653 +93231 30520 +60008 79179 +18449 47209 +68828 36207 +18908 72254 +55426 44661 +62522 87987 +60923 25255 +85721 68107 +35153 71814 +20053 24813 +24233 22904 +36237 92731 +92077 68189 +30105 50674 +37032 90255 +12745 54116 +41563 53324 +24700 29145 +60226 85335 +50713 64775 +29972 51790 +79176 19794 +40017 96101 +90724 41345 +51608 39176 +46178 50141 +26151 23489 +19569 44529 +34368 86052 +18948 50801 +62091 17329 +89749 38984 +68315 37514 +52396 19794 +14981 14475 +36038 69571 +50048 50980 +60796 41563 +69942 72877 +80976 25234 +56722 90255 +49489 28090 +60768 65557 +70753 85065 +15233 23522 +94697 87600 +40958 41532 +91709 40116 +83586 19028 +88140 24977 +56993 50980 +17980 53324 +12421 97982 +30183 40884 +50452 53324 +91314 90651 +69995 19028 +16588 28090 +22432 98658 +86088 77868 +46361 65322 +97178 75705 +37444 79320 +12275 96101 +47016 16942 +36822 87327 +62082 31274 +68265 64314 +87344 24603 +40642 23559 +87254 38755 +62372 50713 +89026 68830 +88519 96101 +53514 31808 +24686 41563 +23817 68705 +26704 89031 +37908 65322 +22665 35601 +75378 59200 +16797 86995 +55847 68189 +55932 72688 +41470 96101 +43557 17329 +45439 77868 +41230 76226 +25104 92869 +43736 93653 +85938 93653 +74153 54726 +73956 70350 +70419 37102 +81275 64160 +30656 32684 +46218 32617 +67969 31808 +61544 81806 +39376 56568 +14769 60336 +10199 97703 +61064 40091 +75531 30486 +17211 31808 +75184 74633 +24565 61765 +83922 44529 +11644 25255 +71836 14393 +53030 19028 +83437 33190 +33687 54998 +92054 82083 +48250 68533 +10977 34363 +51050 19028 +80898 68276 +26442 68830 +39875 65514 +24976 76417 +31946 23537 +95278 90255 +71678 26450 +49641 28580 +12962 13674 +13598 30362 +40620 21256 +49062 92869 +88449 79529 +80153 94081 +36918 70556 +77902 99228 +41848 99097 +26032 39378 +23830 50980 +49712 78294 +95464 65322 +76971 27393 +67074 22132 +17629 71246 +92019 92869 +20780 96521 +68372 16880 +49710 88060 +94680 52634 +28626 57101 +31808 60809 +25578 28090 +12020 25255 +46008 33046 +27712 36207 +17168 53033 +92923 87987 +94668 65843 +59490 48858 +69085 38485 +28242 14664 +18302 96101 +64047 71241 +62752 73532 +28873 59278 +22206 18029 +57298 85374 +26420 78294 +74055 30817 +74377 45566 +81846 17058 +35184 27305 +72054 89795 +78666 41563 +80545 96101 +69240 51322 +76319 36831 +23617 14475 +53848 93653 +65082 36888 +18802 93491 +63942 23559 +80208 22876 +17018 68830 +78018 51611 +35520 75130 +43479 88543 +18522 96101 +41260 15010 +58041 21675 +96272 68830 +73601 78294 +44788 52104 +67152 89795 +57671 61399 +33841 56764 +41963 53394 +41010 28090 +53937 65322 +75472 76675 +22253 92068 +24277 93653 +62012 14475 +27539 50141 +29180 41637 +27151 35922 +28752 23559 +31602 47673 +80298 50906 +94689 38297 +87987 48139 +51692 61967 +93653 86995 +99694 96638 +50948 11644 +87830 19794 +57579 93403 +60947 72082 +18514 53324 +99194 25255 +57630 93653 +49914 10526 +34613 94340 +32145 16105 +39569 62764 +14118 31274 +38901 19016 +47443 66925 +83812 31274 +61920 50141 +88684 50713 +32305 31808 +58695 50713 +20016 42720 +68955 31976 +96299 99509 +83258 96101 +49424 68830 +97130 14043 +34668 50936 +27567 35509 +57890 65959 +58399 78860 +88934 50980 +70656 66788 +91507 44529 +53671 87987 +75858 71137 +14726 13674 +25416 31274 +90521 50075 +37289 96101 +79415 19028 +21158 25355 +53210 16168 +35192 81526 +67240 23559 +42967 65310 +81598 93094 +12765 36207 +23853 41643 +78439 22984 +13052 50141 +56642 93653 +19028 82791 +89371 36244 +89795 50799 +41542 90489 +49486 72630 +26630 50763 +35019 68830 +62271 78294 +16433 77868 +42466 57338 +63666 39984 +56231 83564 +51132 96101 +33675 74200 +94670 70445 +51236 17822 +52493 64460 +45346 86995 +41620 31274 +80479 88912 +46200 90255 +13789 60686 +98564 76843 +44974 92717 +76047 80674 +60650 89430 +55723 45722 +89426 97853 +33961 98414 +32872 68189 +65322 12029 +29922 36159 +74923 34697 +37065 59688 +66622 23559 +68253 14475 +28664 53324 +62981 25761 +83161 50674 +22849 50980 +11119 76308 +22980 13794 +76171 19411 +96351 28221 +45573 90255 +19850 79146 +97828 90483 +23867 85271 +36353 50141 +46579 87987 +73434 23559 +57169 68189 +68768 41682 +59354 97617 +62181 64641 +34167 53324 +28374 24803 +55863 57352 +25058 33040 +76126 53005 +97283 51641 +25887 29253 +43067 50713 +51616 61868 +97533 16129 +50692 80951 +43173 41626 +93917 76055 +84713 53465 +24130 13599 +56773 50980 +15310 44529 +63375 50141 +75875 93653 +22284 33135 +46294 77836 +29713 14393 +95318 83346 +83264 61967 +39267 47771 +61101 86995 +47882 96101 +24345 70347 +50674 14475 +17296 12880 +52605 11644 +40817 78294 +36207 93653 +16045 96101 +91784 68830 +34583 69934 +71867 28090 +74898 22671 +54609 27206 +33070 26257 +18570 57394 +16766 87036 +62825 21503 +39793 17504 +12038 82452 +37265 12706 +69479 44529 +96101 44260 +49175 50713 +70708 55412 +50136 14475 +27300 96101 +75794 62368 +10277 87990 +30825 87987 +35563 24149 +12505 91890 +11323 14393 +89922 84455 +10927 65359 +50656 71304 +47973 11644 +17156 92869 +98964 96101 +50980 59345 +94733 23559 +22743 26134 +90255 54273 +80006 65322 +10157 92869 +70496 28090 +25569 41226 +79982 92869 +34897 76485 +83357 86388 +26352 79503 +67432 15174 +49155 72153 +36311 86995 +14394 65333 +70928 51667 +67367 23559 +48195 57003 +52001 26154 +63251 21651 +21894 89795 +50774 43252 +85637 36207 +79243 11644 +49512 57954 +22454 15919 +84214 20805 +67121 86995 +49247 78035 +79313 34840 +33168 19814 +48657 92888 +59824 74905 +30088 68830 +74246 90052 +78389 65322 +88418 28090 +93716 62226 +74962 29324 +47309 50980 +93517 14393 +23895 68175 +34548 25255 +32628 84730 +55988 31274 +82578 40953 +51728 16926 +19440 27805 +42922 45159 +52930 41563 +91562 31274 +23559 62680 +92150 26879 +78315 61783 +43601 91325 +87621 17838 +78580 65350 +94778 77868 +68519 83273 +35509 66389 +82288 52439 +65083 19794 +86995 13010 +66618 95850 +18656 70145 +98537 65322 +60842 52161 +68830 10132 +99689 24077 +33740 89795 +45595 53090 +78239 36207 +20185 36207 +87307 69366 +83009 77868 +34685 88642 +13674 28090 +82450 69909 +44812 75146 +54296 92869 +73558 94990 +21422 48229 +49473 10547 +66108 68189 +71169 74202 +78276 40690 +82977 78294 +61842 15634 +31582 95459 +39064 14475 +70204 18593 +71244 87987 +31642 50490 +98413 37109 +61175 50141 +37168 23559 +44093 11032 +18806 40848 +91249 73483 +95812 32572 +93644 68189 +30669 20850 +75404 92869 +53324 50141 +80675 50216 +14897 73401 +34074 29952 +16366 32630 +95656 28090 +73964 58896 +90705 66916 +92869 59662 +99522 78294 +35903 19794 +33033 42610 +55650 50980 +29289 11753 +32302 58345 +76036 57644 +74870 31274 +85035 77868 +79322 25255 +50332 31274 +78294 44529 +93000 53324 +36560 19028 +40041 53525 +70360 89795 +19074 98749 +32829 89603 +61436 71046 +89938 85369 +52708 28090 +83958 53324 +88155 67097 +32730 75527 +64221 23559 +60391 97432 +70047 20185 +12372 73527 +46501 29274 +66552 14746 +56373 51614 +95596 11782 +81196 72623 +32282 60515 +49504 14393 +57642 34348 +95402 87987 +81625 68830 +28527 37199 +71475 31808 +94280 23005 +55623 99355 +46783 29073 +36641 81559 +74788 14535 +87994 78773 +80189 77868 +33263 89795 +23537 23537 +25755 22264 +67413 72800 +74924 73774 +81215 78294 +78206 92869 +36161 50141 +54925 86995 +66305 49951 +42462 28090 +99051 88912 +44954 89795 +88856 28090 +63026 85778 +22651 24813 +39262 14475 +86176 69982 +65395 14393 +12926 78294 +81994 53324 +16933 30191 +46987 19794 +37215 28090 +15340 63748 +40271 86674 +23747 52856 +61156 11644 +65356 56048 +72336 51278 +21864 77868 +99351 13349 +24599 79046 +62281 23361 +81871 53324 +14029 42297 +50141 48720 +46677 43636 +10745 35965 +39344 80864 +38077 50038 +13983 89795 +66663 67877 +64175 19028 +62355 68830 +96823 79443 +46436 44754 +53388 68830 +45987 92723 +87646 11707 +75997 45545 +69968 93653 +30425 44529 +83211 88109 +28725 64932 +47043 89795 +34475 31274 +42302 94895 +66558 92753 +48964 50713 +19546 78294 +51026 89795 +89346 57408 +52993 54676 +29577 38385 +85932 60320 +18030 22556 +65993 19922 +74692 23559 +61588 89795 +50688 69541 +93760 44529 +75094 96101 +68976 86835 +46278 50980 +97836 44529 +17576 32708 +48519 46071 +72647 93653 +54724 34155 +45186 43448 +44529 41828 +90404 86357 +63175 44529 +88381 25963 +32140 23537 +43348 36423 +41733 88912 +84065 98953 +20389 96101 +38749 93788 +37929 35143 +63747 35340 +72249 93653 +98042 59381 +22741 95783 +88124 33425 +16493 44529 +36599 69408 +50436 41563 +67695 86149 +89091 20022 +60708 92607 +28750 68830 +80224 39113 +34580 96101 +79688 34798 +14870 68189 +47719 29252 +57652 33458 +65541 87987 +86435 19794 +95204 81239 +43800 50980 +94063 11644 +24096 36588 +36628 95478 +81443 17329 +61221 57166 +52782 78294 +16740 31274 +68369 45653 +28895 44529 +39222 65582 +97201 77602 +81119 11644 +41083 50141 +72917 25255 +46148 21269 +44495 18020 +99464 90525 +67254 58381 +52750 28135 +63899 55754 +14617 50713 +36962 50713 +41322 73436 +22504 38709 +72577 39875 +67799 68830 +68284 71156 +46011 61967 +50367 31808 +45832 87987 +88775 87987 +32562 26340 +43756 49887 +73444 16547 +67302 92449 +22133 85451 +17768 77868 +69281 39885 +87364 25255 +41209 27363 +37792 77868 +66667 73746 +22195 28090 +65037 37556 +28634 89795 +23901 50674 +40511 95801 +47779 45253 +76489 86807 +77873 66992 +87523 35509 +32876 50980 +62342 50980 +84222 41563 +88205 40382 +78856 20051 +97888 68189 +22233 17329 +35868 81437 +80155 93653 +82730 78294 +12733 19794 +55038 26258 +50682 23250 +42043 74279 +54719 71512 +54474 23991 +61776 25255 +55564 41563 +39404 31274 +94954 14475 +76258 89795 +87689 67995 +65619 59930 +41846 17435 +21990 22185 +60161 53026 +44955 57523 +84178 39875 +32693 87987 +19125 44529 +96731 93653 +98080 44529 +72947 95746 +67285 23344 +78101 77580 +43064 11644 +81350 23483 +46937 11644 +97686 79381 +66339 60744 +39269 50674 +61837 77868 +97647 86995 +44613 93568 +73127 68830 +64048 80370 +15530 87987 +63926 51860 +95853 91981 +26155 28090 +82222 19794 +10035 87445 +16445 93653 +67972 15558 +51780 68830 +52358 31274 +83942 60096 +64899 11955 +56009 96101 +42288 36590 +53349 65322 +76255 50713 +53044 26351 +37184 31274 +24813 19028 +62309 52490 +93607 19028 +27423 45568 +26128 78294 +72691 50141 +42162 60052 +78247 10613 +80209 31808 +38310 93653 +59228 47607 +24897 23559 +55176 37760 +33062 53324 +26521 39170 +93209 68189 +89881 23559 +11418 50980 +16884 78294 +31995 50980 +17858 98671 +49107 96101 +50512 54526 +56890 65322 +76173 65309 +51569 52845 +73919 23537 +62591 16739 +53735 79935 +14454 69804 +19976 46609 diff --git a/day1/src/main.rs b/day1/src/main.rs new file mode 100644 index 0000000..c919177 --- /dev/null +++ b/day1/src/main.rs @@ -0,0 +1,48 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; +use regex::Regex; + +fn main() { + let mut numbers_a = Vec::new(); + let mut numbers_b = Vec::new(); + let re = Regex::new(r"([0-9]+)\s+([0-9]+)$").unwrap(); + if let Ok(lines) = read_lines("input") { + for line in lines.flatten() { + let Some(caps) = re.captures(&line) else { return }; + let a = &caps[1]; + let b = &caps[2]; + numbers_a.push(a.parse::().unwrap()); + numbers_b.push(b.parse::().unwrap()); + } + } + + assert!(numbers_a.len() == numbers_b.len()); + + numbers_a.sort(); + numbers_b.sort(); + + let mut total_distance:i32 = 0; + let mut similarity_score:i32 = 0; + for i in 0..numbers_a.len() { + let dist = (numbers_a[i] - numbers_b[i]).abs(); + total_distance += dist; + + let mut similarity:i32 = 0; + for b in numbers_b.iter() { + if numbers_a[i] == *b { + similarity += numbers_a[i]; + } + } + similarity_score += similarity; + } + + println!("The total distance is {}.", total_distance); + println!("The similarity score is {}.", similarity_score); +} + +fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/day2/.gitignore b/day2/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day2/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day2/Cargo.lock b/day2/Cargo.lock new file mode 100644 index 0000000..63c2f60 --- /dev/null +++ b/day2/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day2" +version = "0.1.0" diff --git a/day2/Cargo.toml b/day2/Cargo.toml new file mode 100644 index 0000000..cd3d088 --- /dev/null +++ b/day2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day2" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/day2/input b/day2/input new file mode 100644 index 0000000..25adeec --- /dev/null +++ b/day2/input @@ -0,0 +1,1000 @@ +19 21 24 27 24 +85 87 89 92 93 96 98 98 +2 5 6 7 8 12 +63 66 69 72 75 82 +18 21 23 26 28 26 27 28 +16 19 21 19 20 22 23 22 +37 39 37 38 41 42 44 44 +18 20 17 20 24 +50 51 54 53 58 +73 76 77 80 83 83 84 85 +30 31 33 33 36 39 40 37 +50 52 52 53 54 55 55 +49 52 54 56 59 59 63 +42 44 46 46 49 52 53 59 +40 43 45 49 52 54 +87 89 93 96 95 +66 69 70 71 73 77 78 78 +30 32 33 36 39 43 47 +8 9 12 16 18 21 22 28 +80 83 84 85 91 92 +75 76 77 84 87 89 88 +8 10 12 17 18 21 22 22 +14 15 20 23 26 29 33 +13 15 18 23 26 33 +43 41 43 44 45 47 49 +77 74 77 78 79 82 79 +55 53 54 55 55 +73 70 72 75 78 79 81 85 +46 44 46 49 50 51 57 +72 70 69 72 73 75 78 +57 55 53 54 57 59 60 57 +21 19 20 22 21 23 23 +11 9 10 13 10 12 13 17 +36 33 34 33 34 35 42 +39 38 38 41 44 +75 72 75 75 78 75 +56 53 56 56 56 +36 33 36 38 38 40 44 +55 54 54 55 57 58 65 +27 25 28 31 35 37 39 +81 79 83 85 83 +19 16 19 23 26 26 +27 25 26 29 33 37 +72 71 74 75 79 81 88 +34 31 32 35 41 44 45 48 +69 67 70 71 72 77 74 +44 43 48 51 51 +57 54 57 63 66 70 +16 14 16 22 23 30 +6 6 9 10 11 13 +7 7 8 10 11 12 13 11 +81 81 84 85 88 88 +53 53 54 55 59 +28 28 31 34 36 37 40 45 +60 60 63 61 62 +63 63 65 63 66 67 65 +36 36 34 37 37 +79 79 76 79 83 +27 27 29 28 31 32 37 +91 91 91 93 96 97 +44 44 46 49 52 52 55 54 +72 72 73 76 76 77 77 +5 5 5 7 11 +4 4 5 7 9 9 15 +51 51 53 56 60 63 66 +2 2 3 7 10 11 10 +61 61 65 66 66 +5 5 8 12 16 +53 53 57 58 59 62 64 69 +18 18 20 21 26 28 30 32 +71 71 72 73 80 81 82 79 +82 82 85 87 92 92 +61 61 63 65 72 74 78 +54 54 60 61 64 71 +58 62 65 67 68 71 +47 51 53 56 57 60 63 60 +12 16 18 20 23 23 +80 84 87 89 90 93 97 +25 29 31 32 34 37 43 +38 42 45 43 44 +72 76 77 74 77 76 +56 60 59 60 60 +64 68 71 70 74 +2 6 9 10 7 12 +17 21 21 23 24 25 27 30 +15 19 19 21 18 +49 53 56 57 57 59 59 +5 9 9 10 12 14 18 +82 86 87 87 93 +50 54 56 58 62 63 66 69 +88 92 96 97 94 +24 28 32 34 37 38 41 41 +15 19 22 26 27 30 34 +59 63 67 68 73 +71 75 80 81 83 84 +8 12 14 20 17 +67 71 77 80 80 +35 39 42 49 51 55 +51 55 62 64 65 71 +40 45 48 50 52 +46 51 54 56 55 +84 89 90 93 96 96 +50 57 60 62 66 +23 28 31 33 34 40 +59 65 63 66 68 +89 94 95 96 93 91 +75 82 81 82 82 +75 82 85 84 86 90 +48 55 57 55 60 +74 81 82 83 84 84 85 +35 42 42 44 46 45 +15 22 25 25 25 +44 50 51 52 52 56 +31 38 38 39 42 47 +50 55 58 60 64 66 68 69 +11 18 19 20 24 21 +4 10 12 16 19 19 +16 23 24 28 29 33 +18 23 27 29 36 +51 58 64 66 68 71 73 +35 42 44 46 51 52 53 51 +15 22 28 29 30 30 +66 73 80 82 83 87 +21 26 32 35 36 42 +50 48 47 46 43 40 43 +92 89 87 85 84 83 80 80 +49 46 45 44 43 40 36 +88 86 84 82 79 73 +16 14 13 12 11 13 12 9 +47 46 48 46 44 47 +17 16 17 14 13 10 10 +60 59 61 60 56 +68 65 62 65 60 +22 21 18 18 15 12 +28 25 24 22 21 21 19 20 +76 74 74 71 71 +73 72 69 68 68 65 61 +85 84 84 83 81 74 +46 44 40 37 35 +91 90 86 84 82 83 +65 62 59 55 54 52 50 50 +55 53 52 48 46 43 40 36 +39 36 34 30 28 22 +22 20 17 12 10 8 +33 30 24 22 21 20 22 +96 94 88 86 86 +97 94 92 91 84 83 81 77 +31 29 24 23 17 +11 12 10 8 6 5 +25 28 27 25 22 21 22 +24 25 23 21 20 18 18 +65 68 66 65 62 59 58 54 +67 68 67 65 62 60 55 +53 54 55 53 50 49 +72 74 75 73 71 74 +76 78 81 78 77 77 +91 92 91 93 90 89 85 +70 73 72 74 73 66 +91 93 93 92 89 88 85 +18 21 21 19 16 19 +30 32 29 29 29 +92 93 93 91 87 +14 17 15 12 10 10 3 +61 62 58 55 54 51 50 48 +15 17 15 11 12 +71 73 71 69 68 64 61 61 +33 35 31 29 26 24 20 +90 91 87 86 79 +32 34 29 26 24 +91 92 91 85 86 +51 53 52 45 43 43 +27 30 27 22 19 17 13 +94 97 90 87 85 80 +11 11 10 9 7 4 2 +67 67 64 63 62 64 +83 83 80 77 75 75 +79 79 76 74 71 69 65 +14 14 11 10 3 +33 33 30 27 29 26 +70 70 67 69 66 65 64 65 +75 75 73 75 75 +89 89 87 84 81 82 78 +72 72 69 71 69 66 60 +25 25 25 22 21 +55 55 52 52 50 53 +29 29 27 26 26 25 25 +53 53 53 51 50 49 46 42 +27 27 27 26 23 17 +85 85 83 79 77 76 +76 76 74 72 68 71 +55 55 52 49 47 46 42 42 +76 76 74 70 67 65 64 60 +58 58 56 53 49 47 44 37 +13 13 7 5 2 1 +73 73 71 68 62 65 +44 44 42 37 35 33 30 30 +85 85 82 76 75 71 +94 94 91 84 83 80 77 72 +74 70 68 65 63 61 +81 77 74 72 69 72 +86 82 80 79 76 73 72 72 +98 94 92 91 88 85 84 80 +29 25 23 21 18 16 15 8 +96 92 91 89 90 88 87 85 +73 69 66 64 61 60 61 63 +89 85 82 84 81 78 77 77 +70 66 63 61 63 59 +92 88 85 84 86 85 78 +92 88 86 86 85 84 83 +55 51 51 48 47 45 42 43 +92 88 88 87 85 85 +98 94 92 90 87 84 84 80 +44 40 40 38 35 34 28 +19 15 11 10 9 7 +78 74 70 67 66 63 66 +67 63 59 58 58 +57 53 50 48 44 42 38 +21 17 15 11 10 8 7 2 +74 70 69 63 61 +19 15 10 8 5 4 6 +73 69 66 61 61 +53 49 43 42 39 35 +78 74 73 68 66 60 +30 24 23 20 19 17 14 13 +48 43 42 41 43 +56 51 48 46 45 43 42 42 +55 50 48 45 42 41 37 +56 49 48 47 44 41 35 +35 30 27 28 27 26 24 23 +88 83 82 80 79 81 84 +82 77 80 77 75 75 +85 80 77 80 76 +75 69 72 70 63 +26 19 18 18 16 +77 72 72 71 73 +97 92 90 90 87 86 86 +30 23 22 21 21 18 14 +76 71 70 69 68 68 63 +68 61 57 56 54 53 51 48 +26 20 18 14 12 10 12 +57 52 48 46 44 44 +91 85 82 78 75 73 71 67 +72 66 62 59 54 +37 31 29 24 22 +90 83 76 73 74 +63 58 56 53 48 48 +71 66 60 57 54 51 47 +42 37 34 31 25 18 +18 21 23 24 26 27 26 +17 20 23 24 26 29 32 32 +82 83 85 86 88 90 94 +26 27 28 29 32 39 +38 39 40 39 40 42 45 +58 61 64 66 69 68 70 67 +22 24 25 22 23 23 +57 60 61 59 61 64 65 69 +5 7 8 6 7 10 12 18 +43 46 49 49 52 55 57 59 +43 46 46 49 48 +78 80 82 85 85 85 +34 36 39 39 43 +20 23 23 26 31 +61 63 67 68 70 +17 19 21 25 26 25 +43 45 49 52 54 56 56 +48 49 51 52 55 56 60 64 +15 17 18 22 24 27 34 +69 72 77 80 83 84 86 88 +45 47 49 56 57 59 58 +56 58 64 65 68 68 +3 6 7 8 13 14 16 20 +78 81 82 89 90 96 +24 23 26 28 31 33 35 +88 86 88 89 87 +26 23 25 28 30 31 31 +30 29 32 34 38 +64 62 65 68 69 75 +77 76 75 77 80 81 +55 54 55 54 56 54 +87 84 86 84 86 88 88 +7 5 3 4 7 9 12 16 +64 61 64 63 69 +41 38 41 41 42 +12 10 12 12 14 15 12 +50 49 50 50 51 51 +79 78 79 81 81 84 88 +52 50 51 51 56 +5 3 5 7 11 14 16 +85 83 87 88 90 93 90 +82 80 84 87 88 91 91 +15 12 16 18 22 +82 79 80 83 87 89 96 +14 13 15 20 22 +49 47 48 49 52 57 58 55 +26 23 28 31 31 +10 8 11 13 18 19 23 +79 76 77 79 84 91 +47 47 50 53 55 58 61 64 +85 85 86 88 91 89 +35 35 38 39 41 44 44 +42 42 44 46 49 53 +83 83 86 87 89 92 98 +21 21 22 19 21 +36 36 37 40 41 38 35 +58 58 60 62 60 60 +11 11 14 15 13 15 19 +47 47 46 49 54 +23 23 24 26 26 28 31 32 +79 79 81 82 82 81 +44 44 44 46 47 49 50 50 +35 35 38 41 41 43 47 +52 52 52 54 56 59 65 +2 2 4 7 8 10 14 15 +75 75 77 81 83 86 87 86 +19 19 23 24 27 28 31 31 +79 79 83 85 87 91 +23 23 27 29 35 +60 60 61 62 69 72 75 +12 12 19 22 24 22 +45 45 52 55 55 +60 60 61 68 71 73 74 78 +40 40 46 47 49 51 54 59 +17 21 23 25 26 28 30 +22 26 27 30 33 34 36 35 +77 81 83 84 86 88 90 90 +7 11 14 15 18 22 +6 10 13 16 22 +65 69 71 74 75 76 75 78 +69 73 71 73 76 75 +75 79 77 78 80 83 84 84 +36 40 43 46 49 47 51 +52 56 58 60 58 59 64 +28 32 33 35 35 36 39 +23 27 28 28 27 +33 37 38 38 39 39 +77 81 83 83 86 90 +34 38 40 41 42 44 44 49 +86 90 94 97 98 +48 52 55 59 57 +28 32 36 37 40 43 45 45 +13 17 21 23 26 30 +40 44 48 51 57 +12 16 23 26 27 30 +14 18 21 24 26 29 35 34 +31 35 42 43 44 44 +18 22 24 26 32 36 +31 35 37 39 45 51 +69 76 79 82 85 87 89 91 +79 86 89 91 89 +68 75 77 78 79 82 82 +28 34 35 38 41 43 45 49 +65 71 74 75 76 82 +66 71 74 72 75 +22 27 25 27 30 28 +82 88 87 88 91 93 94 94 +21 28 30 29 32 34 38 +85 90 92 91 96 +7 14 14 16 18 21 22 23 +19 25 25 27 29 32 33 32 +47 54 57 57 59 60 60 +44 51 51 52 55 59 +63 70 70 71 73 78 +12 17 19 23 25 26 +23 28 32 35 37 34 +50 56 59 60 63 67 70 70 +53 59 63 66 70 +69 76 78 82 89 +60 65 66 67 70 76 77 +37 44 46 51 48 +34 41 47 48 48 +69 76 77 84 86 90 +42 49 50 55 62 +49 47 46 44 43 44 +83 81 78 75 75 +13 11 8 6 5 1 +75 72 69 68 67 65 59 +34 32 30 31 28 25 22 +75 73 72 74 76 +82 79 78 77 75 73 76 76 +72 71 72 71 67 +63 61 59 56 57 50 +19 17 17 16 14 +34 33 33 30 31 +98 96 95 95 93 93 +28 25 25 23 21 18 14 +18 15 13 12 10 10 3 +62 60 59 57 54 52 48 47 +98 96 95 91 92 +20 18 15 12 11 9 5 5 +27 25 24 20 17 15 11 +96 93 91 89 85 83 81 74 +77 74 68 66 65 62 +74 72 71 65 67 +26 23 20 18 13 10 10 +68 65 58 55 53 51 47 +61 60 57 56 53 51 46 40 +32 34 31 30 28 +37 39 36 35 34 35 +86 88 86 84 83 80 80 +39 41 38 37 36 33 29 +38 39 37 35 34 31 24 +84 86 83 80 82 79 +57 58 55 54 51 48 49 51 +78 81 82 81 80 79 78 78 +40 41 39 41 40 39 35 +41 43 40 39 38 37 39 34 +72 74 72 72 69 66 +16 18 18 15 14 11 12 +27 30 29 27 24 22 22 22 +52 54 53 53 51 48 44 +58 59 58 57 56 56 50 +34 36 33 31 30 27 23 22 +38 41 38 34 37 +85 88 85 81 81 +64 67 64 61 60 56 53 49 +23 24 20 19 14 +28 30 25 24 22 +70 73 68 65 64 63 60 62 +52 54 51 44 42 42 +96 97 92 91 87 +52 53 46 43 40 37 35 29 +68 68 66 64 63 61 60 59 +51 51 48 46 44 42 40 41 +82 82 79 76 74 74 +23 23 20 17 16 13 11 7 +72 72 69 67 64 61 60 53 +27 27 24 23 24 23 21 18 +29 29 27 25 28 29 +59 59 62 60 57 56 55 55 +98 98 95 93 91 94 90 +70 70 68 67 66 65 66 60 +80 80 79 76 76 74 72 71 +69 69 68 65 62 61 61 64 +21 21 18 16 14 14 12 12 +36 36 34 34 30 +16 16 15 12 10 10 3 +70 70 66 63 61 60 58 +44 44 40 38 35 38 +54 54 51 50 46 43 43 +29 29 26 22 18 +21 21 18 16 12 6 +59 59 57 51 49 47 46 43 +46 46 45 44 38 40 +90 90 88 83 83 +29 29 28 25 23 17 13 +99 99 94 93 91 89 86 79 +68 64 62 60 58 56 55 +98 94 91 89 90 +56 52 50 47 45 45 +78 74 71 70 68 65 61 +27 23 20 19 18 15 9 +92 88 86 89 86 +52 48 45 48 50 +75 71 68 70 70 +23 19 18 15 13 15 13 9 +96 92 94 93 87 +76 72 72 70 68 +80 76 74 74 73 76 +65 61 59 59 58 58 +91 87 85 84 82 80 80 76 +74 70 67 66 66 65 58 +62 58 54 52 50 49 +88 84 80 79 77 74 72 74 +14 10 9 7 3 3 +65 61 58 56 52 48 +20 16 12 10 8 1 +63 59 58 55 54 48 46 45 +57 53 51 46 49 +93 89 82 79 76 76 +52 48 47 45 43 36 32 +98 94 92 87 85 82 81 76 +23 18 15 14 11 9 +82 77 75 72 71 70 72 +61 55 54 53 50 49 47 47 +37 32 29 27 24 21 17 +82 75 74 71 70 65 +12 7 9 7 5 3 +62 57 59 56 57 +68 62 59 57 54 57 57 +73 66 65 66 64 62 58 +37 32 30 27 26 29 22 +98 93 93 91 88 86 85 84 +27 21 21 19 17 14 11 13 +69 64 63 63 63 +82 77 75 72 69 69 67 63 +71 64 61 61 58 53 +15 9 5 4 3 +53 47 44 43 41 37 39 +18 12 11 7 5 4 2 2 +75 69 66 63 59 56 55 51 +97 91 87 86 84 81 78 73 +66 59 57 55 50 49 47 44 +73 66 63 60 57 51 48 49 +58 52 47 46 43 43 +31 25 24 17 16 12 +46 40 38 37 32 31 26 +68 70 73 72 70 +28 29 28 28 25 19 +21 26 23 25 26 30 +82 76 73 71 64 64 +78 75 82 83 89 +88 89 89 87 85 85 +51 54 52 54 53 55 +51 53 54 61 64 68 +60 61 62 63 67 70 72 75 +23 16 15 12 13 11 8 5 +6 8 10 12 13 18 +48 41 39 38 35 34 31 31 +74 70 64 62 61 57 +30 27 29 34 37 41 +24 24 23 22 18 17 14 10 +67 64 63 62 61 59 55 +98 94 93 91 94 +11 12 9 12 15 18 25 +86 82 81 76 74 77 +26 20 19 17 16 11 9 7 +69 69 65 64 62 59 58 52 +90 88 90 94 91 +74 75 73 71 72 72 +40 35 32 26 25 22 18 +4 3 9 11 13 16 19 18 +34 34 35 37 37 +69 73 76 78 79 80 79 +64 64 61 59 57 60 +30 26 23 21 17 15 +44 48 50 54 54 +16 16 15 15 8 +30 30 28 25 21 24 +96 96 92 91 90 89 +50 46 43 41 39 40 33 +30 29 30 31 32 32 33 33 +44 50 51 52 52 +21 19 20 23 23 27 +48 48 49 46 49 51 49 +67 62 60 57 56 53 50 +78 82 84 86 89 94 96 96 +22 22 25 23 20 18 14 +23 20 22 19 22 23 26 +40 40 39 37 37 34 32 34 +39 43 46 49 53 56 53 +65 58 58 55 54 54 +90 92 89 87 86 +17 15 16 19 22 25 23 +41 41 36 33 32 30 26 +6 9 8 8 7 4 6 +46 46 47 49 51 53 59 64 +71 67 64 61 59 56 58 55 +58 60 60 62 62 +61 57 54 50 47 47 +8 13 20 21 24 +47 47 50 53 54 57 55 +35 35 32 31 28 27 25 22 +90 92 90 88 87 83 +52 55 52 47 47 +45 49 51 54 58 +40 35 34 34 28 +51 50 49 48 47 44 44 +91 84 81 81 79 78 75 78 +55 51 50 50 49 46 40 +67 74 77 79 82 85 92 +26 26 28 29 33 +68 72 74 77 81 84 86 +81 77 76 74 67 62 +24 17 15 13 10 6 2 +36 39 38 35 32 30 28 21 +25 28 29 27 29 32 +80 74 73 72 74 68 +13 14 14 15 18 20 21 27 +55 52 49 47 45 41 43 +74 76 75 72 71 70 63 56 +18 17 13 12 11 7 +33 33 35 34 31 26 +45 49 47 49 52 52 +49 54 55 55 57 60 57 +79 79 83 85 90 +50 50 50 51 54 57 +43 47 48 48 50 52 53 52 +86 84 83 85 83 80 80 +41 40 41 44 44 43 +36 30 26 25 22 21 19 22 +9 12 15 18 24 24 +20 27 32 34 36 34 +51 51 53 59 61 61 +57 55 58 59 59 61 66 +6 10 10 13 14 15 18 +39 43 46 49 51 51 +92 89 87 84 83 80 79 80 +45 43 40 35 33 27 +21 24 25 28 32 +31 28 29 32 36 37 40 42 +77 77 79 80 79 80 +88 90 88 87 84 79 75 +16 18 16 16 12 +74 72 70 68 66 63 +72 74 77 79 80 +23 26 27 29 31 32 34 +65 67 70 72 74 75 +74 76 77 79 82 85 +73 71 70 69 67 65 63 +65 64 63 60 57 +29 32 35 36 38 41 44 47 +6 8 11 13 15 17 18 +25 24 22 20 19 16 13 +23 24 25 27 28 30 +42 44 45 47 48 49 +78 80 83 86 89 90 +65 68 69 72 74 75 78 81 +28 29 32 33 34 35 36 39 +63 64 66 69 71 73 74 +15 14 13 11 9 6 +62 65 67 68 71 73 74 76 +92 91 90 89 86 84 83 +70 72 75 77 78 79 +77 74 73 70 67 66 65 +44 42 40 38 36 +89 87 86 83 82 80 77 +58 61 62 65 67 69 +70 68 66 63 60 +42 43 46 49 50 51 52 55 +23 22 19 18 15 14 +42 39 38 37 36 34 +54 51 50 49 46 +21 18 16 15 14 12 11 +31 28 25 23 20 19 18 +15 13 10 8 7 6 4 1 +36 38 39 40 42 45 46 48 +46 44 41 39 37 36 +30 28 27 24 21 19 +23 20 17 16 15 12 +71 74 76 78 80 81 84 85 +82 84 87 88 90 93 95 96 +52 54 55 58 60 62 64 +23 26 28 29 31 +87 84 83 80 79 76 75 73 +26 29 31 32 34 36 +73 72 69 67 66 65 62 +97 94 92 90 87 85 82 +25 24 23 20 18 16 13 +68 66 65 63 61 +32 30 27 25 23 21 18 15 +35 37 38 39 42 +81 84 87 88 91 94 95 +43 41 40 39 38 +53 51 48 45 43 +79 77 74 72 71 68 65 +17 19 21 22 24 +55 58 60 62 65 +69 67 66 63 61 +26 29 30 31 34 37 +3 5 6 8 9 12 +65 68 71 72 75 78 80 83 +94 92 90 89 87 +35 34 31 30 27 +67 65 62 61 58 55 54 +13 14 16 18 20 23 24 +66 65 62 61 58 +83 84 85 87 90 91 94 97 +71 70 69 68 66 65 62 +18 16 13 11 10 9 8 7 +95 92 91 90 87 84 +46 45 43 40 39 38 +42 44 45 48 49 52 +58 61 64 65 66 68 71 +80 79 77 76 74 +59 60 62 63 66 67 69 71 +29 32 33 34 35 38 41 43 +74 71 70 68 67 +79 77 74 71 70 +46 44 42 40 38 36 +61 63 66 69 71 +63 61 58 57 55 53 +11 12 14 15 17 19 +87 89 90 92 94 97 +18 21 24 27 29 +92 90 88 87 85 82 +16 15 14 12 10 9 7 5 +69 68 67 65 63 61 58 56 +61 59 56 54 51 48 +53 56 58 60 61 64 67 +83 82 79 77 74 71 70 +29 31 34 36 39 42 +78 80 83 84 86 89 90 93 +65 63 62 61 60 58 +27 24 22 19 17 15 +38 41 44 47 50 +72 70 67 65 63 60 59 +57 60 63 64 66 +48 49 51 53 55 57 +95 92 90 89 88 +85 88 91 92 94 +16 15 12 10 8 5 4 2 +82 81 80 77 75 73 70 +31 34 35 38 39 41 44 +75 78 79 81 83 86 +84 83 81 78 77 74 +24 21 18 16 15 12 +34 32 31 29 26 23 +94 92 91 89 87 84 82 +17 19 21 23 25 26 +52 50 49 48 47 46 44 41 +44 43 41 40 39 36 34 +68 70 73 76 79 82 +52 50 48 45 43 42 40 38 +40 41 44 45 47 48 51 52 +66 68 69 72 75 77 79 +38 35 34 31 30 29 26 +31 28 27 24 21 +18 19 22 23 26 29 32 33 +85 82 81 79 78 77 +54 52 49 47 46 43 40 37 +60 63 65 68 70 72 74 77 +47 49 52 55 58 61 +26 28 30 33 34 36 37 40 +36 37 40 42 45 48 50 51 +25 24 22 20 17 14 11 +82 81 80 78 77 +69 68 66 63 60 57 54 52 +67 69 70 73 75 +99 98 95 94 93 90 88 +82 85 87 88 91 94 +84 86 89 91 92 93 94 +34 31 29 27 26 23 +76 78 79 80 81 82 83 85 +42 43 46 47 49 52 55 +62 63 66 68 70 +82 79 76 74 71 +4 7 8 9 11 12 13 +6 8 9 10 11 +82 80 77 74 71 69 67 +59 61 64 67 69 +21 19 16 14 13 10 +14 17 18 21 23 25 26 +27 24 22 21 20 19 +77 75 74 73 72 69 +7 8 9 10 12 14 15 17 +76 78 79 82 83 84 86 89 +66 68 69 71 72 74 +69 68 66 64 61 +64 62 60 57 56 +59 61 62 65 68 +19 17 16 14 12 +52 53 54 55 58 61 63 +3 6 9 12 14 +80 83 84 86 89 +97 95 93 91 90 88 87 +52 53 55 58 60 61 62 65 +35 32 30 27 24 22 +52 55 58 59 62 64 +83 81 78 77 75 73 71 68 +91 89 87 84 83 80 78 +7 8 11 12 15 +60 62 65 67 69 70 71 74 +50 52 53 54 56 57 +22 19 17 16 13 10 +46 43 40 39 37 +57 60 63 66 68 70 73 76 +73 74 75 77 80 81 +69 70 72 75 78 +27 26 24 21 19 16 +68 70 72 74 75 77 +73 74 75 76 77 80 82 84 +65 68 69 72 73 75 +50 47 44 41 38 37 +93 90 87 85 83 82 79 +13 16 17 19 22 24 27 +97 95 94 92 91 88 +40 37 35 33 32 +68 70 71 72 73 74 75 +14 17 18 20 23 +43 41 38 37 34 33 31 30 +17 20 23 26 29 31 33 34 +13 15 16 17 19 21 22 +94 92 91 88 86 +82 81 79 78 77 76 74 73 +39 41 44 46 48 50 +82 79 78 76 73 71 +98 97 95 92 91 89 87 85 +81 78 76 74 71 +67 70 72 73 76 79 80 +22 23 25 28 30 31 34 +49 48 46 43 41 +87 86 85 84 83 +84 87 88 90 91 94 +29 26 24 23 20 +22 20 19 18 17 +48 50 53 55 57 60 63 64 +51 49 48 46 43 41 39 37 +21 22 24 26 28 31 34 +55 56 57 59 60 62 63 +38 39 42 45 46 49 +73 71 70 68 67 +54 51 50 47 46 43 42 41 +25 24 23 21 18 +70 72 75 78 81 82 +53 52 50 49 47 +56 55 53 52 49 48 +80 79 78 75 74 71 68 67 +70 71 74 76 78 81 83 +34 33 30 28 26 24 21 +62 64 65 66 67 68 +51 53 55 58 61 64 65 +37 35 32 31 30 28 26 25 +47 49 51 53 54 55 +31 28 25 22 21 19 +21 22 25 26 29 30 31 +53 50 48 45 43 40 38 37 +83 80 79 78 75 +20 21 23 26 29 30 +30 33 34 37 39 +18 20 23 24 25 +24 26 28 31 33 36 37 +81 78 76 75 73 71 68 65 +70 73 75 77 78 81 82 85 +23 24 26 29 31 34 36 39 +26 28 29 32 34 37 38 40 +5 6 7 9 12 +27 25 22 19 16 13 11 +20 23 24 25 26 29 31 33 +29 28 26 24 22 20 18 15 +72 73 76 77 79 80 81 83 +17 18 20 22 25 +85 83 82 80 78 75 72 +7 8 9 11 13 +70 71 72 73 75 77 +58 61 62 63 64 66 68 +23 20 19 16 13 10 8 +8 11 14 17 19 22 +89 88 85 84 81 79 78 +60 63 64 65 68 71 72 75 +47 49 50 51 52 53 55 56 +32 29 27 24 21 19 17 14 +78 81 84 85 86 88 90 93 +69 67 65 64 63 62 +23 24 25 28 30 33 35 +35 36 39 41 43 46 +81 80 78 77 75 +37 39 41 43 44 46 +70 73 76 79 81 +99 96 94 92 89 86 85 82 +31 30 28 26 25 24 21 +73 75 77 80 81 84 85 86 +27 28 31 33 35 38 40 42 +49 51 53 54 57 +28 27 24 23 20 19 18 +54 55 58 60 62 +34 33 32 31 29 +17 20 22 23 24 25 28 31 +57 58 60 61 64 65 68 +89 88 86 84 81 79 77 +20 23 26 29 30 33 36 39 +82 85 86 87 90 91 94 +66 64 62 59 57 55 53 +46 43 40 39 36 35 33 31 +43 41 40 38 35 32 +55 53 52 51 48 +10 12 14 15 17 19 +29 26 25 22 20 18 16 +34 33 31 29 28 26 25 22 +83 86 89 90 92 +81 80 79 77 74 73 70 +90 87 85 84 83 +34 35 38 41 42 +46 45 42 41 38 36 +77 76 73 72 71 +66 63 60 58 56 55 +43 44 47 48 49 51 53 56 +20 22 25 26 29 30 31 +83 86 88 91 92 95 96 +85 82 79 76 73 72 69 +59 57 54 53 50 49 48 45 +90 89 86 83 82 79 +21 23 24 26 29 32 34 +87 84 83 81 79 76 73 71 +48 47 45 43 41 40 37 36 +7 8 9 11 14 15 18 19 +55 52 49 48 47 45 44 +75 76 78 80 83 +62 64 65 68 70 73 76 79 +51 53 54 57 59 62 65 68 +60 61 62 64 67 70 71 72 +87 88 89 90 93 94 +67 70 73 74 77 +37 40 42 44 45 47 48 +27 24 22 19 16 14 +24 23 22 20 17 15 13 10 +19 21 24 27 29 30 +31 29 27 25 23 +73 72 69 67 65 63 61 +88 87 84 81 80 79 +67 69 72 74 75 78 81 +80 79 76 74 72 71 +22 20 18 15 13 12 +42 40 37 35 32 30 29 27 +2 3 5 8 10 +2 3 6 7 10 12 +83 84 85 86 88 91 92 93 +18 21 24 26 29 31 34 35 +77 79 82 84 85 86 88 89 +59 61 63 65 67 69 +12 15 16 19 20 22 +37 35 33 32 30 27 +90 87 86 85 84 +48 49 51 52 53 +63 60 57 54 52 51 49 46 +57 56 54 53 51 50 48 45 +16 14 11 10 9 8 7 5 +54 56 59 61 63 66 69 70 +34 35 38 41 42 44 46 49 +39 40 41 42 44 47 +16 13 10 7 6 3 +89 91 92 93 94 96 +60 63 64 65 68 70 +31 29 27 26 23 20 19 16 +34 37 40 41 44 +89 86 85 83 81 78 75 +79 78 76 74 72 +4 7 9 12 15 17 18 +70 67 65 63 62 60 58 56 +42 44 46 47 48 51 53 54 +17 15 14 13 12 +32 35 36 38 39 41 44 46 +9 8 5 4 2 1 +77 80 82 84 86 88 91 +73 72 70 67 64 63 +31 29 28 25 23 +46 47 50 51 52 +26 25 22 19 18 +36 33 32 29 26 23 22 +17 14 11 10 9 6 4 +63 61 58 55 52 49 46 +44 42 41 40 37 35 33 +61 60 59 56 54 +55 58 59 60 61 63 +93 91 90 87 86 84 +78 76 75 73 72 71 +64 63 62 59 58 +84 85 88 90 93 +44 42 39 38 37 35 +41 40 37 34 32 +10 9 6 3 2 +50 47 44 42 39 +82 84 87 88 89 90 +74 75 77 78 81 84 86 +50 53 56 57 59 62 +58 56 55 53 52 +19 16 13 12 10 8 7 +35 32 30 28 26 25 24 +29 26 24 23 21 18 15 14 +23 21 19 16 15 14 11 10 +86 89 92 94 95 +66 64 62 59 56 +23 22 20 19 18 +45 42 40 37 34 33 32 31 +20 18 16 15 14 13 +31 28 27 26 23 22 +10 13 16 17 19 22 24 +37 38 39 40 41 +79 81 82 84 87 90 +33 31 30 27 25 24 22 +4 6 7 8 10 12 14 16 +11 13 16 18 21 22 23 +80 81 83 85 87 90 +64 61 60 59 57 54 +88 86 83 82 81 79 77 +62 63 65 67 69 +99 97 94 93 91 90 89 88 +66 68 70 71 72 +97 94 92 91 88 +83 84 85 87 90 +22 24 26 29 32 33 34 +42 44 45 48 49 50 +93 92 91 89 87 86 +77 79 81 82 83 85 88 +39 38 37 35 33 +36 33 31 30 27 +66 64 63 60 57 54 51 48 +35 37 39 42 43 +66 64 61 59 56 55 +23 24 25 28 30 33 36 38 +2 5 6 7 8 9 12 13 +81 78 77 74 73 72 69 +40 42 43 44 46 49 +45 46 48 51 54 57 60 63 +97 94 93 91 89 86 85 82 +61 60 59 58 55 54 53 +50 51 53 55 58 60 63 64 +45 46 47 50 52 +28 26 24 23 22 19 17 +38 40 42 43 44 46 47 +34 32 29 28 26 25 +17 14 11 8 7 +98 97 95 94 93 92 +73 74 75 76 78 +76 78 79 80 83 +70 68 67 64 62 60 59 56 +95 94 93 90 89 88 86 +42 39 36 35 32 29 +39 36 33 32 30 +64 66 69 71 72 73 75 +39 37 35 32 29 27 24 diff --git a/day2/src/main.rs b/day2/src/main.rs new file mode 100644 index 0000000..6493d61 --- /dev/null +++ b/day2/src/main.rs @@ -0,0 +1,51 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; + +fn main() { + let mut safe_reports = 0; + let mut safe_reports_with_dampener = 0; + if let Ok(lines) = read_lines("input") { + for line in lines.flatten() { + let report = line.trim().split(' ').flat_map(str::parse::).collect::>(); + if check_report(&report) { + safe_reports += 1; + safe_reports_with_dampener += 1; + } + else { + for i in 0..report.len() { + let mut new_report = report.to_vec(); + new_report.remove(i); + if check_report(&new_report) { + safe_reports_with_dampener += 1; + break; + } + } + } + } + } + println!("Number of safe reports: {}", safe_reports); + println!("Number of safe reports (with dampener): {}", safe_reports_with_dampener); +} + +fn check_report(report: &Vec) -> bool { + let mut inc_or_dec:i32 = 0; + for i in 0..report.len() - 1 { + let diff = report[i+1] - report[i]; + println!("diff is {}", diff); + if (inc_or_dec < 0 && diff > 0) || (inc_or_dec > 0 && diff < 0) { + return false; + } + inc_or_dec = diff; + if diff.abs() < 1 || diff.abs() > 3 { + return false; + } + } + return true; +} + +fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/day3/.gitignore b/day3/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day3/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day3/Cargo.lock b/day3/Cargo.lock new file mode 100644 index 0000000..4c00902 --- /dev/null +++ b/day3/Cargo.lock @@ -0,0 +1,54 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "day3" +version = "0.1.0" +dependencies = [ + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" diff --git a/day3/Cargo.toml b/day3/Cargo.toml new file mode 100644 index 0000000..0275d9d --- /dev/null +++ b/day3/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day3" +version = "0.1.0" +edition = "2021" + +[dependencies] +regex = "1.11.1" diff --git a/day3/input b/day3/input new file mode 100644 index 0000000..c5bc9ac --- /dev/null +++ b/day3/input @@ -0,0 +1,6 @@ +mul(427,266)#mul(287,390)mul(398,319)#!$>don't()mul(613,600)from()@!{-from()[%?mul(189,242)~#$>from(96,165)$select()'{mul(908,64)mul(483,371)how()mul(3,691)/;*};select()&+mul(750,722)}- how()@when(522,243))'+why()mul(690,877)mul(660,82)why() ~mul(643,414) ^who() ),!why()what():mul(631,119)~-@{mul(46,574)mul(615,533)%-!mul(340,363)mul(616,181)*$*][*#: :mul(520,454)':&/,who()mul(415,958)select()who()?:#$(]don't()when()select()mul(105,235)))@$++^what()mul(232,129){#how()when()-<)mul(722,937)who()''how(729,422))select()!'/mul(142,570)who()mul(735,148)(*mul(508,385)select()from()%&mul(873,313){{$,[mul(767,964)don't()how()mul(468,348)+##~mul(392,237)do()mul(990,506)[:*!>mul(63,701)-,when()@~!%>mul(386,211)mul(488,490);from()+]$]-&/mul(375,471)-]'mul(567,455)+what(),where()when()>mul(529,980);/,mul(121,730) /who()when() ;^mul(820,390)where()+;]mul(129,546)(-mul(332,834)don't()why()>:mul(347,49)mul(280,870)mul(406,169)~what()-<;mul(433,817)!}[ where(606,861)mul(524,995)who(129,365)}mul(793,330) mul(903,23);why()[why()mul(26,14)who()^*(-&&)~mul(175,589)when()!why(){$}<%'mul(739,5): mul(129,410)from()$select()when()^who()mul(469,649)@)select():<@!mul(431,543)--what()don't()>when()what()who()where(943,544)why()who()'how()mul(228,498)mul(496,917)#select()~>who()+[mul(376,741)>don't()+>#~?+why():mul(370,925)<{*&mul(158,101)mul(906,92)don't() )select()mul(744,992)~~when() where(){mul(676,190)why()}don't() what()'@;^'who()mul(718,403)<[%/(&-when()!)mul(744,633)}>[%mul(921,762)mul(589,811)+$-[why())who(553,930))mul(444,379)^<})don't();']$&mul(379,703)'<(mul(307,647))/where()(&/?mul(119,27)how(905,140)mul(172,530)/{@'don't()!mul(917,471)~from()mul(943,189)who()+@how()/]where()mul(176,134)&what():#*from()}+select()?mul(293,840)[}%/mul(537,65)}*who(56,653)>why()*from())mul(15,830)'~from(189,667)}mul(817,724)]select()^&[)mul(286,977)how()#where()@;where()* !mul(67,213)}^};{what()mul(398,674)#(><%*from()mul(641,923)%} mul(897,886)where() '@::+!%mul(409,42)mul(956,203)mul(324,301)mul(464,146))mul(756,429)]~*?^<:&{/do() ^{ / !>mul(392,884)how()why()]who()mul(32,781)select()*where()mul(571,9)@,mul(722,448)mul(409,423):mul(216,914)mul(100,814)<'&mul(582,883)&when()who()[what()&how()mulwhen(522,122){)!mul(73,318)don't()>why()*!:%-mul(192,339){@-%mul(64,832)who()^when()why()}mul(895,824)![, * %&mul(665,94)what():;?mul(557,512)^/,{['!when()mul(476,699),~{why()>#who()where(511,927)!]mul(607)(::>-]mul(568,897)select()[! from()$!!^#mul(634,776)/mul(33,966)select()mul(330,932) +>mul(5,441)[+[-how(117,39)^]don't()mul(122,41))how()+!:mul(956,681)->%mul(416,511)({when()how()?#*!^~mul(448,262),{how()~} ,mul(790,561)+&mul(469,233what()who()%]* {mul(150,915)]^+select()select()(where()+-mul(6,883)~]who()mul(837,650)mul(927[!when()who()don't();from()mul(365,821)$}(~ &mul(974,620)&mul(44,781)what(394,452))]# select(73,770)(mul(154,994)mul(415,59){,$-)/@:mul(625,488);mul(35,74)!~$$mul(935,878):;{<,from():mul(35,43)~!+mul(277,826)^^mul(823^(what(341,469)mul(259,735);'mul(730,963)%}mul(477,745)#where()>-+:(>mul(788,170)mul(832,160)what(893,597)]why()>mul(319,300)mul(579,720)*%from()}@?^!mul(853,477)>when()who()'when()}+'where()why()do())select()mul(95,625);[:-mul(257,861)>$(mul(166,899)@mul(210,918)from()(:?/:how()mul(142,506)<}[]+$~++:mul(157,271)/; how()why(366,364)*+:*mul(599,342),!mul(854,498){?)])'mul(817,886)>what()@mul(884,982)+#*;]' why()mul(227,381),why()select()/&,mul(523,852)mul(748,939)*~mul(382,349)%mul(312,240),don't()}why(){{select():-what()'mul(899,335)where():[why()*)'mul(712,495)@ [?;select())mul(635,75)(&&mul:?],mul(455,75) (mul(289,870)&#@'mul(691,916)}] (mul(12,681)]why()why()-who()]mul(509,944) ^ ],%mul(419,845) ?:$$~)mul(353,525);&#{mul(530>{+@:#where()-mul(478,959)&;-when(384,359)mul(302$~mul(801,986)@$what(187,104)%-mul(607,712)]what()),how()?+who():mul(618,871)how(){{>} /$[#from()]mul(386*)?&!,mul(765,535){]#!^>$@(mul(903,186)who()where()what();%%'mul(866,666)why(),select()?~@%mul(431,821)from()*~;when()]what()[mul(113,240)from()}*(mul(558,362)>;>mul(987,432-;;mul(651,671)$?]!{mul(389,80)where()*>why()]where()mul(373,123)mul(292,50)where()why()mul(240,271)>select())!how()'^mul(765,285)when(549,726){?}*> @why()}-mul(913,65)what()%mul(900,910)${++}where()]what()>^don't()where(631,11)&select()$#mul(946,41)}!mul(620,975)*-select()select()[mul(725,94)(from()?%{mul(893,90 ~~mul(45,24)@';>,#$mul(983,675)mul(478,620)@%,who()where(849,525)[/mul(901,822),mul(68,784)mul(287,864)}mul(979,614)select()+how()/mul(24,685);@why()what()what()mul(838'when()@!;/mul(591,639)'mul(374,769)}+{$mul(471,858)select()'-what() where()~'/}mul(224,139)),~;*'mul(529,46);!mul(88,615)-+!when()!how()#when()from()why()mul(926,665)]when();#$mul(880,4)select()mul(705,311)who()when(90,538)& }when()mul(653,900)why()do()from()!['{:@{'!mul(280,635)!,select();do()~-:from():%;+>mul(762,944)mul(86,637)how()&'~(:(select()mul(879,416)when()}](who()how()from()!mul(549,406):^-&$where()*/mul(646,29)^%mul(428,692):;from()what(822,431)]how()@~when()+mul(18,727)#select()-mul(662,289) +*/mul(705,735from()*<~}mul(130,76)/~where()who()mul(176,27)@where()where()who(){(,~mul(390,185)who()]$}when()&%mul(649,266)where()~who()]$&,]])mul(71,265)what() where():]#why()mul(285,789)&)^mul(399,312)>&select()!]-why()'mul(70,238)>{/) mul(917,868)]#+~/~select()mul(438,62)@mul(833,695)mul(935,290)[$]&&mul(630,652)'[<(,:*mul(281,551)why()(&:&#don't()$why()@-^}],-mul(556,858)>when(998,177)where()how())mul(116,164)('':%$mul(621,5)&mul(28,230)]%why()&;who()#mul(235,778)%,~how(),+?+how()#mul(185,415)]mul(654,30)*#!mul(905,875)where(877,134) #why()^don't() ;<>mul(640,206)when()%[@>mul(168,282$]@from(){!mul(705,946)/ !!mul(190,831)who()why()mul(621,925)%>where()select()*mul(56,969)@why()+@&+%'#mul(80,180)}~,+mul(776,263) /$}mul(776,582)[!*@{{:#%mul(458,110) {why()mul(217,319)mul(86,257)how()mul(848,36)(,&why(34,374)$<&who()mul}+from():from()/(/>mul(26,581)#$>what()& mul(334,571)where()/>~+?:}}]~mul(890(when() mul(823,437)/mul(454,808)what()~where()'mul@~;:!mul(382,785)?why();when()mul(843,638),who()$@(mul(186,336)mul(768,910)what()/where()?mul(152,254))mul(613,647):!mul(540,369)~$%,;^mul(690,678),}]*?*;how()select()what()mul(658,762))}[[&)do()* ;mul(449,254)who()>'mul(177,264)!{#select()?;why();}-mul(214,245)>;'mul(388,902)where()[~(what()mul(817,942)mul(158,891)!when()^&^where(470,136)mul(222,501)'-when()^ select()>[mul(627,783)-how()-don't()who()from(385,583):what()mul(881,584)%why()#&@mul(903,634)~!{!<*[from()^from()mul(256,820)[,'~from()mul(252,391)*;]?mul(302,901)where()<$when()}!&don't(), )*what()mul(142,107)$%]$$when()mul(68,89)%from()}^#/+mul(942,988)?mul(272,609)]what()mul(63,880)how()>how();from()>}from()!,mul(405,175)-})-mul(570,270)where()*what()when(128,295)@]how())who()&mul(392,855)[> how()how()mul(890,154))where()who()what()mul(406,29)^, <]]select()}mul(367,75)-when()%where()#~,:mul(950,288),}^[when()what()&/mul(572,719)&-when() ]from(958,382)who()mul(925,930)$-#%(%from()mul(763,475)how()'mul(863,300)%'^*)+when();[mul(297,62)%> /when())%mul(124,65)from()>&&from()why()&~ mul(959,703)()^(+:mul>why()]mul(404,257)mul(681,247)>-*&#?what()^{where()don't()! ')mul(568,330)mul(694,625)/select()-where(751,791)!'mul(621,726)what(459,55)!+%select(874,250)why()how()@^mul(622,786))]~ @)mul(423,647)when()*^why()mul(939,18)why()[{select()~mul(813,331)select()(@>mul(476,709););/who()#mul(217,676))when()from()~>^mul(325,411)mul(230'(what(271,503)]who(){don't()%#!/usr/bin/perl,mul(232,840) +>how()*what()[how();{},/':mul(482,962)>mul/from()mul(559,299):}who()~'what()&/mul>-mul(149,717)^how()*+'mul(884,495)#+~)%-where()[why()mul@<]/mul(875,97))where(), why()}?mul(481,270)+&!&(where()+(+how()mul(700,711) ;who(578,538)+!(mul(665,124)])&mul(793,92:mul(622,126)where()}mul(312,612),%(mul(305,409)/{mul:#]!~#from())]where()>mul(133,894)who()when()select()from())what(782,492)} &~mul(671,870)mul(108,731)mul(455,894)what()**mul(171,819)mul(9,795)%what(133,533)mul(340,15)>mul$>;{why()*<@%mul(262,148)#from()[;+ ~how()[*do():who()'/mul(959,150)//mul(988what()mul(707,60):*mul(346,903)from(820,211) &?when()&;'why()]mul(162,123)@[select(175,454)@mul(607,986){&' @**mul(926((?-~mul(970,450)when()mul(944,547)who()where()what()who()[select(),-^mul(580,289);?}mul(709,677) mul(10,529),@mul(458,346)#-what()/mul(315,458){select()who())(-mul(812,748)*why()'mul(804,59)>who()%(,/where()%when() mul(357,79)+#>}do()/@,mul(4,139)what()who()where(458,714)how(){^how()mul(955,257)who()@,when()~!&@,mul(306,23)^who()mul(708,911)when(927,56)@&]&mul(421,641)select()} !#$[what()mul(501,26)]!*mul(133,700)@what(67,944)]],who()how()){*mul(944!^what()^'mul(414,12) :~?+]>,>do()what()[mul(762,731)%what()<,how()mul(169,103)~what(){[{$/}+%mul(942,416){how())how()-@mul(515,151)why()< *{?+(,&mul(801how(): '(from()@(from()]mul(81,656)>?why(366,661)select()%@~select(){mul(291,623)>why()select()(:why()%select()from()mulwhen()/$-what()@#do()*who()mul(745,834)-+@:/mul(884,813)*when()!{()[-mul(899,610)>>why(),#(+don't()what()<~mul(597,66);mul(895,115)(select()$who()'mul(751*?mul(505,760)*mul(691,904)mul(834from()~)*&where(985,615)~'mul(860,807);select()+ +{mul(740,925)^-who()$from();{*who(930,758)mul(461,169)@!]-{;mul(125,232)}why()~@]/+%why(231,278)mul(990,649)<$'mul(930,83)why()mul(972,431)@)#@-do())from()mul(38,721)?how()mul(370,999);]+;when()why()#-+why()mul(979,803)mul(656,360)mul(940,701)!}:)) ~?mul(999,807){:+[%+@({mul(135,491)-$~'when()*mul(117,418)?do()how()}how()+who(326,8)mul(740,915)[}why()#what()mul(566,643)~&:/(@ when()%(mul(421,320){>select()when()who()<,(from()when()mul(262,130)select()>,'<why()#where()}from()mul(111,990)^mul(840,910)<~select(367,802)@?}from() :mul(262,551)+^}>#'when()mul(937,18)&where()%# -from()*mul(369,863)@:)*+>don't()/^#mul(846,823)*mul(910,364)select()},)'/why()mul(75,30)@mul(206,337)-)-what()$}>mul(924,832) mul(948,363)(+mul(96#from();?':}$:>mul(956,973)-}%&#where()where(566,355)-@what()mul(643,945):mul(113,470)< how()-:]),,do()^[;+mul(650,992)why()what()>+:#mul~where():##:who()/don't()&mulfrom();mul(203,347)^why()'~mul(34,992)~mul(43,23)mul(461how()@where()when()don't()]&(-?;mulwhere() }>@who()>mul(587,787)mul(177,150)?&[mul(673,467){who(); ^@select()mul(489,258)#%,do()' }-'from()?*where()mul(519,991){~mul(100,786)how(116,173)mul(401,916)?*from()what()[how()!from())where()mul]%);{-'mul(198,617)?+-mul(684,266)select()don't()+!!!!& %mul(487<$where()when()mul(291,746)^select()select()>@from()mul(675,786)?when()mul(971,260)mul(381 from()]:]#who(){%~mul(625,149)who()select() <%mul(775,189)*who()&;mul(779,811)who(32,704);{[:%{[)?mul(426,194)select()$([mul(86,850)$ [,)>^^when()from(547,559)mul(160,267)/!*,!'mul(794,37)mul(526,419)/~(}+!where()who()how(580,118)mul(998,365);+mul(971,223)@when()/why()%mul(264,442)$who()$]how(347,766)]!~!~mul(44,835)}&don't())(mul(247,848)?who()from()how()&?!<'mul(4,587)mul(700,580)when()when(431,211)(mul(895,525)*#why()'))mul(118select()~mul(738,599)]%(*-^>'^:mul(320,963))[~+mul(25,220),#@mul(501,765)do()#mul-<>?how()from() mul(193,614)from()when()~&,mul(748,258)*#?where()who()why()/mul(2,3);{where(){mul(983,26)where(): ,mul(111,766)}$^#{mul(78,205)@?where()who()}^mul(836,378)don't()@%where() :who(65,691)>mul(612,507)^mul(609,895),mul(145,394))!where()who()% <$@who()mul(78,456)'where()#?how()mul(835,135)from(359,309)%/&,(}mul(806,416)[%+#)how()from()mul(776,153)~(;?who(){[mul(233,340) +~when()(select()who()how()mul(895,703)mul(723@from()!}]>mul(242,311)@{mul(45,928)^^&*,when(627,448)}when()who()*mul(916,537)[mul(796,856)'>when()why()&who()mul(650,488)}+#when()<%mul(944,505)why()?$*?from(953,19)do()mul(260,781)what():&what()/,mul(94,500)when()when(333,446);(when()~$^mul(475,992)mul(182,987))mul(539,499)how()>^)mul(965,326)%%:%[-mul(866,145)*$select()&~>mul(845,528)! where() select(),who()mul(233,174)mul(938,185) mul(968})mul(288,754)*,)^mul(21,938 how()what():~+ $;who()mul(45,150)#from()/< ,where(),don't()@from(20,864):^#}from()mul(904,694)}>mul(32,251) ]-'%+%/mul(537,614)why()what()select()^&where()what(761,969)mul(666,129)when()]}($>when()-@;don't()@*from()from()how() '#mul(671,116)where(),what()&]+from())$*mul(725,537))who()<*<+from()where()mul(209,705)/!!#mul(631,654);)>*#/}mul-how():}{]from()^%where(){'<;who() mul(916,187),mul(627,593),>)+?why()<+?mul(772,583);;why()@mul(676,125)from()(where()where()what()mul(315,458)&'%%?$mul(967,658)from()mul(639,853)}>who()mul(569,506) what()what()what()'}<]%mul(674,667)[+how()where()select()&why()>&'mul(619,606)who()who(){from()<~[?/mul(257,454)(*&]@[ ]+don't()%:%why()+>&#(-mul(524,120)},mul(68,702)!mul(734,878):where(),#mul(363,999)!$~#&from()^<*how()mul(583,385)mul(609,453)who()mul(198,289)mul(456,335))select()when():}'mul(152,156)]&who()?~what():'mul(595,969)from();why()when()*+#why()from()!don't()'when()(;'?how()]'mul(978,210)#&when()how()):%?^]mul(395,664)'mul(912,244){),@:?'who();;don't()>{!where()why()when()$]*>mul(948,729)'~)select()-'*mul(186,228)]#;@ )}}mul(261,980)<{/when()+?mul(291,330)mul(121,244)mul(836,102)]mul(876,667)$}%,:-+-mul(493,878)>why()~+~}!:where()-mul(880,424)why(770,240)who()why()+>!>select()select()@mul(627,730)//;} select()mul(307,530)]/ / @who()!don't()/;{+select()}{~mul(404,620),[)~}}):+do()>how()[mul(667,655)%?mul(322,981) how(711,736);mul(629,379)why()%&};why()~mul(480,801)-^^ $mul(633,131)how()from();%:)%^&!don't()mul(329,229)who(),when()<>mul(146,399);#[:;:don't()><]mul(819,85)(when(){mul(812,398)*#^%select()mul(256,504)from():mul(824,150)*)?when()?#@>,mul(955,85)who()!?who()-from()mul(77,506)?[#>:@$'mul(667,680)} &,['%+mul(521,388)&^, &# diff --git a/day3/src/main.rs b/day3/src/main.rs new file mode 100644 index 0000000..8faccf6 --- /dev/null +++ b/day3/src/main.rs @@ -0,0 +1,43 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::path::Path; +use regex::Regex; + +fn main() { + let mut result: i32 = 0; + let mut result_filtered: i32 = 0; + let re = Regex::new(r"(do\(\)|don't\(\))|mul\(([0-9]+),([0-9]+)\)").unwrap(); + let mut enabled: bool = true; + if let Ok(lines) = read_lines("input") { + for line in lines.flatten() { + let (sum, sum_filtered) = re.captures_iter(&line).map(|c| { + let instruction = c.get(1).map_or("", |m| m.as_str()); + if instruction == "do()" { + enabled = true; + (0, 0) + } + else if instruction == "don't()" { + enabled = false; + (0, 0) + } + else { + let mul = c[2].parse::().unwrap() * c[3].parse::().unwrap(); + ( + mul, + if enabled { mul } else { 0 } + ) + } + }).fold((0, 0), |sum, val| (sum.0 + val.0, sum.1 + val.1)); + result += sum; + result_filtered += sum_filtered; + } + } + println!("result: {}", result); + println!("result (filtered): {}", result_filtered); +} + +fn read_lines

(filename: P) -> io::Result>> +where P: AsRef, { + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} diff --git a/day4/.gitignore b/day4/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day4/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day4/Cargo.lock b/day4/Cargo.lock new file mode 100644 index 0000000..622985d --- /dev/null +++ b/day4/Cargo.lock @@ -0,0 +1,54 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "day4" +version = "0.1.0" +dependencies = [ + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" diff --git a/day4/Cargo.toml b/day4/Cargo.toml new file mode 100644 index 0000000..94d7c77 --- /dev/null +++ b/day4/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day4" +version = "0.1.0" +edition = "2021" + +[dependencies] +regex = "1.11.1" diff --git a/day4/input b/day4/input new file mode 100644 index 0000000..489c8d6 --- /dev/null +++ b/day4/input @@ -0,0 +1,4 @@ +..A.A. +...C.. +..A.A. +.B...B diff --git a/day4/input2 b/day4/input2 new file mode 100644 index 0000000..4cf0dd5 --- /dev/null +++ b/day4/input2 @@ -0,0 +1,140 @@ +MAMAMASXXXSAMXSSSSSXMXMAMMSXMASAMXMXSSXMXXXXMSMSSMXXSAXMMSSSMSXMMXSMMMMSSMMMAMMMMSMMSXMAXMASMMSXASXSAMXXAAMXMXMAMXMAAXMASXSMXSSSSSSSSXMXSAMX +MSMMMMSXAAAMSMMAAMMMMAMASXMASAMMSXAXXMAMSMMMMXAMAMXAMMXSAAAAASASMASXAAMXAAXSAMAMMAAXXAMXMMSMMXMAMSAMXMMMSMMAXXXMXSMSMSMASMSMAMAAAAAAXXSASAAX +XAAXMAMMSMMMSAMMMMXAMAMXAAXAMXSAMAMXMSXMAASASMSMAMMXXAAMXMSMMSAMMAMXMXSXSMMMASMXSSMMMAMAAMAAASXSAMXMAXSAAAMSSSMMAAAASAMXXAMMAMAMMMMMMMMASMMS +SSXMMAXAAXMASMMXSXSMSSSSSXMSSMMXSAMXXAAXSMSASAMAMXXMMMXXAMXXXMXMMSXMSAXMAMXSXMXAAMXSASMMSXXMMAAXMXXSAXMMMSAAAXAASMMMSXSSMSMSASXSMXAXASMMMMAX +XXASMSSSMMMMSAMAMAXMAAMAMXMAAXAAMMMMMSSMAAMMMMMSSSSXSAASMSAXSAMXXXAAMAMSAMXSXAMMMMASAMAXMMMSAMXMSAMASXAAAMMMMMAMMAXXXAAAAMASASXAMSMSMSXXAMXM +MSXMAAAAXMSAMAMXSAMAMSMSMMXSMMMXSAXAAAXXMMMXMXMAAXAAMMXSAAMSMAMSAMMMMAMSASAMMSMSAMXSASXMSAAAAXSXMASAAXSMXMMASMMSSSMXMMMSSMAMAMMMMSAAXMAMSXSA +ASMMMMAMAXMASMMMMASMXAXAMXAAAXMASXSMSXSSXSAMXAMMSMMMMSMMXMMMXAMXXSAMSSMXAMMSMXASMSASAMXXMMSSSMMXSXMASMXMSMSASAAXMASXXXAAXMAXAASXMMSMSMXSAAAS +AXAXAMAXMMSXMASXSXMXSXSXXMXSAMXMSMMAXMAMASXASXSXAMAAAAASXMSXSXSASAAXAMMMSXXAMMMMAMASXMXMSXMAAAXASASAXXMASAMXSMMMMMMMSMMSSSMMSMMXXAXMXMSAMXMM +AMXSMSMXSAMAMSAAMMMMSMMXXAAXAXMAMAMAMMAMXMAXXMAXSSSMSSSMAAMXMMMMMMSMSMSAAMSSSXSSSMMMMMXMMAMXMMMAXAMASAMXMMMMMMSMSMAAAAMAMAMXXAMSMXXSAMXMAAXS +XAMMAMAAMMMAMAMXXAAAXAAMMMMXMMMMSSMSXMASASMSAMMMMAAAXXXXMMMAAAXASXMAXAMMMMAAXAXMASXAAXAMSMMASMSXMAMXSMMAXAAMXAAXAMMSSSMXSAMASAMAAASMMMAXMMMA +SSSMAMMMSASMSSXSSSSSSMXSXAAASAXMAMAMXMMXAXAXMASAXXSMMMMASASMMXXASAMSMAMAASXMMSMSAMMSMSMXAAXMSAAXSXMXMAXAMSSSMSSSSSMMAAMAMAMASAMMMMXAASMMSAAM +AAAMXSXXMASXAXXXAAAXAMAMMMMXMASMSMSMMSAMSMMMSXSXSAMAAAAMSAAAASMMMAMAAAMSMSAXAXAMMSMAMAMSSSMXMMMXMAAASXMSXAAXAXMAMSXMMAMASAMASMMXAMMMMSXASMSX +MSMMMSXSMSMMMMMMSMMMAMASASMSMXMXMAXAAMAMXAMASXSAMMSSMSMXMMXMASAXMAMXXAXMXSMMMSSXMAMAMAMMAXXAXAXASMMMSAAMMMMMSMMAMSXXMASASASXMXMMAXASAMMXMMMM +XMAAAMMMSAAAASXAXMSSXSASAXAAXMSMMMMMMSMMSXMAXAMAMXAAXMXSXMASXSAMXXMMSSXMASAMXAXXSSXSSSSMAMMSXSXMMSSXMMSMAXMXMAXASXAASXMMSXMASASXSSMSAAXMXMAS +XMSMXSAXMSSMXMMXSAXAAMASAMSMMMSAAXAAXAAMXMMXSASMMMSSMMASASXSAMMMXMAAAAAMAMAMMXMMMAAMAMMMASXXAXXAAAXXXAXXSMXMASMXSMMMSXAMSASMMASXXAXSAMXXXMAS +SMXSASAMMAMXAXAAXMMMXMXMMMXAXASMMSSSSSSMSXAMSAMMAXMAMMASXSAMXMAAASMMXSMMAXASMSXAMMMMAXMXXSAMAMSMMSSMMMSMMMXSAMMMMMXAXMXMMAMAMXMMXXMSASXMSAMX +AAAMMSASMMSSSSXMMXAXXMMAXXXMMMSAMXAXMAXAMMSXMAMMXSSXMMAXMXMMMMMSXSAAAXMXSSMSASXSMSXXMMMMMMAMAMXMAAAAAXAAAAMMXMASAAMXSMMSSSSSMMXMSMASAMXAMSMM +SMMSMMXMAAAAAAAAASXMMSAMXMSXMXSMSMSMMMMSMAMMXXMSMMMMAMXSAMMAAAXXASMMMSAAAAAMAMSMAMAMSASAAMAXAMAMMSSSSXSSMSXXMASMMXSAAAAAAMAXSAAMAAXMAMMXMASX +MAMMXMASMMMXMXMMMMSAAAMXSMMAXMMAAAAMAAAMMXSAMSXSMAMASXMAXAMSMSSMMMAAAXMMSMXMAMAMAMAMSASMSSSSSSXSMAAAAAMXMMMAXXXXXAMXSMMMSMSMSSMMASMSSMSAMXMM +MAMXASMSASMMSAMXMAMMMMXASXSAMSMSMSMMSSMMXMMASMAMSAMSAMXSMSAMAMXMASXMXMXMXXASASMSSSSXMMMAXAXAASASMMXMMXMAMXAMMMMMSAMXXAMXXXXAMMMMAXAXAASXMAMX +SSSSMSXXXAAAMXSAMSMSXXMASMMAAMMXMXMAMAMSMMMSAMXMMXXAMMXXAXXMMMASASAMXMAAASASASXSAMXAASMMMXMSMMXMAXMMXXXAMXSXAAAXAMMMXSAMXAMSMASMAMXMMMMMSXSA +SAAAAXAMMXMMMASMMXAMAAXMMXMMMMXAMMSXMAASAXXXXMSSSMSSXSXMMMMMXSXMAXXMAMXSMSXMMMXMMMSSMMAASMMAMXMMMMMSAMSASXMSSSSSSSSSMXAMMMMAMAMMXMXAXXMAASAM +MMSMMMAXSMSAMMSXAMAMMMMMMAXXAMSMSAAXMSMSSMMMXSAAAAXMAMASASAMXMAMMMSSSSXMAXMXSXASXMAXASMMSASMSAAAMXXAAMSSMMMAMAAAAAAAMSMMAXAMMASMMMMSSSMMMSXA +MAMXXXMASAMAMSSMMXAMAAAAMSXMAXAMMMXMMAMXMMAMSMMSMXMMAMASMSSSMSMMMXAAAMAMMMMMMSMMAAAXMSAASXMAXXSMSASMSMXMMMXMMMMMSMSXMAAXMMSXMAXAAXAAAAASASMS +MSSMMXSAMAMXSAMAMSXSSXMXXAASXMMSASAMMMSMXSMSAXMAMMXSXSXSASMMMAMAMXMSMMAMXAAAMMMSAMXSXSMMMAMXMMMMAMXAXMAXAAASXMAXXXXMMXSMAAMXMSSSMMMSSSMMASAX +XXAAXAMASAMXMASAMSMMAMSSMMMMXAXSASMMAAAAMSXMASXSXSMXMSXMXMAAMAXSSSMAXSXSXSSXSAAXAMAMXXMAXXMXMAXMXAMXMMSSMMMMAAXMMMMAAAXAMMSMMMAXMXAAMXXMMMAM +MSSMMMSAMAMASAMXXSAMXMAAAMMMSMMMXMASMSMSMXASMMMMAAXAAMSXXSSMSSSXAASAMSMSAAAAMMMSAMASXMSSMSXXSSSMSSSSXAAMASMSSMSXAMAMMXSAMAXAASMSMSMSSXXXAMXM +AXAXAXMMSASASXXMASAMXMXSMMAMXMASAMMMXAXXXMMMAAAMAMSMMAMMMMXMAMMMSMMMSXAMMMMXMSASXSAXAAAXASMASASAAXAAMMMSAMXAAMAMMMXASASAMXSXMMXAAAAMXMASXSSM +XXMXSXMASXSAMXMAMXSMASAMXSAXAXXSXSXMSSMMAAXSSMMXAXAXSSXXAAXMASXAAAASXMMMXAMXAXAMAMASXSSMAMAXXAMMMMXMAAAMXSMXMMMSSSMAMAMAMXSASXSMSMXMAMMMAAAS +SXMAXAMXSXMAXMASMMMMAMMSXSAMSMMMMSAMXXAMXSXXAAMSMSAXXMMSMSSSSSXSSSMSXAXMSMMMMSAMXMMMMAMXMAMAMSMMSMXSMMXMXSMMMXXXAAMXMXMSSMSAMAXAAXASMSAXMSMM +AASASAMAXASAMAXXSAAMXSAMXMAMXASMASMMAMSMAMMMMXMAMMXMAXXAMAAMMMMXXXAXXMAAXAAAXSAXXSXMMMMAXXSAMXAAAAAMAXMMAXMASMSMSMMMMMMMAAMMMSMSMSXSASASXMXA +SMMASMMMSMMMXMSASXXSAMXSMMSMSAMAXSAMMMXMSXMAMAMXSMSSMMSASMMMAAMMAMAMMSMMSSMMMSXMASAXAASMSXAXAXMMMMSSSMAMSSSMSAAAXMAXXAASXMMSAAXAAXAMAMAMAXSA +MXMMMMAAXMASAAMXMAMMXSXMASAXMMMXMSXMMMSAXASASXSXMAAMAASMMXMSSSSMXMAXMAAXMASMMMASAMXMMMMSAMSMMSSSXAXAMXMAMXMAMXMMMSMSSSMSMAAMSMSMSMMMMMSMXMAS +SXXAASMXMSASMMMSXSXMAMAMSSMSMXMAXMMSAAMXMASASAXMMMMSMMSSXAMXAAAASXMMAXMMXAXMMSAMASMSXSSSMMAAAAAXMXMSMXXXMMMXSSSSXXAAAMASMMMXMMXXXXAXASXMASXM +MXSMXXMSMMXSAAMSAXSMASMMAXXAXAAXXMASMMMMMXMAMMMSXXXXMASMSMSMMMMMMASXMSSMMXXAMMMMXMAAASAMXSSSMMSMMMXMAMSMMAMXAAAMAMMMSMASAMXASXMASMSSMSASXMAS +XMAMXSAAMMSSXMXMAMXSMSXMMSSSSMSSXMMSMSMSMSMXXAASMMMXMXMAAMAMASXXMAMAAAMMAMXMMAXMXXXMSMASAMXAAAMAMAAMAMAASASXMMMMXMAXXMAMMMMMSASXXAASXSXMASAM +SMSAMMXMMSXMASAMSMAMMMAAAMXAMAAMXMAXAAAMASMMMMAMMAAAMAMSMSASMSAMMSSMMMXMMSAXSXMMMMXXXAXMAMSSMMSAMSXSASMXSAXXXAXAASXSXMASXMXXMAMMMMMMMSASXMXS +XAMXMASMXSAMASXSAMXSASMMSSMMMMMSSSMXSMSMAMAMAMXSMMSXSAMMXSXSXXXMAAAASXXMAMMMMXXAAAXMSMMMXMXAMXMAMXASMSXMMXMAMASXXSMAMAXAMASMXSXSAXMAASASXAMM +MXMSMASAASAMMSXSAXMXASAMMAMXMXMAMAAMMMMMXSMMAXAXAMXXSXXSAMXMASMAMMSMMSMMSXXAMXSSMSSXMASXSXMAMAXXMMMMAMXMAMMAMMMMAMAMMSSMMAMSAMAMSSSMXSAMMSSM +ASMXMAXMMSXMAMMXMMSMMMMXXXMAXXSMSSMMAAMMMMASAMSMAMMASAXMASXMMMASMMMMAMXAAASXSAXAAAAMAMXAMAMSSSXSASAXMSMMAMSASXXMAMMXAAAXMASMMMAMAMAMAMAMMMAM +XMASMSXSASAMASXXSASASXMSSXSXXXAXAXMSXSMMASMMMAMSMMXAMMMSMMXMMXSAMAMMSSMXSMAAMMSMMMSMMXMMMMMAAAAMASMSAAAMAMSAMXXSASMMMSSMMXSASMSMMSAMXSSMASMM +XSXMAXAMXXAMXMMAMASXMAAXSAXAMAMMXSXSMAXSMXXAMAXASXMXMXMAMXASAMMAMXMAMAMAAXMXMAMAASAMMASXSXSMMMXMXMMXMSSMMXXAXMMSASXXAAMASXMAASAAXSASXSXSAMXM +MXXSAMAMSSSMAMMSMAMASMMMMSMMMMMMXSAMXSASAMSXMSSMMSMAMMMSMSXMAMMAMXMXSAMXMMSMMMSMMSAMSAMXAAMXSXAXMAMAAMAAMAXMASAMAMXMMSXSAXMMMXMSMSAMMMMMSMMM +SAMXMXAXMAMAASAMSASAXASXMAMMAXASAMXMAMXMAMSAXMAXAAMASMAMXMASAMASMSMAMXSXMAXXAMXMAMAMMXMSMMMAASMXMAMMSMSMMAXSAMXMAMASMXXXMXXXXXXXAMXMAXAAAXAA +MMSMMMMMMAMMMMAMSMMMSAMXXMMSASMSAMSMXSSMMMMAMSMMSMSASMAMASAMXSMAAXMAMAXAMASXSMSAXXMMMSMMXAXXXXMASASXAAXXMAMMMMASASAXMMMMXXMSMMMMSMASASMSXMXM +XMAMSASXMXMMASXMXSAAMAMMXMASAXXXXMAMAMXASMSMAMXMAXMXXMAMXMAXXSMMXMMSSMMMMXSAMSMMSAMXXAAXSSMMSMSASASMMMMAXXAMAXXSAMXXAAAMAXMAMAXAAMXMAXAAMSMS +MSAXSASASMASASASAMMSMSAMXMAMMMXSAXAASMSXMAAXSXAXMMSXSMXSAMSMMSASAAXXAMMAMAMXMAMXMXASMMSMXAASAMMXMXMXMMSMMMXSSXXMMMMASMSSMMSSSXMMMXSMMMMMSAAA +AMXMMXMAMXXMASMMMSXXMAMXXSSSSSXAMSXMXAMXMMMMMSMSMAAMMASMMMAAXSAMMMMSAMSXMMMASXMAXASXMAXAMSMMASXSMASMMAAAAAMAMXSMSAXXMAXAMAAXAMSMSAXASXMXSMSX +MSMMXMASMXMXXXAXAMAXXXXSAAAAXSAMXMAMSMMMSXMXXAMAMMSAMMMAXSSMMMMMASXMAMXMMXMAXAXSSXMAXAMSMMXSSMAMSAMAMSSSMSMMMXMASMSMMXSAMMMMMMMAAXXMMAXXXMAM +AAAXSAAASXMSMSMMSMAMXSAMMMMMMMSXASAMAAAASAMXMSSXXXAXSSMXMMXMAAAXMSASASMSMAMSMSXMAMSSMSSXAXXSAMXMASXSMMXXAXMXSAMAMMAXAAMASXMAAAMAMMSSSXMASMMM +SSSMAMSSSMASAMXAAXMASMAXXXSXAMASAMAXSMMXXAMAAXMASMMMMAXSXXASMSMSAXASASAAMSMMAMXMXMXAAXAMMMMMMMAAXXXMASMMSMMXSASASMMMMXMAMAMSSMSAXXXAAXMAXXAM +XMMMMAMAMXAMMMMSSXMSXXMMSMAMSXMSMSSMXXXSMSSXSXSAAXAAXMMSMSXMAAMMMMXMMMXMMAAMXMAMXMSMMMMMAXAAAMSMMSSMMMXAAAXXSMMMAAXSAAMSSSMAXMSMSSMMMMMAMSAX +MASXXAMAMMXSXSMMXXXAMASAMASXMAXSAAXASMMXAXSAAAXASXSSSXAXAMMMMSMSMSMAMASXSMMSASASAMMAXAXSXMSXSXXAMASAMSMSSSXAXAAMSAMSMMSMAAMAMAXMXXAAMAXAMMSA +MAMASXSASXMMAMAAXSMASAMAXSAAMAMSMMMSMSAMXMMMMXMXMAAAAMSSXMASAMMAAAMAMMSAAXXSASXXASXMSSXMSMXAXAMXMASXMAMMAXMMMSXXMXMXXXXMXMMAAXMSMSSMSMMMXAMX +MASXMASXSASMSSMMSMAMMASXMMMSMAAXAXXXAMMXAAAMMXSAMXMXMAMAXSXMASMMSMSSSMMMMMAMMMMSXMMMAXAAXMMMMMMSMMSXSASAMASXMMSMMASMMSMMSSSMMAAAAXXMAXAMMAMX +SASXSASXSAMAAMAMAAXMSMMXMAAAMXSMSMSMAMAXSSMSSXMASXXSXSSMXMAMMMXAMAAAXMAXXXAMAAXMAXAMSSMMMXSXSAAXAASXSASAAAXMAAXMSASAAXAAAXAMMSSMSMSSSSXMAAMX +MAMAMAXMMAMMMSSSSSMXXXMASMSXSXXAMAAMAMMXMAXAXASAMXXSAAAXSSSMMSMMMSMMMMSSXMASMMSAMMSMMAAMAMXAMXSSMMSAMASXMSSSMMMXMASMMXMMSSXMMAAXMAXAAXMASASA +MSMSMAMSSSMXAAXAAAMXMAMXMAXXSAMAMSMSSSMASMMMSMMAXSAMXMMMXAAMAMAMXAXXAXMAXSXMXAMAMAMXMSXMSSMMMAMAMAMAMAMXMAXAAXXXMMSXSXAAXXMASXMMMXMXMASXXAAX +MXXMAXMMAXXMMMMMMMAAMAMXMSSMMAMAMMAAAAAXMXMAAMSSMMMSXXXSMMMMMSSMSMSSMSMAMMSMMMSAMXMAXAXSAAASMMXAMXXAMASXMASXMSMAXXMAMXMXMAAXAAAAMAMMSAMXMSMS +MSASMMSMMMMAXXAXAXSMASXSAAAXAMXSMMMMSMMMSXMSXXAMASAMMXAXAMXMMAAXXXAASXMASASXMXSXXAMAMXXMMMMMAMXMSXSASAMXAAMXAXMAMMMAMMSSSXSAAMSSSMSAMASMMAXA +ASAMXXXAAXASMMSSMXAMXMAMMSSMSAMXMSXMAMMAXMAXMMSSMMASAXMSSMASMSMMXMMMMXSXMASAXXMMXSMMASMSMSSMSMASAMXMMASXMASMXMAMMXSASAAXAAXXXXAMMASMSAMAMAXM +XMXMASXSMMXAXSAMXAAXAMXMAAAXMAMAMXAASXMSSMSSXAMAXSSMMMASXMASAXAXMMSMMAMXMAMMMAAMAMASXMAAASXAASXMAMMMSASAMXXMASAMMMSAMMMMMMMMMMMSXMXAMMSAMSMX +SMSSXXMMASMXSMMXSSSMSSSMSSSMXMSMXXSMMXMAXAXSMMSMMXXAAMMMAMSMAMXMMAAAMASAXMAMMXXMASAMXMXMSMMMMMSAMXSAMAMMXMXSASAMSAMXXSMAAXAXAAAMAXMMMMAMXAAM +SAAXXMASAMXXMASAAXXXAAXAMXXXAAAXMMXAMXSAMMMMXASMSMMSMSXSAMAMMMSSMSMXMXSXSSMSMSMMXMMMMMSMXXAASXSMSMMASXSSSMASAMXMMAMSAMXSAMMSSMSSXMAXSSMSSMSA +MMMSMSMMMMXMSAMXSMSMMSMXMXSSMSASXSXAMAMXXSASMMXAAMAAXMMSAXAMXAXXAMASMMXAAXMAMAASXXMAAXAXASXMMAXXAASAMMMAAMASXMASMMMSAAAMMSMAXMAAAMMMXAXXAAAX +SMXMASAAMMMXMAMMXAXXMAMAMXMAAMXXAMSMMAXMASASXSMSMMSASXAXSSSSMXSMMMAAASMMMXSMSMSMMMSSXSMSAMXAMAMSSXMMSAMSMMASASXSASASXMXMAAMMSMMASXSSSMMSMMMS +AMAMXSSMSASASMSSMXMAXAMASAMMXMXMAMAXXMXSAMAMAMAMAAXXMASMMMAAMAXAAMSSSMAXSAMXXXXAMAAMMSXMXMXXMAAXXXAXSMXASMAXXMASAMASMAXMSSSXXXXAMAAASXAMXMAX +SXXSXMXMXMSASAAAMASASXSMSASAXAASASMSXAASXMAMXMAMMMSMXAXMAASAMXSSMMAXAXSMMMMAMMSMMMXSASMSASXSSSSSMSMMXMXXMMMMMMXMXMAMXMXXMAXMASMMSMMMMMSMAMSM +MSMMAAMMSXMAMMXMXASASMAASAMASXMSAMAXMMMSASMSMMSSMAAXMASXMMMAMXMAXXXMSMXAXAMAXXAXMAMMMSAXASAMAMAAXXMMXXMAXASASASMXMAMMMSSMAMMAMXAAXAAXAAMAMAA +MAXSMMMASAMXMSASMASAXAMAMAXAMXXMXMSMMSASXMMAAAXAMXSSSXMXSXXMASMSMSXAXXXXSXSAMXXMXSXAXMXMAMAMXMXSMSASMAXMSXSASASAMXSMAAAXMASMXSXSXSSXSSMSSSMS +SXXMXSMMSAAMXXAXMXMAMSXSSSMSMXXSSMMAMSASAMXSMMSXMXXAXAXAMMSSMMAAAMMSMMSMMMMAMSAMXMXMSAMXXSXMXSXAAMAAMSAMXMMAMAMAMAXSMMSMSAMMAMAMXAXXAMXAXAXX +XSAXAMAXXAMXMMSMSXMAMMAAXAAXMMSAAMMAMMAMMMAXAMXXMXMASXMXAAXASMXMAMMXAAAASAMAMXAMASAMAXXSMAAXAMSMSMSMAXAMASMMMXMXMSMXMAMXMASAMMAMXAMXMMMMMSMS +SAMXASMMSMMAAAMAMMMAXMXMXMMMXMASMMSMMSAMXMASAMMMMSMAMXAXMMSMMXXXSASMMSSSMSMSXXAMAMASASMAMSXMAMMXMAAAMSXSASAMSAMXMAAAMASXMASAXSAMXASAASXSXAAX +SMSMXAMAAASMSSMAMAMSXSAMMSAMXMAMXXSAAAASXMXSAMMAXAAASMSMMAAAASMAMAMAXAMXMXMAAMSMMSAMAXXAMXAMXMAASMSSMAASXSAMXSMAMMXSSXMAMASAMMMSAAMASMAMSMMM +XXXMSXMXXMMMAMMAMXMXAXMMAMXSXMAXXSMMMSXMASAMAMSSSXSMAXXAMSXSAMMAMAMSMASASAMMSMMAXMAMASXSSMSMAXSMXXAAMMMMMMMMXMXAMXAXAMSXMAMAAAAXMXMSMMSMAXAA +SAMXMSSMSMMMASXMMAXMAMSSSSXMXSASMXXXAXASAMXMSAMXMMMMXMMMMAAAXSSMSSSXXMMASMSAMAMXMSAMXMAXAAAMXMXXXSSMMSAXXAAAAMSSSMXSAMXXMXSMSMSSXXXAAXMSXMAS +MXSAMXSAAAXSMSASMXMMSMAAXAAMXXMAMSXMSMMMXSAAXMMMXAMMSMASMMMMXAAXAMXAMMMXMXMAXXMAAMXMAMMMMSMSSSMMMMAAXSAASMSSMXAMAAAMAMXMXXAAXAAXAASMSMMASXXM +SMSASAMXMMMMAMAMXAXAXMMSMSMMASMSAMMMXASXMAAXXMAMMMXAMXAXMSMXMSMMSSSMSASMSMSSMSSSSSSMMSXAXXMAMAAAASXMMMXMMXAAXMASMMMSMMSAMMSMMMMMMMXAAAMAMMMM +AAXXMMSMSSSMAMXMSXMASXSAAAAXXSAAAXSMSAMAMXMMMSMSSSMSSMSSMAXSAXAAAAAASXMAAAXMAMAAAAAAASMMMXMASXSMMXASXSXXXMAMMMMMMAXSXAXXMAAAAXMASMSMXSMMSAAX +MSMAMAMMAAMSAMXAMASASMMMSSMMXMMMSMMAMXSAMASAAAXAAAXMAXMAMASMSSMMMSMMMAMSMSMMAMMMMSMMMXASXMSAMAAMAMXSXMASXSSXSSMMSMSXMMSMSSSXMMSMSAAAXMXMAXSX +AXMXMAMMMSMMMSMASXMASAXXAMASMSAAAAMXMASASAMMSSSMSMMSSMMAMXXAMXMMAMAAXSXXAXASXSASXMASXSMMAAMASMMMSXMMAMAMXAMXXAXMAXSMMSAMAAMASMMMMMMSMMAMSAXX +MMMXMAMAXAMXAAMXMXMAMMMMASMMASMMSSXAMMSXMASAMXAMAXXMMSMMSSSMMASMMSSMMXAMAMMXAXMMXMAMMAMSMMMAMAAXMAXSAMASXXMASMMMMSMAXSASMMSAMAAMMXMXAMAMXAMM +SAMAXAMMSMSMSSSXMXMXSXMSXMXMXMXMMXXXXMXAXMAMXMSSXSMMAMXSMMAASAMAXAMXXMAMAMXMSMMSAMAMSAMXSASXSMMMSMMSXSXXXXSXSMAMSAMSMSAMXMMAMSMMXAMMSMMXMXMA +SSMMSXSAAXSAMXAMMAMMMAMXAMXSAMMSXAMMXMXMMMAMAMAMXMMMXSMMAASXMASXMASMMMMSMMSAXAAXMMMMXAXAMXSMXXMAAXXXMAMMSXSASXAXXAMMMMMMASMSMMSSSMMAAXXSMMSS +MMSMAAMMMMSSSXMASASXSMMSMMASAXAXMAMAAMXSASASXMASXMAXMAMSAMMXSASASMMAASXAASMAMMAXXAMXMSSSMMSAMSMMSXXASAAMAAMAMMMXSAMAMAASMMAAAMAMAAMSSMMXSAAM +XAAMMMMAXXXAXMAXSAXAAAXAMXAMXMMSASMXSXASAXASXSASXMAXSAMXASMMMAMAMAMSMSMMXMMXMMSASASAAXAAXAMXMAMXMXSXMASMMXMAMAMMAXSXSSXSMMSMMMAMMMMAAAXAMMSM +MSSMXAMSXSMMMMSMMMMSMMSMSMMSASMAMXMAXMMMXMXMXMAXASMASXMSAMXAMAMAMMMMMSXSMMXXXAMMXAXMXMSMMMSASASASMSASAMXSXSMSSMSAMXAXMASXAAAASXXSAMXSMMXSXMM +MMAAMSMXAMXMAMAAMXAAAMXAAASAAMSMXSMASAXMXMSAMXAXAMMAXAMMAMXMSXSMMSAAXMASAMSAMMSSMMSXSXXXMASMSXSAXASAMMXAMASAAAAAXAMXMMMXMAXSMXSAXAMXXAXXSMMM +SSMSMXAMMMAMAXSMMMXXXMSMSMSMMMXXSXMASMSSMSASXMASMXMXMMMSMMSMAAAAASMSAMAMAAMSXSAXAXAASAMASAMXMAMXMXXMASXMMAXMMMMSXSXMXSMMMSMMAXMSMSASXSMAXAAX +AXXMAMAMASAMSXMAXAMSSMSAXAMXSXMSSXAMMAMAMXAXXSXAXAXAAXMXSAAMMSMMMMXXAMXXXMSAMAXSMMMMMAMASMSSSXSAXSAMASXXMMMXAXAMAMMSAMAXAAAMSMAMXXSXMXSSXSMS +MXMMMMMMAMASMASAMXAMAAMAMXMAXAMAMMSXMAMAMMXMXMASMMSMSMMAMMSSXMAXMMSSMMSMSXMASMAXAAXASXMASXAMAAMAXSAMASXSASAMMMSMMMAMASAMSSXMXMSAMXMXXAAXXXAM +XAAASAAMSSMAMAMASMSSMMMMMMMMXAMMSAXXSSSSMSASAMXAMXAAAAMXSAMXXSXSXAXAXAAXXASAMXAMSMSASAMXSMXSMXMXMXAMMSASAXMAXAAAAMXSAMMMAAMSXMXXMAXAMXSSMMAM +SXXXXMXXMAMMMMSAMAXAXMSMAMXSAMMXMXMMAAXAASASMSSSMSMSSSXAMMSXMAASMSSMMSSSSMMASMSXXASASMMMMAMAASMXMSMMXMXMMMXMSMSXMXAMXAXMMSMXAMAMXASXSAMAXAAS +SMMSSMSXXAMXMASASMSAMXAMMMAXMASXMASXMMMMMMXMAMMMMXAXAXMASAMMAMXMAAAAMMMAAXASMMXAMXMXMMSMMAXAXAXXAAXXAXASAMAAXMMASMMSASMSXXMSSMASAMMAMASXMXSS +XASAAAAMSMMXXMMASAMXASMSSMMSXASXMASAXXAAXMXSXMASXMMMASMMMASXSSSMSMMMMAMMMMXMAXSSMSMSMAXSSSSSMSAMSMSSMSASASXMSASAMXSAMMAXAXAAXMAMMXSXSXMAASAX +XSMSMMMAAASMSSMAMMSMMMSAMXXSMXMAMASXMSSSXMMMASAMMAXSAMAAMAMAAAAAXXMSSMMMXSXSXMAAAXAAMAMXSAAXAMXXAAXAXMAMAMAAMXMXMXMMXMXMXMMMSMSSXASMMAXXSXSX +SXAAMASXSSMAAAMSSMAAAMMMSXMXXXSAMMSMMXMAXSASAMMMXXXMASMMMSMMMMMAXAXAAAXSAMMMSMSMMMXMASMMMMMXXXXSMSMSMMAMXMMMMMMSMAXMASMSMMAAAXAAMXSASMSXXAMS +AMMMSASMXAMMMXSAAXSXMMAASASMMXAXSASXXAMXMSAXASXSAXMSXMASAXXXSXXMMMMSSMMMASAAAXAXMXMXMMAAXASXMSMXMAAAMXXXXXSMAAAMMASMMSAAAMMXSSMXMASAMASAMAMS +MSXXMASAXXMSMXMMMMMXSMMMSAMXAAMMMASASXSSMMSMAXAAMXMAXSAMSAMXMXMMSAAXMMMSAMMSSSMSSMMAMAMMMMSAMAAAXXSMSMSASAAMSMSSMMSASMXMMXSMMXXAMXMAMMMMMSMX +XAMMMMMXMXMXXXAMSMAASAMAMXMMSMXAMAMMMXAAXAXMSMSMXSXAXMXXMXMASASASMMMAMXMASAMXXMAAXSXSASMXAMAMSSXSXMXSAAAMMXMXSAMXMSMMAMXSAXAXASXXMXMAMXXXAMX +SMAXXAAAXAMAMMMAAMMMSAMXXAMAASASMSSMSMMMSASAAAAAMAMXSSMMXASASAMASASMXMASAMXMSMMSSMMASASXMMSAMAAASXSAMXMXMASMMAMSAMXAXXMAXMSMMMXMXSAMASMSSMSS +AXSXSMSXSASAXAMMMSAAMAMXMMMSMSXMAAMASAXMXAMMMSMSMSMMAAASMXSAMXMXMAMAMSASAXAXAAAAAAMAMXMXAASAMMMMMAMSSSXMSAAAXMXSASMMMSMMMMAXXMASAAAMXSAASMAX +SMMASAMXMASMSXSAXSMSXSMSXMAMMSAMMMSASAMAMSMMXMAMAAMMMSMMAAMMMXMXMXMAMMASXMXSMSMSSMMXSAMMSMSXMAMAMXMAMAAXMMSAMXMSMMXXAAASASMSASXMASMMXMMMMMSS +XAMXMXMASXMAAAMAMMAXAAAXASASASXMAMMXSAXMAXAMXMAMSSXSXMXAMXMAMASASASXXMAMXAXMMMXMAXSASAXAAXXMSSSMSSMSSSMMXMXMMMMXXSMMSSSMAMASMAMXXAAXMAMAAMAS +SMMSMASASAMMMSMSXMAMMMMMXMAMAMASXSMASAMMMMMMAMXMAMAXASXSMMSASXSASASMSMXMXXMSXMASMXMASAMSMSXMAMAXAAXAAMAAAMXMASMSXSAAXMAMXMAMSSSMSMXMXAMSMSAS +SMAAMXMASAMASAMMAMSXXAXMAMXMXMMAMAAMXXXAAAAXMSSMAXMSAMXAAXSASAMXMAMAAMMSMMXSASAMMASAMMMXAMXMASAMSSMMSMSSXSAXXAAMASXMMMMMSMSXMXAAXXAASMMMAMXS +MMSSSMSASAMXMAMSAMXMSMSMSXXXSSSMSSMMMMSMSSXSASXMSMXXAXXSMMMMMXMAMAMMAXMAMXASAMASXMSAMXAMAMASMMMAMXAXAAAAAMMSXMAMMMMXMAAMAAMMASMMMMMXASAMXMMM +SMMMAAMASAMASMMSASAAAAMAXXMASAXXXXAXXAAXMAXMMMAAMSMMMAXMSAMXXAXASXMSASMASMASASASAASXMMSSXSAMXSXMXMASXSMMMMASASAMSAMXSMSSMSMAAMMAAXSMMSXMMSAM +MAAMMMMAMAMAXAAMASXSMSMAMAMMMMMMMSXMMSMSXMMXSSMMXAXAXMXMAXSXSMSASAXMAMXAMMXSAMASXMMMXAAXAMMXMMAMSAXXXAXXMMASXMASXMMMSAAXAXMMMXXMSXMAXMAMMXAS +SSMMMAMXSXXXMMMMAMMMAMMXXAMAAXAAXXAXXMASMAAAMXMXSMXSAASXSMSAAMMAMMMMMMMSXMXMXMXMAMMXMMSXMMSAXSAMXSMASXMASMXMMSXMMAAAMXMMMMXASMSXXAMMMSAMSSMM +XAAXSSSMMMMMAAAXXXXMMMMSSMSSSMSSSSMMAMMMAMMXXAXAMXAXMASAAAXMMMMSMXAAXAAMASAXMMXSMMSAMXXXAASMMMSXSAMAXXXXXSAAXMAMSSMSSXXAASMMSAMASXMSAXXXAAMX +SMMAAAAXAAMSSSSSSSMMAAMXAXMAMAAAMASAMXXASMSASMMXMMSSXAMMMMXXAXMAASXSSMMXAXASAXAXMASASAMMMMSXSAXXSAMASMXMASMXMXAMXAXXXXSMXSASMAMXMASAAMSMSAMX +XAMMSSMMSSMMAAAMXMAMSSMMAMXAMMMMMAMMMSAMXAMAMSAMXAMAMSSXSMSSSSXSXMMMMXSMMSMMAMMSMMMXMMSMMASAMAMASXMASAXMAXMSSSMXAMXMSMMSASXMMAMAXXMMSSXAMXMA +XXXAAAAXAMAMXMMMMXSMAAXSMMMMSXAMMXSAAXAMMSMAMAXAMXXAMXMASAXMASAXMAXAAAXXAAAXSASAMXSMAAAAXASXMXMXMASAXMXMSSXAAAASXSAAXAAAMSXSSSSSMAXXXMAXMAXS +MMMMSSMMASXMSXMASAXMMMMAAAXMAMXMAAMMMSMMMMAASMXSXSAMXMMAMMMSAMXMMXMMMSMMSMXMMMSAMXASMSSSMMSAAXMASMMXSAAXAMMMSMMAXSMSSMMMXMAMAXAAXAMXMASASMMM +SAAAMAMXAXAMXASASAMXAAXSSMSSMSSMMSSMXXMAAXSMSXMMASMXAXMAXMAXAMSSMMSXMAAXAXSAMASAMMMMMAXXAXSMMMSASAAASXMSASXAXAXMXSAMXAAAAMMMSMSMSMSMXAMMMAAX +SASMSASMXSAMSXMASAASMMXMXMXAAAXAXMAMMMSMSMMMXMAMXMAXMSMMSMXSAMAAAAXAMMSMASMAMMMXSAXAMMXSSMSASAMMXMMXSAMXXMMMMMMXAMAMSSMSXSXAXAMAAAAAMSSSSMMM +MAMXMASAASMMXXMASMXSMSAMXMSMMMSMMSXMXAMMXAMXAAMXMSSMAAASAXAXAMSSMMXSMSAMMMXAMXMAXXSSMSAXMASAMSSMSMSMMAMXXMXSASMMXSAMMMMXAXMASMMSMSMSMMAMAAXX +MAMXMMMMMSAXMAXXMMMSASMSAAMASXAMAXXMSSMASXMSAMSAMAAXXSXMAMMSSMAMAAAMXSASAAXXSAMMSMMXAMXSMAMMMXSAAXAASAMXXMASMSXMAMAXAMSMSAMXSMMXXMMXXMSMSMSA +MAXXMXAXXXMMSASXXSSMMMXSAMXMMSMMSSMXAAMAMMXSAMSAMXSAMXXMAMXAXMASMMMSAMAMMMSMMASAAAMMSMSXMASASAMSMMXXMAXMXMAXMSAMXSSXXMAAMAMXMAXXAXASAXMAAAMA +SSSMMSXSMSMMXAAXASXSMXXXAXMAASXAAAXMXSMSXSAMAMMXSAMMXMAXSAMXSSMSXMMMXMXMXAAAXSMXMMMAXXMASAXXMAXXXMSSSSMAMMXSASXSAAAASXMMMMMASXMMMMMMAMMMMXMM +MMAXAXAXMASXMMMMXMAXXASMSMSMASMMSSMSMMMXAMAXXMAAMASMASXMXMASXAXMASAAMMSMMSXSXXAXMMMMSXXAMXMSSSMSAXAXAAXXMAAMXMASMMMAMAXASASAXMMAAXAAXMASMSSM +MMAMMSMAMAXMASAMMMSMAXAAAXAMMSAMXMAAMAXMMMSMAMMMSASXMXASAMXMSSMSASMMSAAAAXAMAMMMMAAXAXMXSASAAAAXMMSSMMSSMMSMMAMXXASAMXMXMAMXSSMSXSMSSXXAXAAS +SMSXMAXXMSMSAMAMSAASMSMSMSXSAXXAMMSMSMXAAAAMXMAAMAMXSMMMMXXXAMAMAMXAMXSMMSMMAMAASMSMMMAAXMAMSMMMXAXAAXAAAAAXMSMMSXMAMSXSMSMMXMAXAMAAXMMXMSMM +XAAASXSXAAAMMMSMMMMSXAXMASAMASXMAMMMAMMSMSSSSMMSSXMASAXSXSMMSMSMSSSXSAXMMMASXSMXMXAMXASXSXMXMMSAMMSSMMMSMAMAXMAMXSMAXMASAXXAAMAMAMMXSXMAXAMX +SMSXMASMXMXMXAMAMXSMMMMMMMSMAMMXSASMMSAXAXAAAXAAMAMASAMXAAAMAAAAMAAAMASMAXMMMXMAXSAMXXXAAMXXAAMAMXAMXSXMXXXMXSXMASXMAMAMMMASXMXXXMXAMASXSASM +XAXMMXMAMXMMMMSAMXAASXAXMAXMAXMXXAMAAAXMMMMMMMMXMAMXSXAMSMSSMSMXMMMMMMXXSSMAMSMMMSAXXXMMMMASXMSAMMASASAMXSSMAAAMXMASXMAXAMAMXMSXSSMMSAMXXXMA +MXMASAXXAMAXAXAMXMMMMASXMXSSMXSMMAMMMMMAXAXAXAMMSSSXXMSAMAXAAMXAMXAXXMMXMAXSMSASASXSMSMXAMASXAMASMSMMSAMAXAMMSSMMSAMMXSMSAMXASAMXAAAMASXMSSS +XAXSMMXXSXSXSSSXSAMXMXMASMXMMASASXMXXAASMMSMSXSAAMAMXAXXMXSMMMSXSAASAMAMSMMMASAMMMASAAASXMASMXMASXXAXSAMASMXMAMAXMSXSAMMMMSXMMMSSSMMSAAAAAXM +SMSMMASXMAMSAAMAMMXXXAMXXMASMASAMXAASMSMAXSXSAMMSSMMXSXASAMXSXSAXMXMAXSAAXAMXMAMXAAMMMMSAMXXXAMAXASMMSXSAMXSMXSSMMAXMASASASXXAAXAMXMMMSMMMSS +MXMAAAMAMAMMMMMAMMAMSASAMXXMMXSAXMMMMMAMSMMAMXMAMMMSXAXXMASAXMXMMXASAMXSXMASXMASAMXSXXXSAMXXSXSSSMMAXMAXAMAXMXXMAMXSMAMXMAMMSMSMSMASXMMAMAAX +SASMMXSXMAMMXMMXSMAXSAMMMMSXMASMSMSMMSAMXAMAMAMMXAASMMAMMXMAMMASMXXXXXMASMAMXXAXXXAXXXAXXAXMMAAMAMXXMASMSMXMAMXSAMMXMAMXMAMAAAAXXSASAMMAMMSS +SASMSAAMAXXMAXXSAMXMMMMASAMAMASXAAAAAMAXSAMXXXSASMMSASMSSSMMASASMASMXXMAXMAMAMMSMMSSSSMMSSXMMSMMXMASAAXAMASAMMXSASAASASASMSSMSMXAMXXMMXASXMA +MAMAMMSAAMMSASXAASXSAXSASXSAMMXXMSMSMSAMSAMMSMSASAAMXMAAXXAXAXAMXAAMAMMMMSAMSMMAAXAAXXAAAXASAMAMAMXSMMMAMAMMXSXSAMMXXMXASAAMXMASXSXMASXXSMSS +MAMXMXAXXAXAAAMSAMXSAMMASASMMSXXXAXXXMAMSXMAAAMASMMSSMMMMSSMSSSXMAMSASASXSAAAAMSMMMXMMMMSSXMASMMAXMXAXSXMASXSMAMAXMSXMSAMMMSSMAXMAMSASMASAMX +SMSSXXXMMSXMSMAMASMXXAMXMXMAASMSSMSXMAXXMMMSSSMAMXAXAXXMXAXXAAAXXXMSXSASXSMMXSMAXXSMSAMXAMAMAMMMSSSMMMXAMASXAASMSMAMAMMAMXAAAMASMSMMASMSMMXA +MMAMAMAMAMAAXXXSXMAMMSAMXAMMMMAXXAAMASXSMAMMAMMMMMMMXMXSMMXMMXMXMMMMAMMMXXXMAXMMMXSASASMASAMXXSAXXAASXSSMAXXASMAXMXMAMSAMMMMSMMXAXAMAMXXASMS +SMXSASAMSSMMSSMMMMAMSXMASMSMSMSMMMMMMMAASMMMXMASMMMSXSAMAXSASAXMAAASXSSSMSMMMSAMSAMMMAMXMXMASAMMSSSMMMMMMSSMSAMXMMXSSXSMSXSAAXMMSMMMSSMSMMAA +AAASMSASAXAAAXAAXSASXAXMASAXMAMAAAXAAMSMMXASAMMSAASAAMASAMSAMXMASXMSAAASAMXAASAMMAAXMXMASAMXMAAXMAMAAAAAMMAMXAAAAXAAXAMAMAMSSMXXMASAAAMMAMSM +MMMSAMXMXSXMSSMMMSXSMSMAXSSMMXMSSSSMSMMXXSSSMSXSMMMXSSMMMMMAMMMMXSMMMMMMSMSMMSMMSAMXAXSXSMXXASXXMASXSSSSSSXMSSMASMSSMMMMMXMAXMSMSSMMSSMSAMXX diff --git a/day4/src/main.rs b/day4/src/main.rs new file mode 100644 index 0000000..680cb59 --- /dev/null +++ b/day4/src/main.rs @@ -0,0 +1,60 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use regex::Regex; + +fn main() { + let file = File::open("input").unwrap(); + let lines: Vec = io::BufReader::new(file).lines().collect::>().unwrap(); + + let mut sum_matches = find_matches(&lines); + println!("matches: {}", sum_matches); + + let mut lines_flipped: Vec = vec![String::new(); lines[0].len()]; + + for line in lines.iter() { + for (i, c) in line.chars().enumerate() { + lines_flipped[i].push(c); + } + } + + sum_matches += find_matches(&lines_flipped); + println!("matches: {}", sum_matches); + + + + + + + + for (i, line) in lines.iter().enumerate() { + println!("line@{:02}: {}", i, line); + } + + let mut lines_athwart: Vec = vec![String::new(); lines[0].len()]; + for i in 0..lines.len() { + println!("fill"); + lines_athwart.push(std::iter::repeat("x").take(i).collect::()); + } + for (y, line) in lines.iter().enumerate() { + for (x, c) in line.chars().enumerate() { + //lines_athwart[x+y].push(line.chars().nth(y).unwrap()); + println!("char @{},{}: {}", y+x, y, c); + lines_athwart[x+y].push(c); + } + } + println!(""); + for (i, line) in lines_athwart.iter().enumerate() { + println!("line@{:02}: {}", i, line); + } +} + +fn find_matches(lines: &Vec) -> i32 +{ + let mut result: i32 = 0; + let re = Regex::new(r"XMAX|XAMX").unwrap(); + for line in lines { + let matches = re.find_iter(&line).map(|_| 1).fold(0, |sum, val| sum + val); + result += matches + } + result +} diff --git a/day5/.gitignore b/day5/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day5/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day5/Cargo.lock b/day5/Cargo.lock new file mode 100644 index 0000000..7a62bb0 --- /dev/null +++ b/day5/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day5" +version = "0.1.0" diff --git a/day5/Cargo.toml b/day5/Cargo.toml new file mode 100644 index 0000000..49bdb49 --- /dev/null +++ b/day5/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day5" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/day5/input b/day5/input new file mode 100644 index 0000000..3370a8d --- /dev/null +++ b/day5/input @@ -0,0 +1,1387 @@ +46|53 +25|43 +25|66 +43|65 +43|35 +43|61 +54|83 +54|15 +54|46 +54|92 +84|23 +84|16 +84|11 +84|74 +84|88 +16|99 +16|65 +16|61 +16|66 +16|28 +16|46 +86|88 +86|61 +86|34 +86|31 +86|35 +86|27 +86|95 +61|84 +61|88 +61|92 +61|51 +61|45 +61|55 +61|34 +61|74 +23|18 +23|97 +23|99 +23|58 +23|54 +23|43 +23|89 +23|66 +23|39 +68|12 +68|55 +68|51 +68|92 +68|98 +68|74 +68|96 +68|42 +68|75 +68|14 +98|55 +98|92 +98|42 +98|45 +98|23 +98|34 +98|74 +98|73 +98|96 +98|51 +98|31 +58|86 +58|18 +58|98 +58|66 +58|25 +58|61 +58|54 +58|68 +58|43 +58|26 +58|28 +58|75 +99|51 +99|49 +99|53 +99|86 +99|66 +99|39 +99|26 +99|96 +99|98 +99|15 +99|61 +99|35 +99|65 +39|88 +39|42 +39|84 +39|53 +39|15 +39|51 +39|45 +39|92 +39|65 +39|75 +39|83 +39|12 +39|34 +39|35 +34|16 +34|45 +34|89 +34|14 +34|66 +34|74 +34|23 +34|55 +34|88 +34|12 +34|99 +34|26 +34|73 +34|62 +34|72 +65|27 +65|34 +65|55 +65|97 +65|42 +65|83 +65|22 +65|45 +65|58 +65|35 +65|12 +65|92 +65|14 +65|73 +65|64 +65|89 +88|22 +88|97 +88|12 +88|72 +88|52 +88|89 +88|64 +88|62 +88|23 +88|49 +88|26 +88|13 +88|66 +88|73 +88|18 +88|16 +88|58 +97|39 +97|43 +97|98 +97|86 +97|46 +97|16 +97|72 +97|49 +97|68 +97|26 +97|66 +97|58 +97|28 +97|22 +97|11 +97|61 +97|62 +97|18 +64|86 +64|22 +64|97 +64|18 +64|73 +64|39 +64|43 +64|26 +64|66 +64|58 +64|89 +64|46 +64|13 +64|62 +64|25 +64|68 +64|15 +64|72 +64|99 +55|26 +55|43 +55|99 +55|74 +55|86 +55|16 +55|89 +55|49 +55|97 +55|23 +55|64 +55|62 +55|25 +55|72 +55|39 +55|54 +55|58 +55|22 +55|73 +55|18 +73|16 +73|28 +73|89 +73|97 +73|25 +73|61 +73|54 +73|68 +73|43 +73|86 +73|18 +73|22 +73|58 +73|15 +73|49 +73|11 +73|72 +73|62 +73|26 +73|66 +73|13 +89|39 +89|66 +89|13 +89|62 +89|99 +89|75 +89|49 +89|16 +89|25 +89|15 +89|53 +89|98 +89|26 +89|46 +89|96 +89|72 +89|86 +89|11 +89|68 +89|43 +89|61 +89|54 +52|54 +52|55 +52|89 +52|66 +52|13 +52|11 +52|25 +52|64 +52|72 +52|74 +52|22 +52|18 +52|23 +52|97 +52|99 +52|39 +52|86 +52|62 +52|14 +52|49 +52|58 +52|73 +52|16 +18|99 +18|13 +18|35 +18|62 +18|53 +18|54 +18|28 +18|65 +18|86 +18|96 +18|49 +18|61 +18|16 +18|39 +18|15 +18|68 +18|43 +18|26 +18|98 +18|46 +18|25 +18|66 +18|75 +18|72 +66|96 +66|15 +66|98 +66|46 +66|35 +66|75 +66|92 +66|86 +66|51 +66|43 +66|83 +66|31 +66|53 +66|49 +66|39 +66|42 +66|84 +66|13 +66|28 +66|95 +66|61 +66|68 +66|54 +66|65 +74|16 +74|97 +74|73 +74|13 +74|54 +74|86 +74|26 +74|22 +74|25 +74|99 +74|66 +74|39 +74|72 +74|46 +74|11 +74|62 +74|23 +74|89 +74|18 +74|58 +74|49 +74|15 +74|64 +74|43 +95|64 +95|31 +95|97 +95|92 +95|11 +95|89 +95|12 +95|58 +95|16 +95|45 +95|52 +95|73 +95|84 +95|14 +95|72 +95|88 +95|23 +95|74 +95|55 +95|25 +95|22 +95|34 +95|18 +95|27 +27|62 +27|52 +27|64 +27|45 +27|11 +27|14 +27|12 +27|16 +27|97 +27|88 +27|66 +27|89 +27|22 +27|34 +27|73 +27|55 +27|25 +27|18 +27|74 +27|99 +27|72 +27|58 +27|23 +27|26 +14|15 +14|66 +14|64 +14|55 +14|86 +14|54 +14|58 +14|73 +14|25 +14|99 +14|13 +14|22 +14|16 +14|26 +14|89 +14|97 +14|39 +14|49 +14|62 +14|23 +14|11 +14|18 +14|72 +14|74 +96|83 +96|95 +96|35 +96|34 +96|45 +96|23 +96|97 +96|74 +96|84 +96|55 +96|88 +96|51 +96|14 +96|64 +96|31 +96|92 +96|27 +96|42 +96|12 +96|22 +96|73 +96|52 +96|65 +96|53 +75|84 +75|83 +75|65 +75|27 +75|74 +75|53 +75|88 +75|23 +75|97 +75|14 +75|92 +75|34 +75|64 +75|35 +75|51 +75|31 +75|96 +75|55 +75|52 +75|42 +75|45 +75|95 +75|73 +75|12 +13|15 +13|39 +13|98 +13|86 +13|65 +13|68 +13|61 +13|46 +13|84 +13|95 +13|28 +13|42 +13|92 +13|75 +13|53 +13|51 +13|35 +13|31 +13|43 +13|54 +13|34 +13|96 +13|27 +13|83 +49|42 +49|46 +49|95 +49|13 +49|83 +49|43 +49|54 +49|53 +49|39 +49|65 +49|86 +49|27 +49|92 +49|75 +49|31 +49|98 +49|68 +49|28 +49|96 +49|61 +49|35 +49|51 +49|84 +49|15 +45|49 +45|16 +45|11 +45|55 +45|99 +45|22 +45|58 +45|97 +45|73 +45|62 +45|74 +45|14 +45|66 +45|72 +45|25 +45|18 +45|13 +45|64 +45|26 +45|52 +45|86 +45|23 +45|89 +45|12 +42|88 +42|14 +42|74 +42|55 +42|51 +42|22 +42|34 +42|58 +42|92 +42|12 +42|52 +42|95 +42|31 +42|18 +42|83 +42|84 +42|97 +42|27 +42|45 +42|11 +42|64 +42|73 +42|89 +42|23 +35|55 +35|42 +35|58 +35|14 +35|95 +35|88 +35|52 +35|31 +35|12 +35|92 +35|51 +35|83 +35|34 +35|27 +35|89 +35|97 +35|64 +35|84 +35|11 +35|73 +35|74 +35|23 +35|22 +35|45 +51|45 +51|11 +51|97 +51|74 +51|12 +51|92 +51|83 +51|55 +51|14 +51|89 +51|22 +51|25 +51|27 +51|52 +51|84 +51|23 +51|34 +51|18 +51|95 +51|58 +51|64 +51|73 +51|31 +51|88 +11|65 +11|16 +11|61 +11|13 +11|99 +11|39 +11|28 +11|43 +11|66 +11|54 +11|26 +11|98 +11|62 +11|49 +11|53 +11|15 +11|96 +11|68 +11|72 +11|86 +11|18 +11|25 +11|75 +11|46 +26|13 +26|65 +26|54 +26|28 +26|35 +26|86 +26|42 +26|96 +26|43 +26|66 +26|15 +26|68 +26|51 +26|95 +26|92 +26|49 +26|53 +26|83 +26|75 +26|46 +26|39 +26|84 +26|61 +26|98 +53|22 +53|65 +53|97 +53|95 +53|74 +53|45 +53|84 +53|12 +53|34 +53|35 +53|73 +53|52 +53|27 +53|88 +53|23 +53|14 +53|31 +53|55 +53|92 +53|51 +53|64 +53|58 +53|83 +53|42 +12|13 +12|97 +12|66 +12|49 +12|55 +12|16 +12|23 +12|26 +12|86 +12|14 +12|18 +12|52 +12|11 +12|89 +12|62 +12|99 +12|22 +12|54 +12|74 +12|58 +12|73 +12|25 +12|64 +12|72 +92|23 +92|27 +92|25 +92|22 +92|18 +92|34 +92|11 +92|89 +92|88 +92|55 +92|97 +92|52 +92|72 +92|62 +92|12 +92|74 +92|31 +92|45 +92|73 +92|14 +92|16 +92|58 +92|99 +92|64 +62|98 +62|26 +62|39 +62|96 +62|49 +62|95 +62|53 +62|65 +62|54 +62|51 +62|61 +62|42 +62|66 +62|46 +62|15 +62|83 +62|43 +62|35 +62|86 +62|68 +62|75 +62|13 +62|84 +62|28 +22|86 +22|98 +22|18 +22|54 +22|99 +22|61 +22|75 +22|13 +22|28 +22|25 +22|72 +22|43 +22|16 +22|58 +22|49 +22|11 +22|26 +22|66 +22|15 +22|68 +22|89 +22|39 +22|46 +22|62 +28|84 +28|96 +28|42 +28|65 +28|95 +28|45 +28|64 +28|98 +28|61 +28|31 +28|52 +28|27 +28|92 +28|55 +28|14 +28|34 +28|74 +28|53 +28|35 +28|51 +28|75 +28|88 +28|12 +28|83 +72|53 +72|96 +72|39 +72|42 +72|43 +72|35 +72|86 +72|54 +72|51 +72|62 +72|65 +72|46 +72|83 +72|28 +72|66 +72|26 +72|75 +72|68 +72|13 +72|99 +72|61 +72|98 +72|49 +72|15 +83|45 +83|92 +83|64 +83|14 +83|97 +83|31 +83|73 +83|88 +83|22 +83|16 +83|95 +83|27 +83|12 +83|84 +83|55 +83|74 +83|18 +83|11 +83|25 +83|89 +83|34 +83|23 +83|58 +83|52 +31|52 +31|64 +31|14 +31|74 +31|88 +31|72 +31|27 +31|58 +31|26 +31|23 +31|99 +31|11 +31|45 +31|89 +31|73 +31|34 +31|12 +31|16 +31|55 +31|22 +31|97 +31|25 +31|62 +31|18 +15|61 +15|88 +15|84 +15|28 +15|96 +15|95 +15|35 +15|27 +15|53 +15|51 +15|45 +15|52 +15|75 +15|42 +15|65 +15|12 +15|83 +15|68 +15|34 +15|46 +15|43 +15|31 +15|98 +15|92 +46|34 +46|84 +46|52 +46|95 +46|83 +46|55 +46|61 +46|28 +46|65 +46|31 +46|98 +46|42 +46|12 +46|75 +46|92 +46|45 +46|35 +46|96 +46|51 +46|27 +46|68 +46|88 +46|14 +25|53 +25|26 +25|46 +25|49 +25|54 +25|35 +25|61 +25|98 +25|75 +25|68 +25|15 +25|99 +25|86 +25|72 +25|28 +25|65 +25|13 +25|62 +25|39 +25|96 +25|42 +25|16 +43|45 +43|52 +43|96 +43|53 +43|12 +43|51 +43|92 +43|98 +43|83 +43|46 +43|84 +43|68 +43|42 +43|88 +43|31 +43|75 +43|14 +43|27 +43|95 +43|34 +43|28 +54|95 +54|84 +54|43 +54|39 +54|45 +54|27 +54|35 +54|51 +54|42 +54|31 +54|75 +54|61 +54|34 +54|65 +54|88 +54|68 +54|96 +54|98 +54|53 +54|28 +84|27 +84|64 +84|34 +84|58 +84|73 +84|31 +84|97 +84|72 +84|52 +84|99 +84|14 +84|22 +84|55 +84|12 +84|45 +84|92 +84|25 +84|18 +84|89 +16|42 +16|39 +16|51 +16|98 +16|75 +16|53 +16|13 +16|35 +16|62 +16|54 +16|86 +16|49 +16|96 +16|26 +16|43 +16|15 +16|68 +16|72 +86|28 +86|15 +86|65 +86|46 +86|98 +86|43 +86|39 +86|42 +86|84 +86|83 +86|68 +86|96 +86|51 +86|54 +86|75 +86|92 +86|53 +61|31 +61|64 +61|42 +61|65 +61|52 +61|96 +61|95 +61|75 +61|12 +61|83 +61|98 +61|23 +61|27 +61|14 +61|35 +61|53 +23|22 +23|13 +23|26 +23|86 +23|16 +23|46 +23|28 +23|25 +23|11 +23|15 +23|73 +23|68 +23|62 +23|49 +23|72 +68|28 +68|53 +68|34 +68|65 +68|35 +68|45 +68|88 +68|83 +68|84 +68|31 +68|27 +68|52 +68|95 +68|61 +98|88 +98|27 +98|75 +98|53 +98|52 +98|35 +98|83 +98|14 +98|64 +98|12 +98|84 +98|65 +98|95 +58|16 +58|96 +58|13 +58|46 +58|11 +58|62 +58|89 +58|49 +58|72 +58|39 +58|15 +58|99 +99|54 +99|43 +99|46 +99|75 +99|95 +99|28 +99|83 +99|68 +99|42 +99|62 +99|13 +39|61 +39|98 +39|95 +39|28 +39|43 +39|46 +39|27 +39|68 +39|96 +39|31 +34|58 +34|18 +34|52 +34|25 +34|64 +34|22 +34|11 +34|49 +34|97 +65|74 +65|95 +65|31 +65|51 +65|88 +65|52 +65|23 +65|84 +88|99 +88|11 +88|55 +88|25 +88|14 +88|74 +88|45 +97|89 +97|15 +97|99 +97|54 +97|25 +97|13 +64|16 +64|11 +64|23 +64|54 +64|49 +55|15 +55|66 +55|11 +55|13 +73|99 +73|46 +73|39 +89|18 +89|28 +52|26 + +97,58,11,72,99,62,13,86,54,39,43,46,68,28,61 +74,64,23,73,97,22,58,89,11,25,72,99,62,26,66,49,13,86,39,15,43 +96,35,42,95,92,12,74,64,97 +74,23,97,58,89,11,18,25,16,72,99,62,26,66,49,13,86,54,39,15,43 +12,72,52,14,23,62,49,89,11,66,45,25,22,18,13 +64,25,11,14,62,99,55,26,97,74,34,22,66,58,73 +26,49,13,86,54,39,28,61,96,35,42,51,83,95,84 +66,49,13,86,39,15,43,46,68,28,61,75,96,53,65,35,42,51,95,84,92 +64,58,89,25,99,62,86,39,46 +68,28,61,98,75,96,65,35,51,95,84,92,27,34,88,45,12 +25,62,49,15,28,65,35 +84,92,31,27,34,88,45,12,52,14,55,74,73,97,22,58,89 +51,88,14,64,84,58,83,34,22,27,92,55,12,42,95,74,73,65,97,35,31,45,23 +52,45,66,74,55,64,34,16,58 +26,13,68,61,98,75,96,42,84 +74,64,23,73,25,16,72,26,49,86,54,15,43 +73,99,26,72,62 +61,98,96,53,42,51,83,84,31,27,34,88,45,12,55,74,64 +16,72,99,26,66,49,13,54,39,15,43,46,68,28,75,53,65,35,42 +97,73,15,39,72,54,25,28,16,66,68 +12,25,74,99,14,34,45 +89,11,18,25,16,72,99,62,26,66,49,13,86,54,39,15,46,68,28,61,98,75,96 +88,12,73,22,31,16,84,18,34,23,11,72,45,55,27,14,74,89,92,64,97,58,52 +53,65,42,51,83,84,92,27,12,52,55,74,22 +64,97,86,26,49,23,22,14,73,16,11,13,89,99,18 +89,11,18,25,16,72,26,13,54,39,43,28,98,75,96 +99,64,11,34,58,72,25,74,18,26,97,23,45,12,88,55,89,14,66,62,16,52,22 +86,54,39,15,43,46,68,28,61,98,75,96,53,65,35,42,51,83,84,92,31,27,34 +11,73,12,95,89,88,45,16,23,34,74,97,22,18,31,92,64,84,55 +68,25,46,65,61,86,96,15,35 +99,66,49,13,86,54,39,15,43,61,98,75,96,53,65,35,42,51,83 +31,42,14,95,84,97,51,27,45,88,55,64,96,34,73,53,12,74,65,35,83,92,23 +95,52,96,53,27,51,14,75,42,98,23,34,88,74,55,84,65,12,31 +27,16,12,99,25,89,55,62,14,52,18,23,97,22,31,11,72,34,64,73,58 +23,42,51,27,65,34,74,88,96,83,95,52,55,31,64 +23,97,22,58,89,11,18,16,72,99,62,26,66,13,54,39,43,46,68 +12,52,74,23,73,97,22,58,11,18,16,72,99,62,49,13,86 +49,73,43,25,86,22,89,54,62,16,15,39,11,72,13,18,64 +89,11,18,25,16,72,99,26,66,49,13,86,54,39,15,43,46,68,28,61,98,75,96 +73,97,22,89,11,18,25,16,72,99,62,66,49,13,86,54,39,43,46 +42,92,34,23,73 +98,75,96,53,65,35,42,51,83,84,92,31,27,34,88,45,12,52,14,55,74,64,23 +66,49,86,62,96,72,46,43,68,53,99,35,28,51,15 +58,72,86,66,49,18,25,89,61,22,68,62,13,98,26,54,99,46,15,39,11,16,43 +13,42,61,49,68,86,31,83,92 +64,52,86,14,66,72,89,11,54 +34,89,14,74,55,73,72,25,16,18,11,58,92 +62,26,49,54,15,43,61,98,75,96,42,51,95 +99,13,22,72,46,54,39,28,15,89,62,11,18,25,73,26,66 +14,27,34,72,84,16,55 +18,72,26,13,46,68,28,75,96,53,65 +46,68,75,96,53,42,83,95,84,34,88,45,12,52,14 +49,97,18,58,25,13,89,68,54,43,73,16,11,99,23,62,86,72,15 +86,42,51,61,43,83,92,53,46,98,68,15,75,96,34,84,35 +58,11,92,34,14,45,31,25,23,64,97,95,84,73,55 +25,26,68,98,43,28,16,66,15,54,22,13,46,61,89 +75,96,53,65,35,42,51,83,95,84,92,31,27,34,88,45,12,52,14,55,64,23,73 +12,52,14,55,74,64,23,73,97,22,58,11,25,16,72,62,26,49,86 +31,95,45,22,23,73,88,58,34,12,97 +28,98,42,46,27,53,83,88,92,12,35,84,96,61,95,14,45 +35,55,12,52,96,97,14 +96,92,12,34,75,52,27,84,73,55,14,83,23,51,95,64,74,53,65,31,42 +23,16,88,89,64,22,72,99,31,74,11 +89,99,54,22,18,72,13,58,62,39,16,15,11,66,43 +83,95,84,92,31,27,34,88,45,12,52,14,55,74,64,23,73,97,22,58,89,11,25 +46,51,84,92,13,27,35 +45,12,11,25,72,49,13 +35,65,55,12,68,31,45,98,51,61,14 +42,83,84,31,27,34,88,45,12,52,14,64,97,89,11 +83,43,27,39,35,98,28,53,75,92,46,68,95,31,51,86,42,13,54,84,61 +89,11,25,16,62,26,54,46,28,98,96 +11,16,99,62,26,66,49,86,54,39,15,43,46,68,61,98,75,96,53 +46,61,96,42,95 +15,43,58,61,26,99,18,97,72 +43,68,28,35,51,84,34,88,52 +18,16,72,99,62,26,49,13,54,39,43,46,68,28,75,53,65 +54,68,35,49,72,53,15,61,98,51,13,99,66 +61,53,65,35,51,83,31,27,34,88,12,14,55,74,64 +55,74,73,97,22,89,25,16,99,62,66,13,86,54,15 +13,86,46,75,96,65,83,92,27 +88,75,12,15,51,28,83,46,43,35,42,53,98,68,27,65,61 +51,62,28,46,15,68,53,99,75,49,72,96,39,61,42,65,66 +75,53,51,43,98,99,15,66,72,46,49 +35,42,51,83,95,84,92,31,34,88,45,12,52,14,55,74,64,23,73,97,22,58,89 +74,62,99,22,58,14,16,18,89,31,55,72,27,88,23,45,11,12,34 +28,46,45,68,51,88,35,39,31,42,95 +42,97,92,14,53,45,55,51,83,65,84,95,73,22,35 +68,96,54,53,42,46,15,13,66,98,28,26,39 +58,89,11,18,25,16,72,99,62,26,66,49,13,86,54,39,15,46,68,28,61,98,75 +96,15,42,35,26,99,75,39,72,13,53 +68,39,62,58,11,89,99,54,61,22,66,49,72,25,43,98,46,13,26,28,86,16,18 +31,88,45,14,74,25,16,99,62 +23,97,58,89,11,72,62,26,49,13,43,46,68 +58,73,64,34,12,31,84,14,27,22,35,55,65 +28,51,61,45,88,68,15,53,98,95,96,75,42,46,34,31,27,35,65,83,92,12,84 +92,34,14,74,97,22,89,16,99 +83,95,12,89,74 +53,28,86,66,15,49,61,25,96,13,46,72,62,54,11 +64,22,86,43,99,18,54,25,23,66,72,73,89,46,15,97,11,62,13 +66,45,64,74,58,97,52,73,25,16,99,49,62,18,22,23,88 +53,35,51,84,31,27,34,55,73,97,22 +15,53,61,51,83,68,75,28,39,86,65,92,42,27,98,95,84 +42,68,61,88,14,75,52,53,95,84,46,98,96 +26,72,14,88,25,66,34 +34,96,95,74,55 +46,49,68,15,13,98,28,72,54,35,96,42,26 +52,64,23,73,18,16,26,66,13 +62,26,66,49,13,86,54,39,15,46,68,28,61,98,75,96,53,65,35,42,51,83,95 +61,98,75,65,51,83,95,84,92,31,34,88,45,12,52,74,64 +83,12,95,52,53,14,22,64,45,35,74,97,42,51,73,34,65 +86,11,49,97,62,55,64,18,73 +73,97,22,18,25,16,99,66,13,86,15,46,28 +88,45,12,52,14,55,74,64,97,22,18,72,99,62,26,66,49 +16,72,49,54,98 +52,14,64,62,12,97,34,45,58,73,72,11,22,55,31 +55,83,34,73,64,75,95 +64,89,51,74,31,22,92,45,27,97,11 +18,49,86,43,98,96,65 +31,97,14,11,34,23,58,27,62,45,64,52,16,12,74,72,89,55,25 +64,12,34,25,27,83,18 +64,86,16,74,54,97,23,13,22,18,55,39,11,26,99,15,58,62,89,66,25,73,72 +18,39,28,26,15,98,54,43,61,62,89,75,99,58,16,66,49 +28,27,31,98,61,96,46,83,45,15,34 +12,84,83,14,74,31,92,97,96,55,95 +12,28,51,15,34,88,27,31,75,45,43,68,42 +68,28,75,96,65,35,42,51,83,84,92,27,12,52,55 +96,35,88,92,65,15,98,39,84,54,83,46,75,68,51 +46,68,28,61,98,75,96,65,35,42,51,83,95,84,92,31,27,34,88,12,14 +54,15,96,46,43,42,26,99,13,61,98,49,86,72,68,53,28,66,16 +43,26,62,39,11,49,54,89,13,28,15 +45,84,98,15,27,34,31,35,53,51,42,75,12,61,95,65,96,92,83,46,88 +97,58,11,25,16,62,26,66,49,86,54,39,43,46,68,28,61 +52,23,97,22,11,25,54 +18,25,72,99,62,26,66,49,86,54,39,15,43,68,98,75,96 +61,97,13,66,15,72,39,28,18,46,54,43,68,26,86,22,99,62,89,58,16 +68,96,35,51,83,84,31,45,12,52,55 +53,65,35,42,83,95,92,31,45,12,52,14,74,64,23,97,22 +97,52,83,22,25,58,64 +61,42,98,88,31,92,51,54,84,68,95,39,65,46,83,28,75 +14,64,23,22,89,11,25,72,99,62,26,49,13,54,39 +73,86,49,39,14,72,99,22,25,23,16,74,62,89,64,58,54,13,97,55,66 +49,16,97,26,13,15,89,28,86,66,43,62,22,73,68,11,54 +95,53,35,86,42 +25,66,49,39,43,98,35 +65,35,42,92,31,27,88,12,64,97,58 +42,51,95,84,92,34,88,45,55,74,64,23,73,22,11 +62,49,25,46,16 +46,96,65,51,12,52,88,42,14 +11,72,99,66,46 +11,18,25,72,99,62,26,49,86,15,46,96,53 +51,65,28,92,88,98,43,61,42,96,54 +95,54,35,34,27,86,39,83,92,15,96 +66,15,98,26,46,39,28,83,54,49,35,61,51,53,86 +34,42,43,28,61,65,68,83,12,92,15,98,95 +74,97,22,89,11,16,99,49,39,15,43 +15,46,28,61,98,75,96,53,65,35,42,51,95,84,92,27,88,45,12 +46,26,53,54,18,68,11,13,98,99,25,39,16,61,49,62,72,15,86,28,66 +18,99,62,86,39,46,68,28,61,53,65 +14,51,96,92,95,53,35,55,27,84,42,75,64,74,52,65,88,45,61 +26,49,86,28,35,95,84 +55,22,58,18,66,49,13,86,54,39,15 +13,86,15,75,35,83,95,84,92 +14,74,64,72,62,26,39 +84,92,34,88,45,14,55,73,97,89,11,25,72 +72,99,62,26,66,49,54,39,15,43,68,61,75,53,65,35,42 +88,45,12,52,14,55,74,64,23,73,97,22,58,89,11,18,25,16,72,99,62,26,49 +14,74,64,23,73,97,22,58,89,11,18,25,16,72,99,62,26,66,49,13,86,54,39 +11,18,25,16,49,13,54,15,98,96,53 +14,64,52,12,55,11,89,51,18 +16,72,99,66,49,86,54,15,43,68,28,98,96,53,65,35,42 +65,75,53,99,46,42,28,61,66,68,86,54,43,39,13 +18,39,13,72,62,55,23,22,64,14,26,49,58,66,11,74,97 +72,11,86,89,15,99,55,97,73,25,16,13,58,18,49,23,54 +92,28,27,95,13,46,68,42,75 +83,61,15,99,46,86,35,68,53 +83,95,92,31,34,45,12,52,14,55,64,23,97,22,58,89,11,18,25 +88,12,52,14,97,22,89,72,62,26,49 +86,84,96,42,28 +92,27,34,45,12,14,55,74,64,23,73,97,22,58,89,11,18,16,99 +28,61,98,53,65,51,84,34,88,45,74 +88,14,89,22,97,23,84,83,73,58,12,55,27 +61,43,28,98,31,84,52 +75,96,88,84,27,46,28,34,35,83,42,65,98,61,68,31,54,53,43 +15,18,16,72,62,22,25,99,54 +98,54,13,66,86,62,25,35,99,26,68,43,53 +86,54,46,28,75,35,51,92,31,27,34 +26,66,13,86,39,43,61,53,83 +23,97,58,11,18,72,49,86,54,46,68 +35,42,51,83,95,84,92,31,27,34,88,45,12,52,55,74,64,23,73,97,22,58,89 +83,84,98,86,95,65,26 +97,55,22,11,23,45,88,18,84,72,92,73,74,16,58,64,34 +83,95,84,92,31,27,34,88,45,12,52,14,55,74,64,23,73,22,58,89,11,18,25 +97,18,72,99,62,13,86 +28,13,89,98,96,16,49 +14,27,26,73,55,18,34,72,99,45,52,23,74,88,58,25,97,22,12,89,62 +18,25,16,72,99,62,26,66,49,13,86,54,39,15,43,46,68,28,98,75,96,53,65 +58,89,11,18,72,62,26,66,54,39,15,68,61,98,75 +68,72,11,39,58,25,54,86,61,49,75 +98,54,39,28,26,18,11,22,68,43,62,66,86 +45,99,73,97,58,92,89,25,11,14,52,74,23,27,88 +45,12,55,74,64,23,73,97,58,18,25,16,72,99,62,66,13 +27,22,14,84,73,95,58 +64,34,95,88,11,12,14,97,83,73,55 +89,11,45,31,73,14,97,34,58,92,55,51,64,22,23,27,74,84,52,12,95,83,88 +52,97,83,92,22,35,55,51,84,88,27,23,89 +88,42,27,55,84,14,95,98,96,65,74,83,51,34,61,53,12,45,28 +64,45,12,14,22,74,95,97,92,52,31,18,55,25,23,27,34,16,58 +26,51,49,54,75,28,98,42,62,61,46,53,66,96,68,39,43,13,83,65,86 +27,97,52,72,73,64,26,25,16,18,74 +27,52,74,23,73,97,22,58,89,11,18,25,16,72,99,62,26 diff --git a/day5/src/main.rs b/day5/src/main.rs new file mode 100644 index 0000000..44697a8 --- /dev/null +++ b/day5/src/main.rs @@ -0,0 +1,59 @@ +use std::fs::File; +use std::io::{self, BufRead}; + +fn main() { + let file = File::open("input").unwrap(); + + let mut orderings: Vec<(i64, i64)> = Vec::new(); + let mut updates: Vec> = Vec::new(); + + for line_result in io::BufReader::new(file).lines() { + let line = match line_result { + Ok(content) => content, + Err(e) => { + eprintln!("Error reading line: {}", e); + continue; + } + }; + if line.contains("|") { + let pages: Vec<_> = line.split("|").collect(); + orderings.push( + ( + pages[0].parse::().unwrap(), + pages[1].parse::().unwrap() + ) + ) + } + else if line.contains(",") { + updates.push(line.split(",").map(|p| p.parse::().unwrap()).collect()); + } + else { + println!("unexpected input: '{}'", line) + } + } + + let mut sum_correct: i64 = 0; + let mut sum_reordered: i64 = 0; + for update in updates { + let mut is_correct = true; + 'update: for i in 1..update.len() { + for (p1, p2) in orderings.clone().into_iter() { + if update[i] == p1 && update[i-1] == p2 { + is_correct = false; + break 'update + } + } + } + if is_correct { + sum_correct += update[(update.len()-1)/2]; + } + else { + + sum_reordered += update[(update.len()-1)/2]; + } + } + + println!("Sum (correct): {}", sum_correct); + println!("Sum (reordered): {}", sum_reordered); +} + diff --git a/day6/.gitignore b/day6/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/day6/.gitignore @@ -0,0 +1 @@ +/target diff --git a/day6/Cargo.lock b/day6/Cargo.lock new file mode 100644 index 0000000..a16c0bf --- /dev/null +++ b/day6/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day6" +version = "0.1.0" diff --git a/day6/Cargo.toml b/day6/Cargo.toml new file mode 100644 index 0000000..46c0229 --- /dev/null +++ b/day6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day6" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/day6/input b/day6/input new file mode 100644 index 0000000..c52d5a9 --- /dev/null +++ b/day6/input @@ -0,0 +1,130 @@ +........#........................................#......#........#................................................................ +....................................#......#.....#............#.............#..........#.......................................... +......................#.......................................................#................................................... +.......#..#..#....#...#...#....#..............#......#.......#...#................#.......#....................................... +......................#....##...#.......#....#.......................................#....................#....................... +...#............................#........................................#..........................#.....................#....... +....................#............#...............#......#.........#...........#................................................... +............................#......#...#................#.............#........................................................... +.....#..#.........#....................#......................................................#........................#.........# +.........#..##.#.........#.............................................#...........#........#....................##............... +...............#....#.........................##......#.....................#..............................................#...... +..................##...................................#...........#........#....#.............#..................#........#.#.... +....................................#...................#..............................#............#............................. +.........#.....#................#..........................................#...................................#..............#... +...#....................#...................................#..##...................#.......#......................###.........#.. +....................#............#....#.##....#.........#......#...#........................#.......................#..........#.. +..............#...................................................................................#....................#.......... +.........#................#..............................#............................#...#.................#...............#..... +............................................................................................#...#............................#.... +............#....................#................................#....#...............................#....#..................... +........................................#.........#..................................................#..#..................#...... +.............#.#............................#..#.....#............................................#....#.......................... +................................................................................................#.........#..#..............#..#.. +...........#..........#.#..#................#.#..#...#.........#..........................................#..........#..#......... +.............................#....................#.......#....#.....#....#......#....................#..#...............##....... +..........#..............................................................................#....#.........#..#................#..... +..#..#...............................................................#.......#........#...........................#............... +...........................................................................#...##....................#.#....##.................... +.......................................#...............................................#.....................#.........#.......... +.......................................................#.......#....#................#.....................................#...... +.............#................#...................#.................#....................#..................#.#.........#......... +.....................................................................#.....................................#...................... +........................#..........................................#....#..#.#..........................................#......... +............#.......#..................#.................................................#..............#.......................#. +.........................................................#...............#...#....#...........#.................................#. +.........................#..........................#..#........................................................#................. +...............#....................................#.......#......................................#............#................. +.#......................................................................................................#......................... +#...#........................................................#.................#....#....................#...........#............ +..#.........#................................................................#................................#.............#..... +..................................#.........................................................................#................#.... +..............#..............................................#........#..................................#........................ +......#............................................#.................................#............................#............... +.......##..#.......................##............#...#...................#.#..........................................##.......... +.#......#.....................................................................#..#..........................#......#.............# +.................#.....................#........##..#.........#........#................#......................................... +...........#.....#..........#........#............................................................................................ +.........................#......#.......................................#..............................#.......................... +............#............................................................#..............#..............................#.......... +..................#.........#...........................................................................................#......... +#.#..................................#....................#......................#.............#.................................# +....#................#.................#...................#...........#......................................#................... +................#........................................................................................#....#.#.......#.....##.. +..........#...#.......................................#........#.......................................#...#...................... +.......#..##........................#......##.........................#.........#.......#.............................#.....#..... +................#...............................................#....#..........#.....#.........#.........#.........#............. +...............................#............#....................................#......#......................................#.. +.#..#..................#............................................#....#............#...............##...#..........#........... +....#............................................................................................................................. +.............................................................#...........................#..........#............................. +.#........#..................#.....#.............#.....................................................#...#........#...........#. +.......................#........................................#.....#............................#.#..................#......... +................#....#................#.......#............................#.......#.................#............................ +....#.........#....#........#.....................#........................#............#......................................... +.......#.......#.....................................................................##...........#............................... +...........#.........................................................#..........#............#.................................... +..................#.............................#.......................................................................#......... +................#.....#........#.....#...#..........#.....................................#.....#........................#........ +..........................................#.........#...........#................................................................. +...#.......................................................................................................#...................... +....#..............#...........#..................................................#.................#.................#........... +.#................#.....#.#.................................................................#.........................#........... +............#.........................##....................................#..............#...................................... +...##...........#...#............#..........................................................................#..................... +............................................#......................#......#....................................................... +............#............................................................................................................#........ +...................##..............#.#....#.##...................................................#..................#............. +..#...................................................................................#.........#.........................#.....#. +........................#..............................................#......#................................................#.. +................#............#............................#.#...................#.....................#........................... +..................#......#................#.#......................#...................#...#...................................... +..#................................................##...................................................................#......... +...........................#......................................................................#......#...#......#............. +........................#...#........#......#.......#..........#.............................#........#.....#..................... +.................................................#..............................................#......#.....#.................... +.....#....#.................#......#........#.#..............^...........................#...................#..#................. +.............................................................................#................................#................... +#..........................#..#..............#.......#..........................#................................................. +............#.............................................................................#...................#................... +..................#.............................#.........................................#................#.........#......#..... +...#...............................#.....#......#............###.#.#.....................................#....#.............#..... +...........#...........#...........................#.............................................................................. +............#..........................................#.....#.............#..........................#....................#.....# +........................#......#..#............................#.......................................................#.......... +..#...#...#.......#.#..........................................#.............#.........#....#..................#...........#...... +..................#.......#.....................................................................................#........#........ +......##................#...........................................#..............##.................................#........... +.................#................................................................................#.#....................#........ +....................#.........#..........#...............#...#...#.#.#............................................................ +#..................#.#..........#..#...................................................................................#.......... +..........#........................................................#..........##..........................#..##................... +...........#...................................................................#.................................................. +..................#........#............................................#..................#....#.......................#..#...... +............#...................#......#.......................................................................................... +...........................#.....##..........#.#..............#......................#.............#.......#...........#.......... +............#..................................................#.......#.........#.#..................#..............##........... +#..................................................#...#......#..#......................#.............#........#............#..... +....#..................#..........#.........#.........................................#..................#................#....... +...#.................#.............................................................................#....................#......... +..........#.................................................................#............#....................#.#.#.....#......... +.....................#......................#...........#........#................................................................ +.....#.......................................................................#......................#...#......#.................. +.............##........#.....................#...........##........#............#.....#.....................#...............#..... +.....#.........#....#.................#....#...........#.......##..........#.........#.#......................................#... +.......#..................##.......#...#.#...#...................................#.......................................#.....#.. +...............#.......#.................#........................................................................................ +......#.......#.....#...............................#...........#.......#......................##...#....#........................ +.##..........................##..................##................#..#....#...##................................................. +........#..............................#.#......#........#...............#....#........#.#........................................ +...............................#..#.....................#.#...................#................................................... +.....................#.................................................##...#.......#.................##...............#.......#.. +.............#..........................#.................................#..............#.......#..........#........#............ +.........................................#...................#.........................................................#.......... +...............................#..........#..............................#............#.....#..................................... +.............#..........................#....................#................................#...#............#.................. +....#......#........#.......#......#................................................#...#......................................##. +..#...................................#........#.....................................#...#......#.........#..#..........#......... +.......#.........#................................................................................................................ +...........#...............................##.........................................#..#....................#.....#.#.......##.. +.........................#..#...............#............................#.............#..........................#..............# diff --git a/day6/src/main.rs b/day6/src/main.rs new file mode 100644 index 0000000..6395312 --- /dev/null +++ b/day6/src/main.rs @@ -0,0 +1,115 @@ +use std::fs::File; +use std::io::{self, BufRead}; +use std::collections::{HashMap, HashSet}; + +fn main() { + let file = File::open("input").unwrap(); + let mut obstacles: HashSet<(i16, i16)> = HashSet::new(); + let mut size_x: i16 = 0; + let mut size_y: i16 = 0; + let mut start_pos: (i16, i16) = (-1, -1); + + for (line_idx, line_result) in io::BufReader::new(file).lines().enumerate() { + size_y += 1; + let line = match line_result { + Ok(content) => content, + Err(e) => { + eprintln!("Error reading line: {}", e); + continue; + } + }; + + let mut line_size_x: i16 = 0; + for (i, c) in line.chars().enumerate() { + line_size_x += 1; + if c == '^' { + start_pos = (i.try_into().unwrap(), line_idx.try_into().unwrap()); + } + if c == '#' { + obstacles.insert((i.try_into().unwrap(), line_idx.try_into().unwrap())); + } + } + if line_size_x > size_x { + size_x = line_size_x; + } + }; + + let visited_positions = run(&obstacles, start_pos, size_x, size_y); + println!("The guard visited {} distinct positions", visited_positions.unwrap()); + + let mut effective_obstructions: u16 = 0; + for x in 0..size_x { + for y in 0..size_y { + let mut obstacles_new = obstacles.clone(); + obstacles_new.insert((x, y)); + match run(&obstacles_new, start_pos, size_x, size_y) { + Some(_) => {}, + None => effective_obstructions += 1, + } + } + } + println!("Effective obstructions: {}", effective_obstructions); +} + +fn run( + obstacles: &HashSet<(i16, i16)>, + start_pos: (i16, i16), + size_x: i16, + size_y: i16, +) -> Option +{ + #[derive(Copy, Clone, Eq, PartialEq, Hash)] + enum Direction { + Up, + Down, + Left, + Right, + } + let mut guard_pos: (i16, i16) = start_pos; + let mut direction: Direction = Direction::Up; + let mut visited: HashMap<(i16, i16), HashSet> = HashMap::new(); + loop { + let new_position = match direction { + Direction::Up => (guard_pos.0, guard_pos.1 - 1), + Direction::Down => (guard_pos.0, guard_pos.1 + 1), + Direction::Left => (guard_pos.0 - 1, guard_pos.1), + Direction::Right => (guard_pos.0 + 1, guard_pos.1), + }; + if new_position.0 < 0 || new_position.0 > size_x || new_position.1 < 0 || new_position.1 > size_y { + break; + } + + + /* + visited + .entry(guard_pos) + .or_insert_with(HashSet::new) + .insert(direction); + */ + + if let Some(directions) = visited.get_mut(&guard_pos) { + if !directions.contains(&direction) { + directions.insert(direction); + } else { + return None; + } + } else { + let mut new_set = HashSet::new(); + new_set.insert(direction); + visited.insert(guard_pos, new_set); + } + + if obstacles.contains(&new_position) { + direction = match direction { + Direction::Up => Direction::Right, + Direction::Down => Direction::Left, + Direction::Left => Direction::Up, + Direction::Right => Direction::Down + }; + } + else { + guard_pos = new_position; + } + } + Some(visited.keys().len()) +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..f8d1bd3 --- /dev/null +++ b/shell.nix @@ -0,0 +1,8 @@ +{ pkgs ? import {} }: + pkgs.mkShell { + nativeBuildInputs = with pkgs; [ + cargo + cargo-watch + gcc + ]; +}