From 4af7ced4b56ec220d6d0c2dcdab5b79f564afda8 Mon Sep 17 00:00:00 2001 From: Isaac Shoebottom Date: Mon, 2 Dec 2024 18:34:33 -0400 Subject: [PATCH] Initial commit (day 1 and day 2) --- 2024/01/input.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++ 2024/01/solution.py | 35 ++ 2024/02/input.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++ 2024/02/solution.py | 81 ++++ 2024/02/test.txt | 22 + 5 files changed, 2138 insertions(+) create mode 100644 2024/01/input.txt create mode 100644 2024/01/solution.py create mode 100644 2024/02/input.txt create mode 100644 2024/02/solution.py create mode 100644 2024/02/test.txt diff --git a/2024/01/input.txt b/2024/01/input.txt new file mode 100644 index 0000000..c36385c --- /dev/null +++ b/2024/01/input.txt @@ -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 \ No newline at end of file diff --git a/2024/01/solution.py b/2024/01/solution.py new file mode 100644 index 0000000..61eda5b --- /dev/null +++ b/2024/01/solution.py @@ -0,0 +1,35 @@ +list1 = [] +list2 = [] +file = open("input.txt", "r").read() +lines = file.split("\n") +for line in lines: + nums = line.split(" ") + num1 = int(nums[0]) + num2 = int(nums[1]) + list1.append(num1) + list2.append(num2) +list1.sort() +list2.sort() + +# for i in range(len(list1)): +# print(list1[i], list2[i]) + +total_dist = 0 +for i in range(len(list1)): + dist = list2[i] - list1[i] + dist = abs(dist) + total_dist += dist + +print("Total distance: ", total_dist) + +total_similarity = 0 +for i in range(len(list1)): + num = list1[i] + occurs = 0 + for j in range(len(list2)): + if num == list2[j]: + occurs += 1 + similarity = num * occurs + total_similarity += similarity + +print("Total similarity: ", total_similarity) \ No newline at end of file diff --git a/2024/02/input.txt b/2024/02/input.txt new file mode 100644 index 0000000..1768d7b --- /dev/null +++ b/2024/02/input.txt @@ -0,0 +1,1000 @@ +16 17 18 21 23 24 27 24 +74 76 79 81 82 85 85 +48 51 53 54 55 59 +29 31 32 34 36 39 41 46 +9 12 9 11 14 16 17 20 +65 68 66 67 69 70 73 72 +56 58 59 58 61 64 64 +21 24 25 27 24 25 29 +83 85 88 91 90 96 +74 77 78 78 81 83 86 87 +68 69 72 75 75 74 +34 37 38 38 41 43 43 +41 43 44 47 49 49 53 +69 71 72 74 74 75 76 83 +53 56 57 60 61 65 66 +46 49 53 55 53 +41 43 45 49 52 52 +37 39 43 46 50 +51 54 55 56 60 66 +30 32 39 42 45 +58 59 60 65 64 +63 65 68 70 72 74 79 79 +50 53 56 62 66 +64 66 67 72 74 76 82 +12 10 13 16 19 21 22 +12 11 12 15 16 15 +63 60 63 65 68 70 70 +15 13 16 18 19 22 26 +86 83 85 86 89 92 98 +73 71 74 75 72 74 +68 67 69 67 64 +83 81 83 81 81 +31 28 30 28 32 +88 87 84 85 92 +18 16 19 21 22 22 23 +19 16 16 17 14 +49 46 46 48 48 +9 8 11 12 12 13 14 18 +23 20 21 21 28 +78 76 80 81 84 87 +81 78 82 84 83 +60 58 61 65 65 +62 60 64 65 68 71 72 76 +51 49 52 56 62 +5 3 5 12 13 14 +26 24 26 27 33 36 33 +15 14 15 22 22 +79 76 77 83 87 +40 37 39 44 50 +68 68 70 72 75 77 80 81 +68 68 71 74 76 73 +74 74 75 78 78 +77 77 79 82 83 84 86 90 +39 39 41 44 51 +39 39 42 44 47 46 49 51 +39 39 42 43 41 44 43 +51 51 50 53 55 55 +74 74 75 73 77 +23 23 22 24 27 34 +1 1 3 4 5 5 8 +73 73 74 76 77 77 78 77 +46 46 49 49 49 +63 63 65 67 67 71 +21 21 22 22 24 27 30 37 +1 1 4 5 9 10 13 +74 74 77 81 79 +12 12 16 17 17 +70 70 73 77 78 80 84 +9 9 13 16 17 19 26 +19 19 26 27 28 30 +41 41 43 49 51 49 +84 84 89 92 95 97 97 +11 11 14 21 23 24 25 29 +80 80 81 84 89 91 96 +68 72 73 75 77 +61 65 67 68 70 73 74 73 +31 35 38 40 41 42 42 +3 7 10 11 12 15 19 +79 83 86 87 88 91 97 +48 52 50 51 54 +88 92 91 94 95 97 96 +44 48 46 49 49 +51 55 57 60 63 61 65 +14 18 19 18 21 24 27 32 +62 66 66 67 70 72 75 +27 31 31 34 35 36 39 36 +68 72 73 73 75 75 +56 60 62 65 66 69 69 73 +40 44 47 47 54 +49 53 57 58 60 61 +83 87 88 90 92 96 95 +55 59 60 63 65 69 69 +18 22 25 29 32 36 +14 18 19 23 28 +45 49 50 52 59 61 64 65 +26 30 35 36 37 40 39 +80 84 87 90 96 96 +80 84 85 88 95 99 +25 29 31 37 42 +85 90 92 95 96 97 +39 44 46 49 51 53 50 +14 19 21 23 24 26 28 28 +64 70 72 74 75 77 78 82 +20 27 30 33 40 +37 42 41 44 46 47 +19 25 23 25 28 31 34 31 +65 71 70 73 73 +71 76 73 76 79 83 +46 53 54 57 60 59 64 +63 70 71 73 75 78 78 81 +64 69 70 71 71 72 73 71 +80 87 87 89 90 91 91 +48 54 54 56 57 58 62 +24 30 32 34 34 37 42 +69 75 76 80 83 84 86 +42 47 49 53 56 55 +68 75 76 80 82 83 84 84 +9 14 15 19 23 +69 76 80 83 85 91 +41 48 51 52 57 58 +53 58 61 62 69 72 70 +23 30 32 38 38 +10 15 18 25 28 32 +24 31 32 34 37 42 45 51 +25 22 21 19 18 16 13 15 +41 40 39 38 38 +25 23 22 20 18 15 12 8 +87 85 83 81 79 74 +22 19 16 14 11 14 11 +5 2 4 3 6 +75 72 69 72 69 69 +77 75 76 75 74 70 +49 46 45 42 40 43 41 34 +70 68 68 67 65 +77 74 73 73 70 69 67 69 +36 34 34 32 31 29 28 28 +63 61 61 58 56 52 +49 47 46 43 41 38 38 32 +39 38 34 32 30 +37 36 35 34 30 33 +11 10 7 6 5 1 1 +87 86 85 81 78 75 71 +41 39 36 32 29 27 26 19 +62 60 58 52 50 47 +15 14 12 6 9 +49 46 43 36 33 30 30 +57 55 48 46 44 41 37 +87 84 81 80 77 76 70 64 +24 25 24 23 21 19 18 17 +85 88 86 83 80 77 80 +55 57 55 52 51 51 +96 97 94 93 92 91 88 84 +53 55 53 51 48 43 +12 15 16 15 13 10 8 +39 42 43 42 39 42 +94 96 97 95 94 94 +28 30 31 29 25 +43 46 47 44 43 38 +43 46 44 44 43 42 41 +16 18 18 15 14 12 9 10 +69 70 70 68 67 66 66 +70 71 69 66 65 65 61 +24 27 27 24 23 21 16 +28 31 30 28 24 22 20 19 +84 87 85 83 80 79 75 78 +25 26 23 19 17 17 +70 71 69 67 66 63 59 55 +45 48 44 41 40 35 +84 85 79 76 74 +47 50 43 40 37 40 +39 40 37 34 27 27 +43 45 42 41 38 31 27 +74 75 73 70 64 57 +73 73 70 69 67 +93 93 90 87 84 81 84 +76 76 74 71 70 69 69 +43 43 40 37 33 +83 83 81 80 78 73 +85 85 82 79 80 78 +7 7 8 6 3 1 3 +32 32 35 34 32 31 31 +92 92 93 92 89 85 +52 52 50 52 49 43 +77 77 75 74 72 72 70 67 +32 32 30 29 28 26 26 29 +12 12 12 9 6 6 +97 97 94 94 91 89 85 +30 30 27 27 20 +21 21 20 16 13 +89 89 86 83 80 76 77 +53 53 50 48 44 44 +72 72 68 65 61 +36 36 35 32 31 28 24 19 +39 39 37 31 29 28 25 +53 53 47 45 42 43 +16 16 9 8 8 +42 42 40 39 37 32 28 +61 61 59 56 54 48 42 +34 30 29 27 24 +96 92 90 87 86 84 83 84 +56 52 50 49 47 47 +89 85 84 81 80 76 +38 34 33 30 25 +50 46 44 45 42 41 38 37 +98 94 93 92 93 90 89 92 +14 10 8 7 9 9 +19 15 18 16 12 +43 39 38 39 33 +68 64 63 62 59 59 57 54 +53 49 48 48 45 46 +61 57 55 55 53 51 48 48 +48 44 42 42 40 39 37 33 +51 47 47 44 37 +37 33 30 27 25 21 18 +83 79 76 73 69 66 67 +37 33 30 26 24 22 21 21 +72 68 65 64 63 62 58 54 +51 47 44 42 40 36 30 +37 33 27 24 22 19 18 +19 15 8 7 4 7 +80 76 71 68 68 +42 38 37 31 27 +71 67 66 61 58 57 51 +59 53 50 47 45 42 39 +27 22 20 18 17 15 18 +40 35 32 31 28 28 +32 27 25 24 23 19 +65 58 55 54 53 51 50 44 +45 39 36 38 37 +56 51 49 50 51 +45 40 37 34 31 34 32 32 +96 91 90 92 89 85 +46 40 41 38 36 33 28 +73 67 67 65 64 62 60 +32 25 22 19 19 18 20 +31 26 24 23 20 20 20 +72 66 66 63 60 59 55 +39 34 32 30 27 27 26 19 +43 36 32 31 29 28 +73 66 62 60 58 55 57 +37 30 29 25 25 +83 76 72 70 67 63 +62 57 55 52 48 41 +86 80 73 70 67 +67 60 58 57 54 47 45 48 +73 67 62 59 57 55 55 +85 79 78 73 69 +91 86 85 84 78 75 69 +48 42 40 37 32 30 30 +18 24 26 28 26 26 +84 87 86 85 84 86 84 84 +70 77 80 81 78 84 +53 46 43 42 38 38 +59 64 67 69 71 76 77 77 +69 68 64 63 60 62 +85 82 81 81 78 78 +31 27 21 18 18 +70 71 70 67 70 +95 93 90 87 84 77 +68 72 76 78 79 81 82 88 +98 98 96 96 96 +15 8 5 4 4 +68 69 66 69 73 +97 93 95 92 89 86 89 +71 67 66 65 62 57 58 +55 55 53 49 46 45 43 41 +66 63 60 57 55 51 47 +81 84 80 79 81 +11 15 17 20 23 29 +56 60 63 64 71 73 75 79 +85 86 79 76 76 +56 61 62 65 66 68 +40 40 38 38 37 40 +35 31 30 30 28 +63 67 70 73 77 77 +79 86 87 89 95 94 +12 16 19 20 21 21 22 24 +28 28 25 22 20 18 16 16 +45 50 52 53 53 +37 41 44 49 47 +2 4 5 9 11 +53 53 52 49 44 42 41 42 +50 50 54 57 60 65 +35 42 46 48 49 56 +44 45 50 51 54 52 +33 29 27 25 22 21 17 +18 13 12 12 5 +24 19 17 10 7 5 2 1 +54 58 61 66 68 70 73 +86 86 88 89 88 85 +84 84 87 85 83 +59 55 53 50 48 47 40 +8 9 10 10 11 17 +46 46 49 47 48 51 57 +85 81 78 77 72 70 66 +70 76 79 85 86 +58 54 51 48 45 38 36 31 +40 40 41 41 42 46 +73 70 68 67 62 61 58 56 +14 17 17 14 13 11 11 +6 3 4 7 11 14 17 18 +81 83 82 78 76 73 68 +86 89 89 87 85 87 +23 24 23 16 15 +36 37 36 29 25 +31 31 28 25 19 +88 88 87 88 87 85 88 +69 70 67 64 61 60 57 50 +43 42 44 50 50 +25 31 32 36 34 +18 18 24 25 25 +42 42 43 48 47 +41 43 40 43 44 45 45 +88 90 88 86 84 82 80 +77 76 73 71 65 65 +30 33 36 39 40 40 41 45 +5 5 12 15 19 +86 86 88 90 90 +84 84 82 81 79 75 68 +8 8 7 7 5 +76 69 67 65 63 +75 79 81 83 86 90 +24 23 25 27 26 31 +51 55 57 60 60 58 +81 78 76 73 68 66 65 60 +51 58 59 60 62 62 63 70 +72 72 70 71 75 +53 49 48 41 39 37 +13 15 13 16 12 +70 74 75 79 78 +95 91 88 86 84 84 82 78 +70 64 63 61 58 57 53 47 +66 60 59 61 60 +42 42 39 33 32 29 25 +1 8 11 18 20 25 +4 4 7 10 9 11 14 14 +93 87 83 80 76 +68 75 76 78 77 +23 18 15 13 11 7 +14 14 15 18 20 21 22 +71 67 64 64 63 60 58 51 +85 79 77 76 73 72 65 +50 48 49 52 52 57 +23 19 15 12 10 7 4 5 +93 95 93 91 93 90 89 90 +30 25 24 22 25 +93 96 94 92 91 87 83 +74 78 80 79 81 83 84 84 +67 65 66 68 74 76 82 +60 58 51 50 46 +30 26 23 22 21 18 21 +33 30 28 26 23 21 19 22 +17 16 17 19 26 25 +68 66 62 61 58 56 53 53 +19 15 13 11 11 11 +64 65 64 61 58 57 55 55 +27 26 26 28 31 34 +22 26 28 30 33 36 35 37 +51 51 55 56 59 +65 59 56 58 55 55 +42 38 36 34 34 37 +94 91 89 91 90 89 87 83 +36 32 30 26 24 22 19 16 +16 12 10 6 6 +53 53 56 58 60 59 +65 69 66 69 71 73 71 +6 6 4 3 2 1 +34 27 24 17 16 17 +30 31 30 32 29 26 +6 13 13 15 17 21 +57 50 46 44 45 +86 83 81 83 87 +94 94 91 90 86 83 83 +42 42 43 41 40 40 +28 32 35 35 38 40 41 41 +3 3 5 8 11 13 14 19 +62 65 64 62 62 60 59 +49 47 44 45 44 +84 87 80 79 78 72 +27 29 30 32 35 38 44 +8 10 10 13 15 16 17 +72 68 66 63 61 58 55 52 +49 49 48 47 45 44 42 38 +54 51 50 52 55 58 60 60 +30 34 35 36 38 +2 3 4 7 10 11 11 +30 36 40 43 44 +26 25 26 30 32 35 35 +16 19 21 23 26 29 33 +11 9 6 5 3 3 +45 45 42 39 38 37 35 37 +20 19 16 13 12 9 5 3 +88 87 87 86 81 +66 68 64 61 58 57 54 +16 15 18 21 28 32 +57 62 66 68 70 73 77 +10 14 17 23 23 +92 89 93 95 96 95 +51 51 57 59 61 67 +8 8 11 15 16 15 +20 23 24 27 24 +16 22 22 25 26 29 26 +71 74 75 78 85 87 90 91 +90 85 88 85 81 +35 33 36 43 44 47 +81 79 80 80 83 87 +31 31 31 29 25 +14 21 22 22 24 27 28 28 +62 66 67 69 69 76 +20 18 21 22 25 29 +76 74 72 67 64 65 +39 37 36 33 32 28 +20 27 28 29 32 36 37 37 +42 41 39 36 37 32 +3 8 6 8 10 12 15 +49 51 52 54 56 59 60 62 +6 8 11 12 13 15 16 19 +66 68 71 72 73 +27 26 25 24 21 19 18 +14 12 9 8 5 +66 67 70 71 72 73 76 +77 75 73 70 69 +13 12 9 8 7 6 5 2 +47 49 51 53 56 58 59 +72 70 67 65 64 63 60 +31 34 35 36 37 38 41 +69 70 72 73 76 78 +86 84 82 81 78 75 +30 29 28 26 23 21 +48 45 42 40 38 36 +39 42 45 48 51 54 +43 40 39 36 35 32 31 30 +73 72 71 68 65 +88 86 85 84 81 +76 75 72 69 66 65 +18 21 23 25 27 29 30 +42 40 39 36 33 +96 93 92 90 89 87 86 +46 49 51 53 55 58 59 +17 18 21 22 25 27 30 32 +23 20 17 16 13 +18 16 14 11 10 7 6 3 +22 24 25 26 28 29 +30 31 32 34 37 +98 95 92 91 89 88 86 +28 31 32 33 34 37 39 +71 73 76 79 80 82 85 +44 47 48 51 52 54 57 58 +43 40 37 35 32 30 29 +71 73 76 79 80 82 84 +96 95 93 92 91 89 86 83 +91 90 89 86 84 83 80 79 +80 81 83 85 88 +10 13 16 18 21 +96 95 94 92 91 88 +39 41 44 45 46 +11 9 8 6 4 3 1 +65 67 69 70 73 74 +96 94 92 89 86 85 84 +31 30 28 25 22 20 +32 30 27 25 23 22 20 18 +40 37 34 31 30 29 27 26 +75 76 77 78 79 82 83 +21 22 24 26 29 30 33 34 +13 15 17 18 19 21 22 +62 60 57 56 53 51 +63 64 66 68 70 73 +18 16 14 13 12 10 +55 58 60 61 63 66 +24 25 26 29 30 32 +35 36 37 39 41 44 45 48 +11 12 15 16 17 19 21 23 +81 83 86 89 92 +56 55 54 53 52 +40 43 45 47 49 +34 36 37 38 41 42 45 46 +57 54 51 49 48 +21 24 26 27 28 +34 35 37 40 41 +28 30 31 32 34 35 37 39 +52 50 47 46 43 40 38 +76 77 80 81 83 84 85 88 +65 64 61 59 58 55 54 +41 38 37 35 33 +23 22 21 18 15 14 12 +87 88 89 90 91 93 +63 65 67 69 70 +11 14 17 18 19 21 +14 16 19 20 23 24 25 +58 61 64 67 69 71 72 +67 66 63 62 61 58 +86 89 90 92 94 95 +8 11 12 13 14 16 19 +9 6 5 3 2 1 +39 38 35 33 30 28 25 23 +69 68 66 65 62 61 59 +85 86 89 91 93 +39 41 43 46 48 50 53 55 +48 45 42 41 39 36 34 32 +59 61 64 65 66 67 +40 42 43 46 48 +66 64 61 60 57 54 53 51 +32 29 26 23 21 +71 72 74 77 78 +88 89 92 95 98 99 +81 80 78 76 73 70 +75 74 72 71 69 68 67 +87 86 85 84 82 80 +84 86 89 91 93 95 +56 55 52 51 50 49 48 47 +53 56 59 60 62 64 66 68 +66 63 60 59 56 54 +11 14 15 16 17 20 +67 69 72 73 76 78 81 83 +12 9 8 7 5 4 1 +36 35 33 32 31 29 26 24 +81 79 76 73 72 70 67 64 +21 24 26 29 31 32 +67 65 64 61 58 57 +19 21 23 26 28 30 32 35 +3 4 7 9 10 13 14 +34 37 38 39 42 43 44 47 +96 95 93 91 90 87 +65 68 71 73 76 77 80 +27 25 24 23 20 19 +71 74 76 79 81 +63 60 57 56 55 +13 10 9 7 6 3 2 1 +24 21 20 17 16 13 11 10 +33 32 31 28 25 24 23 +79 77 75 74 72 71 +22 21 18 16 13 +30 28 26 24 21 19 17 +57 58 59 62 64 67 +53 54 55 58 59 +21 18 16 13 10 +28 26 23 22 21 18 +1 4 6 7 8 11 14 +85 84 81 79 76 75 +41 43 45 48 51 54 56 58 +82 85 86 88 89 +22 24 26 28 30 31 33 35 +52 50 49 46 45 44 42 40 +54 52 49 47 44 43 40 +93 90 87 84 81 +82 79 77 76 75 74 73 72 +71 73 75 77 80 82 84 86 +45 46 49 52 55 58 +53 51 49 47 44 +28 30 33 34 35 38 41 44 +18 21 22 23 25 26 27 +65 66 69 70 72 75 +74 72 70 69 68 66 64 61 +47 48 51 52 54 +14 17 19 22 25 +45 46 48 51 54 55 56 57 +32 30 29 27 25 +61 62 63 65 68 69 +79 82 84 87 89 91 +32 34 37 39 41 42 44 46 +14 17 19 21 23 25 26 +85 88 89 90 92 93 96 +71 69 67 64 61 60 +84 87 88 89 90 91 94 96 +35 38 40 41 43 45 46 +82 84 87 90 92 94 +56 57 60 62 63 +55 57 58 61 63 +63 65 68 69 72 +81 78 77 75 73 72 70 69 +88 86 83 80 77 +49 51 52 53 54 +84 81 78 77 76 75 72 69 +59 58 56 54 53 +54 57 59 62 63 66 +70 68 65 64 61 60 59 58 +61 62 63 66 69 +41 43 45 46 47 +79 77 74 72 71 +66 68 69 72 73 74 +48 50 52 53 54 55 +34 31 28 27 25 +56 57 59 61 62 +65 68 70 73 75 77 +95 94 92 91 89 87 86 84 +33 34 35 36 38 40 41 42 +34 37 38 41 44 +6 7 10 12 14 16 +55 52 51 49 48 45 44 43 +46 49 50 52 53 56 58 61 +95 92 90 87 85 82 79 +19 22 24 26 29 30 31 +48 50 51 53 56 +31 30 28 26 23 20 17 15 +74 75 78 79 82 83 +82 83 85 87 90 91 +15 12 9 7 4 3 1 +66 65 62 60 58 57 56 +27 30 33 34 35 37 38 +35 32 30 28 26 25 +95 93 90 87 84 83 +47 46 43 41 38 36 +22 24 27 30 33 34 +57 54 52 50 48 47 +78 81 84 86 88 91 +33 30 28 27 25 24 22 19 +21 18 15 14 12 10 8 6 +13 12 10 9 6 5 3 2 +56 55 54 52 51 +19 18 15 14 12 10 8 6 +38 41 44 46 49 50 52 54 +48 49 50 52 53 54 56 +77 78 80 82 85 +65 64 61 58 55 53 +23 26 28 30 32 +17 15 14 12 10 +26 28 31 33 34 35 37 +16 13 11 10 8 5 +76 74 73 70 67 +44 43 41 38 37 +82 79 76 75 74 71 69 67 +2 4 7 8 11 14 +80 79 78 77 74 72 69 +27 28 29 30 31 34 37 +9 8 5 3 2 +81 79 78 77 74 +52 51 50 49 47 44 42 +20 22 25 27 30 33 36 +62 61 60 59 57 +82 81 78 77 75 72 71 +13 16 17 18 20 21 24 +16 19 21 22 23 25 28 31 +39 37 34 32 30 28 25 24 +40 42 45 47 48 +77 74 73 71 68 67 +6 9 11 13 14 15 18 20 +80 77 76 75 73 71 +80 82 84 85 86 87 +19 21 23 24 27 +92 90 87 85 83 82 +31 30 29 28 27 26 +89 87 84 81 79 +75 77 78 80 82 +92 90 88 87 86 +23 25 27 30 31 32 35 +35 34 31 29 27 +35 37 38 39 40 43 45 46 +86 87 90 92 94 +20 17 15 13 12 10 9 6 +63 64 67 68 71 73 +94 91 90 89 86 85 83 +78 80 81 82 85 88 +39 40 41 43 46 48 49 50 +50 49 46 45 44 43 41 +29 26 24 23 21 18 +18 16 14 11 8 +33 36 37 40 43 44 +20 22 25 27 29 32 33 34 +34 33 30 28 26 +14 17 18 21 24 25 26 29 +47 46 44 43 41 39 37 35 +49 52 53 55 56 +48 46 45 43 42 40 37 36 +45 43 42 39 37 +96 93 90 88 87 +26 23 20 17 15 12 +14 17 19 22 23 26 27 +57 60 62 65 66 69 70 73 +79 77 74 73 71 68 65 +71 69 67 66 65 62 60 +79 78 77 74 71 70 67 66 +51 49 47 44 42 39 36 35 +74 71 69 66 63 +54 51 50 47 45 44 41 +90 93 95 96 98 99 +4 7 9 12 13 16 +74 72 70 67 65 64 +47 49 52 55 56 57 60 +82 81 78 76 75 +81 79 77 75 74 71 69 +86 83 82 80 79 76 +34 31 28 27 26 +29 31 34 35 37 +30 28 27 24 22 19 +14 17 19 21 23 25 +4 5 8 11 13 16 18 20 +53 56 59 62 65 66 67 68 +48 45 42 39 36 34 +72 70 69 67 65 64 62 +45 48 49 52 53 +44 47 50 52 53 54 56 57 +28 25 24 23 22 20 +84 86 89 91 92 +81 83 85 86 88 90 +81 78 76 75 73 70 68 67 +26 27 30 33 35 +94 93 92 90 89 86 +58 59 60 63 65 68 +58 57 54 51 49 47 44 41 +53 56 57 60 62 +5 7 10 11 13 16 +67 70 72 73 76 78 +33 35 37 39 42 44 +86 84 82 81 80 79 +50 48 45 44 43 42 +35 32 29 28 26 24 21 18 +96 94 92 89 87 84 +90 87 86 83 80 +67 70 72 74 76 79 80 83 +68 70 73 74 75 76 78 +13 14 17 20 23 26 28 +54 55 58 60 61 +21 19 18 17 15 14 +98 95 93 90 87 84 +81 84 86 89 92 +59 62 63 66 69 71 +98 96 94 93 90 +59 60 62 65 67 +44 45 47 49 50 51 54 56 +78 75 74 73 72 +92 90 89 87 85 +44 47 48 49 52 54 55 58 +54 51 48 46 43 40 38 36 +76 79 82 85 88 +12 10 7 5 2 +24 23 21 20 19 17 15 14 +57 59 61 64 67 68 +74 73 72 70 68 65 64 +71 74 77 80 83 86 +46 45 42 39 37 34 31 29 +63 60 58 56 55 54 +57 55 53 50 48 45 43 +83 85 86 89 90 93 +92 91 88 86 84 81 79 77 +4 7 9 11 13 +14 11 10 8 5 3 2 +13 15 17 19 20 +36 35 32 31 29 26 25 +91 88 86 85 82 +12 9 8 5 4 +22 25 26 27 30 33 36 37 +14 12 9 8 7 4 3 2 +25 28 29 30 33 +85 86 87 89 91 92 94 95 +47 49 51 54 56 +88 85 83 80 77 +68 71 72 73 75 +61 64 67 70 72 +84 81 78 77 74 72 71 68 +81 78 75 72 71 69 +48 45 43 41 40 39 +50 52 55 56 57 59 60 61 +68 70 72 73 74 75 77 80 +15 14 11 8 7 +27 24 22 20 18 16 14 11 +80 81 83 85 86 87 90 93 +11 14 17 19 20 22 24 26 +55 53 51 48 47 46 43 42 +60 63 65 68 69 71 74 76 +74 76 77 80 82 +56 54 51 48 46 43 42 39 +63 61 60 59 57 55 52 49 +74 77 79 82 83 +59 61 62 63 66 +43 42 41 38 35 33 30 27 +93 91 89 88 87 86 85 82 +13 14 16 19 21 24 27 +51 50 48 46 43 40 37 +81 83 84 87 90 93 96 98 +60 62 63 65 68 70 73 +29 28 26 25 24 22 +55 56 58 61 63 64 66 68 +96 94 93 91 89 88 87 +78 80 83 84 86 +97 94 91 88 85 +19 21 22 25 28 31 +15 12 9 6 5 2 +70 71 72 75 77 78 80 83 +62 64 67 69 71 72 +64 67 68 70 72 74 76 +12 13 16 17 18 +51 48 45 44 41 40 37 +83 84 86 87 88 90 92 +81 83 84 85 87 90 +63 62 59 56 55 54 51 49 +69 70 71 73 75 +28 27 26 24 23 21 20 18 +61 62 63 65 66 69 71 74 +54 56 58 59 60 61 +75 76 79 82 84 +54 51 49 47 45 43 40 37 +83 81 80 79 76 75 73 +23 24 27 29 30 31 32 +6 9 12 15 17 18 19 20 +24 23 22 21 18 17 +76 78 80 83 84 86 87 90 +51 53 56 58 59 62 63 +9 11 13 16 17 20 22 25 +59 60 63 65 66 67 +52 54 57 58 61 62 64 65 +7 8 9 10 12 15 +7 10 13 16 19 20 22 25 +20 22 25 26 28 +27 28 31 34 35 +50 47 45 42 40 38 36 +22 24 26 27 29 +21 23 25 26 27 28 30 33 +49 52 54 55 57 58 59 +32 34 36 37 38 41 44 45 +64 61 60 59 56 +94 92 91 89 86 +73 74 75 77 78 80 +11 12 13 15 16 17 19 +53 56 58 61 64 65 68 +88 86 84 81 78 76 +67 68 70 73 76 77 +71 73 75 77 78 79 81 82 +27 28 30 33 34 36 39 41 +76 74 73 72 69 66 63 60 +5 6 7 9 11 13 16 +68 65 63 62 59 58 57 +16 18 20 21 24 27 +5 7 9 10 11 12 +8 11 12 15 17 +37 39 40 41 44 45 +70 69 67 65 63 60 58 +44 45 46 48 49 52 +85 82 79 77 75 73 71 +43 44 46 47 49 51 +67 64 61 60 59 +73 70 67 65 63 61 +35 38 40 43 45 47 50 +30 29 28 25 23 21 20 +6 7 9 10 11 12 15 +64 65 68 70 72 75 78 81 +87 84 83 81 80 +49 47 45 44 42 41 39 +61 58 56 53 50 47 45 +11 13 14 16 19 21 24 +4 6 8 11 14 16 17 20 +89 86 84 83 82 79 78 75 +45 48 49 50 52 53 55 +82 79 76 75 73 72 +28 30 33 34 37 40 +23 25 28 31 32 33 34 35 +46 49 52 53 54 57 +42 45 48 49 52 54 +76 73 70 68 66 64 61 +82 81 78 76 73 70 +58 60 62 63 65 66 +67 66 65 64 63 62 60 +86 87 90 92 94 95 97 +34 32 29 28 27 24 +91 88 85 84 83 82 +88 87 84 83 82 79 +95 94 91 89 88 85 84 81 +86 88 89 91 92 93 +73 72 71 69 66 64 61 +39 38 37 36 35 34 32 31 +91 89 88 87 86 85 83 +16 14 12 11 10 +36 38 39 40 43 45 +38 41 44 47 50 52 54 +88 86 85 82 80 78 75 +58 61 63 66 67 69 72 +74 73 72 70 69 66 63 62 +37 39 41 44 47 48 +74 73 71 70 67 65 63 61 +39 37 36 35 33 31 +67 69 70 73 74 76 78 +83 81 78 76 74 +63 64 67 70 71 74 76 +49 50 52 55 57 60 +49 50 51 53 54 55 58 +49 52 53 56 59 60 63 65 +93 91 89 87 86 83 80 77 +75 74 71 69 68 65 +51 53 56 57 58 59 60 +43 44 47 48 50 53 55 +73 71 70 69 68 66 63 60 +56 57 59 61 63 66 +95 94 93 91 88 87 85 +88 87 84 82 81 +43 46 47 49 50 51 52 +65 67 70 71 74 77 79 +76 73 71 68 66 64 +11 12 15 16 19 22 24 27 +31 28 27 25 24 21 +24 25 26 28 31 +65 62 59 57 55 54 +19 16 14 13 11 +73 70 67 66 65 62 +96 95 94 91 90 87 86 83 +48 49 52 55 58 59 61 +89 87 85 84 82 +88 87 85 82 81 80 79 77 +58 55 54 52 51 50 47 +44 46 49 51 53 +39 37 35 32 31 30 28 26 +71 70 68 66 63 61 +95 93 92 89 86 84 81 +83 80 78 77 76 73 +12 14 15 16 19 21 +72 74 75 78 79 82 +97 94 93 90 89 +30 32 34 35 36 37 40 +63 61 59 57 56 55 54 53 +32 33 34 35 36 37 40 +20 17 14 12 9 8 5 4 +12 14 17 18 20 +46 48 49 52 53 54 56 57 +73 72 69 67 65 +91 88 85 82 79 78 75 74 +42 41 40 38 36 35 32 +22 19 17 14 13 10 7 6 +90 89 87 86 85 84 +78 77 76 73 71 68 +88 89 92 95 97 98 +36 37 38 40 43 44 +33 30 28 26 23 +59 58 57 54 51 +70 69 66 63 61 59 56 55 +23 26 27 28 29 32 35 38 +17 16 14 12 9 8 7 6 +79 80 83 85 87 89 90 +96 94 91 89 86 83 80 +67 65 62 59 58 56 54 +57 56 55 54 52 +70 72 74 75 78 +68 65 63 61 59 +62 59 56 53 52 49 48 +48 49 50 52 54 +15 14 12 11 10 7 +57 55 52 49 46 43 41 40 +29 28 26 23 21 20 +32 35 36 39 40 41 +75 72 69 68 66 65 64 +9 8 6 4 2 +49 50 52 54 57 59 +32 34 37 40 42 43 46 +42 43 46 47 50 53 55 58 +49 50 51 52 55 56 +44 47 50 51 52 53 54 +9 11 13 16 18 21 24 25 +67 70 71 74 76 78 81 84 +29 32 33 35 38 39 42 +73 71 69 68 66 64 62 +43 40 38 35 34 33 31 +82 79 78 77 74 71 +91 90 88 87 85 84 81 +20 21 22 23 25 27 28 +80 81 82 85 87 90 91 92 +25 26 28 30 33 34 36 39 +39 40 43 46 48 50 53 +18 16 13 10 9 6 +49 46 45 42 39 36 34 +2 4 7 9 12 13 15 +84 82 81 80 79 +10 11 14 15 17 20 +30 31 34 36 39 42 +24 25 26 29 32 +52 50 47 44 43 41 39 +36 38 39 42 45 46 48 50 +33 32 29 28 26 25 +30 33 34 37 38 +68 65 64 61 58 57 +10 7 6 4 2 +26 28 29 32 35 37 39 +4 5 8 11 14 16 19 20 +26 25 24 23 22 21 20 19 +37 38 39 40 42 45 46 47 +1 4 7 8 9 11 +38 36 34 33 32 +96 95 94 91 89 86 84 83 +19 16 13 12 9 6 4 2 +62 64 66 69 72 +53 51 50 48 47 46 +69 67 65 64 63 +46 44 41 39 38 37 +61 63 66 68 71 73 +10 12 13 15 16 19 20 21 +23 25 28 29 31 +30 27 25 23 22 19 16 14 +1 2 4 5 6 7 9 +96 94 92 89 86 +84 85 87 90 93 96 98 +40 38 36 33 30 29 26 +30 33 35 38 41 +73 72 69 66 65 62 +79 77 76 75 74 71 +59 56 53 50 47 45 +43 46 47 48 49 +85 84 83 80 79 78 77 74 +71 72 74 77 79 81 84 85 +88 87 85 84 81 79 77 +59 57 55 52 51 49 48 +37 40 41 43 44 45 +6 9 10 11 12 14 16 19 +95 93 90 87 86 85 83 80 +32 31 28 25 23 20 19 17 \ No newline at end of file diff --git a/2024/02/solution.py b/2024/02/solution.py new file mode 100644 index 0000000..b2d9b7e --- /dev/null +++ b/2024/02/solution.py @@ -0,0 +1,81 @@ +file = open("input.txt", "r").read() +lines = file.split("\n") +reports = [] +for line in lines: + nums = line.split(" ") + nums = [int(num) for num in nums] + reports.append(nums) + +total_safe = 0 +safe_nums = [1, 2, 3] + +for report in reports: + dists = [report[i+1] - report[i] for i in range(len(report)) if i != len(report) - 1] + # dists is either all positive or all negative (checks all increasing or all decreasing) + if all([dist > 0 for dist in dists]) or all([dist < 0 for dist in dists]): + dists = [abs(dist) for dist in dists] + if all([dist in safe_nums for dist in dists]): + total_safe += 1 + +print("Total safe reports: ", total_safe) + +total_safe_tolerance = 0 +for report in reports: + print("Checking report: ", report) + dists = [report[i+1] - report[i] for i in range(len(report)) if i != len(report) - 1] + for i in range(len(dists)): + if abs(dists[i]) not in safe_nums: + report_copy = report.copy() + report_copy.pop(i+1) + dists_copy = [report_copy[i+1] - report_copy[i] for i in range(len(report_copy)) if i != len(report_copy) - 1] + if all([dist > 0 for dist in dists_copy]) or all([dist < 0 for dist in dists_copy]): + dists_copy = [abs(dist) for dist in dists_copy] + if all([dist in safe_nums for dist in dists_copy]): + print("Popping (dist): ", report[i+1]) + report.pop(i+1) + else: + print("Popping (dist): ", report[i]) + report.pop(i) + break + else: + # make a list comprehension that makes the list a 0 if its negative and a 1 if its positive and then if the sum is 1 or len(dists) - 1 then its safe + lst = [0 if dist < 0 else 1 for dist in dists] + if sum(lst) == 1: # Only one positive + for i in range(len(report)): + if dists[i] > 0: + report_copy = report.copy() + report_copy.pop(i+1) + dists_copy = [report_copy[i+1] - report_copy[i] for i in range(len(report_copy)) if i != len(report_copy) - 1] + if all([dist > 0 for dist in dists_copy]) or all([dist < 0 for dist in dists_copy]): + dists_copy = [abs(dist) for dist in dists_copy] + if all([dist in safe_nums for dist in dists_copy]): + print("Popping (asce): ", report[i+1]) + report.pop(i+1) + else: + print("Popping (asce): ", report[i]) + report.pop(i) + break + elif sum(lst) == len(dists) - 1: # Only one negative + for i in range(len(report)): + if dists[i] < 0: + report_copy = report.copy() + report_copy.pop(i+1) + dists_copy = [report_copy[i+1] - report_copy[i] for i in range(len(report_copy)) if i != len(report_copy) - 1] + if all([dist > 0 for dist in dists_copy]) or all([dist < 0 for dist in dists_copy]): + dists_copy = [abs(dist) for dist in dists_copy] + if all([dist in safe_nums for dist in dists_copy]): + print("Popping (desc): ", report[i+1]) + report.pop(i+1) + else: + print("Popping (desc): ", report[i]) + report.pop(i) + break + dists = [report[i+1] - report[i] for i in range(len(report)) if i != len(report) - 1] + # dists is either all positive or all negative (checks all increasing or all decreasing) + if all([dist > 0 for dist in dists]) or all([dist < 0 for dist in dists]): + dists = [abs(dist) for dist in dists] + if all([dist in safe_nums for dist in dists]): + print("Safe report: ", report) + total_safe_tolerance += 1 + +print("Total safe reports with tolerance: ", total_safe_tolerance) \ No newline at end of file diff --git a/2024/02/test.txt b/2024/02/test.txt new file mode 100644 index 0000000..772a9d5 --- /dev/null +++ b/2024/02/test.txt @@ -0,0 +1,22 @@ +48 46 47 49 51 54 56 +1 1 2 3 4 5 +1 2 3 4 5 5 +5 1 2 3 4 5 +1 4 3 2 1 +1 6 7 8 9 +1 2 3 4 3 +9 8 7 6 7 +7 10 8 10 11 +29 28 27 25 26 25 22 20 +90 89 86 84 83 79 +97 96 93 91 85 +29 26 24 25 21 +36 37 40 43 47 +43 44 47 48 49 54 +35 33 31 29 27 25 22 18 +77 76 73 70 64 +68 65 69 72 74 77 80 83 +37 40 42 43 44 47 51 +70 73 76 79 86 +7 10 8 10 11 +29 28 27 25 26 25 22 20 \ No newline at end of file