From 1816f5cca9cf0d094bb1b3aedf57e0d339f0f79d Mon Sep 17 00:00:00 2001 From: Peter Hudec Date: Tue, 3 Dec 2024 06:43:43 +0100 Subject: [PATCH] first commit --- .gitignore | 4 + 01/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++ 01/input_sample.txt | 6 + 01/solve_part1.py | 32 ++ 01/solve_part2.py | 27 ++ 02/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++ 02/input_sample.txt | 6 + 02/solve_part1.py | 30 ++ 02/solve_part2.py | 40 ++ 03/input.txt | 6 + 03/input_sample1.txt | 1 + 03/input_sample2.txt | 1 + 03/solve_part1.py | 32 ++ 03/solve_part2.py | 44 ++ README.md | 4 + 15 files changed, 2233 insertions(+) create mode 100644 .gitignore create mode 100644 01/input.txt create mode 100644 01/input_sample.txt create mode 100755 01/solve_part1.py create mode 100755 01/solve_part2.py create mode 100644 02/input.txt create mode 100644 02/input_sample.txt create mode 100755 02/solve_part1.py create mode 100755 02/solve_part2.py create mode 100644 03/input.txt create mode 100644 03/input_sample1.txt create mode 100644 03/input_sample2.txt create mode 100755 03/solve_part1.py create mode 100644 03/solve_part2.py create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..045f6c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +*.py[cod] + +/env/ diff --git a/01/input.txt b/01/input.txt new file mode 100644 index 0000000..86c469c --- /dev/null +++ b/01/input.txt @@ -0,0 +1,1000 @@ +53906 14872 +35867 86182 +61313 43656 +23620 85315 +96434 90834 +70853 80045 +81024 46279 +74096 30947 +95143 21374 +58372 72621 +31935 12389 +49854 67579 +86609 43656 +89364 63407 +74266 14457 +52098 88395 +96964 96234 +49393 18203 +50534 68865 +15769 46056 +80451 31396 +74551 38740 +91700 86211 +93090 21692 +17501 34796 +16736 15045 +46056 37224 +75968 93912 +97701 75324 +28685 71207 +51195 28531 +74109 81902 +61906 30947 +61901 26456 +27949 31935 +80781 31935 +45869 63848 +76250 91948 +92161 88896 +92901 95050 +84135 56554 +36445 85108 +91602 50652 +14229 42099 +26675 53544 +31839 80370 +79535 80370 +36655 21828 +68093 10740 +49052 30403 +38777 87413 +10824 94461 +38968 80370 +63083 81902 +95411 55634 +69727 81902 +93596 70536 +52663 31396 +65999 68564 +59890 40680 +66226 43656 +94707 13595 +13899 79022 +25283 66901 +79946 33564 +80152 25915 +78359 38273 +28675 78207 +51401 24017 +21022 36263 +96272 97201 +22693 27307 +21648 97487 +46178 97979 +17466 60051 +82661 25915 +39775 93045 +48681 60562 +47199 86686 +30660 85874 +18285 69937 +55428 50228 +98906 13151 +86638 57318 +48728 66727 +78268 80222 +32191 18625 +75544 96995 +38692 27814 +51182 72597 +24564 14872 +78193 43656 +14830 98087 +51013 91047 +40389 62018 +80648 34735 +25915 48415 +75278 30947 +73740 76891 +47851 63741 +30743 93960 +30074 81716 +47127 31935 +66658 14609 +81404 13612 +78838 34796 +98988 56858 +61023 95843 +44069 79751 +58419 22373 +88253 33943 +10357 68564 +65647 75968 +56636 49814 +96378 30947 +61167 62569 +34557 37250 +64400 55670 +51614 31935 +12364 73721 +71834 63350 +11214 15293 +84197 67580 +46279 19369 +85435 25099 +87320 40454 +28341 16142 +65983 71345 +94333 79356 +66873 33981 +50771 31396 +91221 54646 +63742 34796 +99770 46279 +37731 80045 +20432 21157 +39263 76136 +99080 56687 +29242 32173 +93843 46279 +53850 18085 +68835 75005 +43354 40124 +48317 29974 +89326 97201 +75434 22373 +70473 25915 +63394 48255 +38016 68564 +78812 80045 +93261 58244 +20014 64971 +11924 11780 +21157 53840 +24802 89474 +55997 38754 +87219 25915 +20988 14872 +39639 28428 +29464 51586 +61672 78802 +96734 65594 +55764 14925 +52658 49815 +66306 81902 +19417 81326 +20305 17693 +33337 15419 +58435 11780 +88271 55426 +72760 70448 +62171 41784 +35420 75968 +85791 80045 +86874 28578 +47942 65464 +65982 43656 +54647 80045 +76794 72117 +71733 56858 +99560 97201 +57741 48255 +19684 38234 +82201 34796 +56598 81902 +78671 30403 +57520 81902 +28794 80045 +70718 36673 +12894 89585 +80420 88896 +75179 80045 +37527 94333 +68865 89708 +54484 70184 +22482 90992 +28787 99580 +23380 50228 +24819 34018 +23039 26417 +34777 30403 +38089 98258 +40091 90301 +65391 81902 +64984 88288 +47803 19170 +54239 23050 +89439 35940 +64104 15601 +42956 50228 +60123 42357 +62887 87025 +50719 56858 +60551 40959 +32730 73652 +80253 80045 +31948 19369 +33170 19369 +43380 88896 +66465 54668 +68963 25915 +74433 40124 +42272 11349 +45882 51505 +62636 26196 +97266 11220 +23083 96587 +27358 76569 +44481 81623 +11314 30728 +64712 57329 +95360 81902 +43100 83387 +22699 72297 +95680 57279 +12170 30947 +51297 59853 +48255 49975 +23355 34796 +55264 96834 +43234 95736 +58663 66937 +24467 93318 +31569 39898 +91720 37056 +17395 97253 +87456 68460 +61344 13591 +50316 50228 +50313 82900 +33328 41831 +70391 98955 +40124 13612 +80337 21838 +66151 17628 +14932 57871 +34464 48255 +18164 70338 +84969 14872 +30898 68564 +76526 11873 +41007 43656 +46997 52069 +74614 79205 +97267 80045 +13525 56858 +83587 23900 +70678 51307 +96613 20308 +39592 31396 +44365 91747 +44840 87970 +99891 90134 +58567 33972 +58851 43402 +87728 30403 +84786 37227 +13329 32507 +93229 90123 +43915 54511 +83982 27814 +19567 88896 +33979 87294 +40170 43656 +97852 48739 +45928 94736 +74935 28466 +97730 84011 +74826 95244 +68208 24359 +53130 92198 +41725 78978 +57089 11780 +98073 35872 +23652 11780 +97201 41849 +87155 71818 +88640 79810 +37745 21157 +14056 18175 +95658 56858 +48755 94333 +13619 45286 +81792 43656 +78244 31396 +30595 45955 +84035 95996 +60013 20192 +30544 13612 +94649 59748 +12343 75968 +37130 68564 +89486 25915 +30879 45350 +82252 76332 +72035 81326 +96757 39307 +12935 22093 +76836 96648 +13035 65492 +64394 56858 +68916 43656 +81474 31396 +90650 28126 +56290 94702 +35758 56672 +58825 41199 +55904 89015 +39969 10888 +45804 80699 +39063 33732 +71312 14949 +98164 36727 +83970 87031 +63860 15740 +19008 80045 +36342 59349 +75519 71974 +70509 49833 +15393 80714 +98995 85760 +80265 80370 +95001 42793 +28863 71880 +65186 59896 +91417 37319 +18213 74991 +46598 73652 +17350 56836 +77732 24742 +43239 96665 +91884 73652 +98023 17915 +30603 81326 +50132 72240 +14657 26301 +89888 46056 +29239 11140 +33269 80370 +86498 43609 +32323 18944 +87234 14483 +91312 84354 +55972 28052 +95671 44209 +47556 94712 +64231 92523 +40010 52869 +78889 65874 +65672 11780 +66829 27274 +58976 23077 +52684 99212 +12106 78809 +40894 79813 +73516 30403 +98758 90245 +78558 81135 +91842 43656 +36111 56858 +81902 57457 +57016 15315 +62322 31642 +12386 91620 +46583 57818 +16653 33234 +90664 13612 +99386 20422 +53504 20328 +88729 68564 +33262 89807 +22996 31396 +49944 21157 +71217 57474 +89409 93464 +81592 54135 +98029 75431 +54437 89337 +73652 85178 +44888 25915 +16495 94354 +20340 30974 +69933 86157 +23100 19122 +27337 71603 +81726 94579 +36381 80370 +13641 39385 +93685 32550 +73502 76018 +95815 49303 +26455 31396 +89509 94333 +43369 60492 +78840 66925 +84665 19369 +27145 30682 +20548 34796 +51087 84227 +24544 89081 +72048 57058 +70432 19369 +66825 40124 +30189 35430 +87176 89952 +69550 68440 +52304 27404 +22031 76800 +41939 80370 +30725 67957 +71537 22373 +53526 66477 +65213 20836 +51028 68564 +87427 46945 +18856 88896 +12027 68564 +28641 39589 +49464 72751 +15977 74910 +58898 75990 +39039 62184 +67691 57314 +60850 49736 +13012 48255 +84069 97201 +32568 68865 +96125 34796 +25181 74948 +73744 43656 +56977 21157 +80745 22716 +68012 34796 +47755 48255 +78533 29915 +23621 68865 +11353 43088 +84311 18978 +88935 20794 +54337 87927 +62396 46248 +83685 15158 +13519 40474 +89345 94333 +91712 56672 +54787 22373 +41442 19369 +57095 49689 +73305 68074 +40222 34796 +18020 22841 +62794 75878 +26368 14901 +11475 40124 +75682 74145 +75582 80370 +97642 80045 +43518 31396 +61262 14872 +65073 35575 +64250 41578 +41393 43656 +43735 59876 +52143 68865 +20553 52835 +88338 81503 +92669 68564 +97752 18898 +30830 94320 +13583 13612 +34097 54600 +95952 66295 +20902 68564 +35750 86876 +79359 57300 +19583 43538 +77422 21157 +63966 88896 +25403 57385 +71523 94333 +93579 11780 +35074 68865 +75840 48255 +44626 47096 +72438 60433 +54577 68564 +66690 56858 +41197 40124 +13612 30497 +25465 86662 +55920 78165 +89969 67123 +58286 70389 +43656 97260 +82249 43755 +30657 96171 +39157 31396 +18894 32478 +11955 10307 +43927 43656 +16920 50228 +29478 94333 +77022 17632 +33574 30653 +52142 59421 +43400 58568 +20918 21157 +59754 48255 +54975 74539 +45684 99214 +70895 33500 +68461 80541 +96575 26109 +39266 97201 +85211 31396 +62831 13612 +58008 89741 +52256 30403 +67407 31396 +11485 36725 +73476 43656 +28411 20566 +58997 24742 +50228 94333 +22731 49787 +60317 31396 +50387 56858 +47125 76520 +32596 40699 +86041 60374 +17153 93396 +47001 97796 +95064 33317 +60020 31715 +97079 13537 +95911 97201 +42771 30403 +31218 94333 +58019 68797 +27090 34796 +42716 89943 +13624 67333 +14872 41803 +15763 99088 +59386 71716 +29342 81287 +85955 37265 +92842 20523 +84757 75968 +76051 41922 +27595 46689 +74249 81347 +76224 97201 +46211 43561 +16434 31396 +95096 74640 +65042 56672 +89918 56858 +57601 94333 +45468 11780 +38812 25915 +51266 55991 +90185 75968 +75344 13612 +68758 50890 +54439 97201 +49138 21157 +72447 14872 +24656 40124 +94875 22613 +22373 43361 +44518 10761 +43686 60879 +32501 92097 +42849 13612 +96366 97201 +97664 18585 +75951 45638 +87742 55727 +26127 90094 +49148 29249 +44880 27199 +48351 34429 +49769 19369 +53310 31313 +97615 97700 +44217 70925 +35613 84873 +37774 33414 +37902 67163 +20513 31396 +22058 11456 +69695 43656 +12676 43656 +78546 44430 +93366 88781 +43779 79593 +42156 94062 +26825 30947 +61551 58309 +79992 80045 +70690 92191 +60303 33345 +47232 40844 +27958 75524 +65137 43403 +81422 88896 +90350 36543 +82498 21157 +34184 84567 +49629 78699 +52046 74192 +68564 51586 +74624 88896 +84055 35652 +78176 24112 +19369 81326 +29606 25074 +56381 25915 +41549 94333 +98646 77958 +10620 49796 +71804 80045 +70094 21157 +22047 43771 +26955 75968 +20916 46087 +70578 37746 +31396 85745 +38677 76047 +51586 80370 +33206 98673 +40909 76255 +86670 80370 +71335 29711 +90443 51586 +76017 23086 +64608 80370 +46749 24742 +89544 43543 +41857 46279 +42787 58205 +73907 67100 +62371 14872 +24918 98011 +51056 79598 +39721 34796 +67175 25915 +30403 36271 +64135 11780 +76994 78902 +66535 15092 +59032 94333 +75831 31184 +30096 11447 +23350 36783 +59712 31994 +38953 28778 +60226 50228 +82255 72338 +36348 68865 +76999 31396 +10164 31710 +15946 18029 +77511 30248 +95601 35450 +18152 49627 +32771 25915 +20404 31396 +61545 46279 +34285 87463 +84576 40124 +51878 51586 +88769 21515 +63200 81326 +68855 28497 +65595 53032 +48751 33285 +60205 88896 +96460 11367 +89979 80045 +11820 22373 +83877 11780 +20276 40124 +19438 81902 +94604 22373 +14247 67536 +89516 18681 +44165 80045 +58766 24742 +11456 26306 +11021 89613 +55218 59490 +74173 22743 +46876 80459 +63558 31935 +64004 24611 +72949 68564 +57103 62092 +95565 68564 +16875 38769 +81532 62587 +15150 22210 +74559 88896 +62813 61861 +29326 13612 +81512 68564 +49315 98827 +76486 25915 +42556 26135 +72818 52964 +24550 43656 +64689 70406 +73254 19265 +93699 68564 +53060 87046 +93009 81902 +39670 67615 +61036 67631 +45671 40413 +41312 80045 +49132 81902 +38018 91922 +71072 75073 +22869 27664 +55057 27814 +24941 27959 +84686 71679 +28947 74369 +25665 57496 +78778 23305 +14626 64462 +37342 43855 +59900 22416 +43285 98392 +92065 90613 +20557 68564 +45377 56858 +14449 55097 +97504 57790 +53508 80370 +39463 40124 +40767 68564 +64115 84078 +57015 38612 +10790 11780 +39059 48255 +97687 23054 +80185 40124 +42697 21344 +84512 30568 +88890 60974 +26625 25773 +23057 60654 +86691 40392 +19977 27723 +20885 35230 +82396 92827 +95747 20497 +70767 19369 +36646 58544 +55189 97285 +88283 66161 +61823 88896 +81975 98911 +96120 58310 +27584 13612 +29777 93381 +83851 81326 +68499 14896 +71570 80045 +83910 33934 +72510 19369 +29704 53243 +58042 94333 +10666 66744 +25477 38332 +46516 71338 +11780 81760 +60016 44454 +76061 88896 +45171 42137 +16022 31396 +43064 80370 +74174 94333 +75767 10987 +94834 41861 +43884 25498 +73079 82486 +49817 93178 +84945 88121 +37442 68004 +75204 52912 +88344 57580 +78701 55148 +79748 40124 +74272 34796 +32505 73879 +74004 40075 +97970 88796 +43969 81902 +34338 27951 +56706 51586 +70683 13612 +51351 41678 +15913 56236 +34587 11780 +27138 92114 +81477 85239 +37366 34453 +15828 68865 +29715 56858 +97538 80370 +16406 55594 +68956 18077 +21846 88896 +76758 36425 +59057 25915 +43840 82650 +67201 41066 +49427 70257 +41187 14872 +36754 24495 +23374 47449 +39822 68865 +66021 70536 +42652 43243 +24842 88896 +24280 24742 +88867 28631 +89241 86694 +23591 62627 +59260 48813 +50605 28489 +24330 84536 +25882 80024 +35776 62926 +54141 50228 +75680 40124 +84399 31530 +78265 80370 +87750 13922 +36091 75968 +27814 53359 +63430 34796 +63140 85215 +81319 68564 +89693 56300 +44939 86165 +78937 88896 +34287 57052 +60288 22373 +39738 97201 +66981 15143 +93466 85978 +43980 23335 +50378 24498 +65798 80045 +33048 70536 +74858 51594 +41614 26882 +78108 87082 +95851 39538 +55294 27347 +91809 51930 +18352 94333 +92466 41921 +20367 84778 +94765 21872 +70536 59326 +83561 73432 +80370 31935 +70474 44396 +96303 44391 +12398 89041 +23108 25947 +53083 21157 +99161 24742 +85566 15007 +32257 68564 +46065 50230 +63630 14872 +42636 97201 +94467 24904 +62773 20111 +56672 21157 +25886 30403 +13184 92058 +24742 94333 +69268 31396 +22434 77346 +12984 76178 +27117 43656 +10754 57124 +24873 75979 +39306 25915 +68234 84487 +17427 40124 +97952 20994 +33373 94333 +76327 14493 +45608 30947 +48367 22373 +54606 71965 +24726 25915 +10736 35060 +13367 53242 +95178 56815 +27296 56858 +68391 64705 +98563 38903 +20841 80370 +20931 11515 +60534 73652 +44041 90593 +39264 69166 +12510 77382 +65091 14872 +73605 78383 +43630 50005 +80045 78823 +17857 66318 +71065 13612 +67686 73652 +40016 11780 +96408 29692 +34507 81902 +10576 22373 +62967 92940 +68474 80370 +67663 49384 +27217 70536 +45444 94221 +16316 80370 +53563 68564 +76310 56858 +56858 69426 +96287 30104 +80543 29117 +82061 84323 +44833 20029 +58023 41150 +93209 56858 +19697 60022 +53393 23230 +97156 56858 +13069 63002 +72142 31122 +57137 49844 +48483 38592 +72970 69357 +93043 25915 +56792 15463 +73491 80370 +95205 30947 +84502 92854 +50655 31935 +81326 86245 +30947 21547 +81476 73108 +54995 86542 +88684 80659 +16695 77477 +67522 17661 +14444 24717 +48169 93182 +77304 62773 +10022 22838 +85352 68865 +88896 34807 +80571 21157 +75090 87473 +45429 57148 +38945 91244 +70349 21157 +13113 56858 +34796 40124 +32195 49176 +28292 57181 +14969 84572 diff --git a/01/input_sample.txt b/01/input_sample.txt new file mode 100644 index 0000000..dfca0b1 --- /dev/null +++ b/01/input_sample.txt @@ -0,0 +1,6 @@ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 \ No newline at end of file diff --git a/01/solve_part1.py b/01/solve_part1.py new file mode 100755 index 0000000..26ca266 --- /dev/null +++ b/01/solve_part1.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python + +def main(args): + list1 = [] + list2 = [] + + with open(args.file) as f: + for line in f: + line = line.strip() + tmp = line.split(" ") + list1.append(int(tmp[0])) + list2.append(int(tmp[3])) + + list1.sort() + list2.sort() + + distance = 0 + + for i in range(len(list1)): + distance += abs(list1[i] - list2[i]) + + print(distance) + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser( + prog='AdventOfCode 2024, Day 01, part 1', + ) + parser.add_argument('-f', '--file', required=True) + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/01/solve_part2.py b/01/solve_part2.py new file mode 100755 index 0000000..4918b52 --- /dev/null +++ b/01/solve_part2.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +def main(args): + list1 = [] + list2 = [] + + with open("input.txt") as f: + for line in f: + line = line.strip() + tmp = line.split(" ") + list1.append(int(tmp[0])) + list2.append(int(tmp[3])) + similarity = 0 + for i in range(len(list1)): + tmp = [x for x in list2 if x == list1[i]] + similarity += (len(tmp) * list1[i]) + print(similarity) + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser( + prog='AdventOfCode 2024, Day 01, part 2', + ) + parser.add_argument('-f', '--file', required=True) + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..2fd095e --- /dev/null +++ b/02/input.txt @@ -0,0 +1,1000 @@ +66 67 68 71 72 69 +72 75 78 79 79 +38 40 41 42 44 47 48 52 +86 87 88 91 96 +30 33 34 36 39 36 38 40 +77 78 79 80 79 76 +84 87 89 86 87 87 +7 10 13 14 16 19 18 22 +22 25 28 26 28 29 32 38 +47 50 53 53 54 56 57 60 +67 69 71 73 73 72 +15 16 16 19 21 23 23 +87 88 90 92 92 96 +20 21 24 24 29 +18 20 22 24 28 29 31 33 +86 87 88 91 95 97 96 +13 16 19 22 26 26 +28 31 35 38 42 +35 37 41 44 49 +33 36 42 45 46 +78 81 82 85 90 87 +44 47 49 54 55 57 57 +50 52 53 58 62 +72 75 80 81 82 89 +12 10 12 14 15 16 19 22 +40 39 41 42 45 47 49 46 +23 21 24 27 29 30 30 +11 8 11 14 15 18 19 23 +21 19 22 23 26 27 34 +62 61 58 59 60 +52 50 53 52 50 +3 1 2 5 7 4 4 +68 65 68 67 68 72 +45 42 40 43 49 +5 4 7 9 11 11 14 17 +7 4 5 7 10 10 7 +64 62 64 64 66 67 67 +87 86 86 88 91 92 96 +64 62 62 63 64 65 68 73 +64 61 62 63 67 68 +12 9 13 15 13 +83 81 84 88 90 93 95 95 +6 3 5 9 10 12 16 +38 35 39 41 47 +62 60 63 70 71 74 +56 55 60 61 63 64 62 +44 43 44 45 47 53 53 +61 60 67 69 73 +73 70 73 74 77 82 84 89 +8 8 10 11 14 17 +55 55 56 57 59 56 +75 75 76 79 81 82 84 84 +72 72 75 78 80 84 +69 69 72 75 76 77 82 +49 49 51 49 51 +38 38 41 44 45 43 42 +15 15 17 16 16 +25 25 26 24 25 26 29 33 +18 18 20 22 21 22 29 +81 81 81 83 84 85 86 +86 86 86 89 92 89 +27 27 30 31 32 32 35 35 +33 33 33 34 37 40 42 46 +50 50 50 52 53 56 58 65 +65 65 66 70 73 +65 65 66 67 71 70 +8 8 9 12 14 18 18 +70 70 73 77 81 +65 65 66 68 69 73 79 +25 25 28 35 36 +41 41 48 51 53 56 55 +87 87 88 95 95 +70 70 75 76 79 81 83 87 +10 10 12 13 18 23 +69 73 75 77 78 81 83 86 +62 66 68 70 72 71 +81 85 88 89 92 92 +33 37 39 42 45 49 +49 53 56 57 58 60 67 +18 22 20 21 24 26 +80 84 87 90 88 85 +17 21 22 21 22 25 25 +29 33 35 34 38 +5 9 6 7 9 16 +19 23 26 29 29 32 +49 53 56 57 60 61 61 60 +63 67 69 71 71 73 76 76 +77 81 83 83 85 89 +23 27 27 30 36 +37 41 43 45 48 49 53 55 +23 27 31 32 35 32 +52 56 58 62 62 +15 19 23 26 30 +60 64 66 67 70 74 76 82 +61 65 66 72 74 76 +5 9 10 17 16 +36 40 41 47 50 53 53 +30 34 35 40 41 45 +28 32 35 37 43 46 51 +22 29 31 34 37 +30 36 37 39 38 +24 31 34 37 37 +4 11 13 16 19 23 +37 43 44 45 48 50 55 +34 40 37 38 40 42 44 +11 17 18 19 21 19 20 18 +53 59 61 59 61 62 64 64 +58 65 68 65 67 69 73 +79 86 89 88 89 92 94 99 +15 20 21 22 22 23 25 27 +28 33 36 36 38 37 +88 95 97 97 99 99 +34 39 41 44 45 48 48 52 +6 11 11 12 14 16 17 22 +59 65 69 72 73 76 +54 61 63 67 69 72 74 71 +22 29 30 32 34 37 41 41 +61 68 70 74 78 +28 33 37 39 40 47 +13 19 21 24 30 32 +69 76 78 80 82 84 89 86 +8 15 18 20 25 26 26 +67 74 77 82 86 +13 18 19 25 27 30 37 +67 64 62 60 57 55 53 55 +70 69 66 63 60 58 55 55 +48 45 43 42 41 37 +62 60 59 58 53 +15 14 13 12 14 13 10 8 +29 27 29 28 25 28 +71 69 66 64 65 62 62 +17 15 13 15 12 10 6 +97 96 97 95 94 92 86 +33 30 27 24 21 18 18 17 +24 21 20 19 16 16 14 15 +43 40 40 38 36 35 35 +59 58 55 52 52 49 45 +14 12 12 11 5 +94 91 89 87 83 82 79 +21 18 16 12 10 11 +69 66 64 62 58 55 55 +88 86 83 82 79 78 74 70 +56 54 50 47 40 +21 18 13 11 8 5 +31 28 26 25 23 20 14 17 +52 50 49 43 40 39 39 +37 34 31 25 23 19 +35 32 30 24 22 21 16 +65 68 65 63 61 60 58 55 +55 56 53 52 49 52 +9 12 11 9 8 5 5 +35 36 33 32 31 29 25 +62 65 62 59 56 55 50 +77 79 82 81 79 +65 68 67 65 68 69 +26 29 28 31 30 29 29 +93 95 94 95 91 +81 84 85 83 76 +34 37 37 34 31 29 28 25 +38 40 39 36 33 33 30 33 +54 57 54 51 48 48 48 +44 47 47 44 40 +88 91 91 89 84 +48 50 48 47 44 40 39 37 +86 89 85 84 82 79 76 77 +80 82 78 76 73 70 70 +87 89 86 82 79 77 73 +45 47 43 42 41 39 37 32 +39 40 35 33 32 31 +52 53 50 43 40 42 +36 38 37 36 31 29 29 +76 79 73 72 71 68 64 +87 88 86 85 78 76 73 68 +39 39 36 33 31 +36 36 35 33 31 29 30 +88 88 86 85 82 82 +9 9 6 5 1 +99 99 97 94 92 90 88 81 +62 62 59 60 57 56 +41 41 40 37 34 36 34 36 +90 90 88 85 88 85 83 83 +59 59 60 59 56 53 49 +89 89 92 89 87 82 +72 72 72 70 68 +20 20 18 18 20 +48 48 47 46 44 44 44 +26 26 24 22 22 18 +94 94 94 93 92 91 89 82 +25 25 24 20 17 16 15 +64 64 61 58 55 51 50 53 +85 85 81 80 79 76 76 +56 56 52 49 45 +91 91 90 86 80 +58 58 56 49 48 +86 86 79 78 76 74 77 +80 80 79 76 75 72 65 65 +36 36 29 28 27 26 25 21 +22 22 17 16 9 +18 14 11 9 6 +59 55 53 50 47 50 +43 39 38 35 34 32 30 30 +37 33 32 31 29 26 22 +46 42 39 37 35 34 27 +91 87 90 89 88 85 83 +53 49 48 49 48 46 48 +95 91 90 87 89 86 86 +25 21 19 17 18 17 13 +65 61 59 61 60 53 +58 54 54 53 52 50 +58 54 54 51 52 +37 33 33 32 29 29 +71 67 65 63 62 62 58 +62 58 56 55 55 53 51 46 +23 19 16 15 12 8 5 +76 72 68 67 70 +48 44 40 38 35 35 +87 83 81 77 75 74 70 +66 62 59 55 49 +20 16 13 8 6 4 1 +56 52 51 49 42 44 +31 27 22 20 19 18 18 +30 26 24 19 17 16 12 +30 26 23 20 15 14 12 5 +51 45 42 40 38 +34 29 27 24 25 +51 44 43 42 42 +33 26 24 22 18 +82 76 74 73 67 +61 54 55 52 51 50 +74 68 66 69 72 +14 7 8 7 7 +62 56 55 57 55 52 48 +50 45 42 44 37 +19 12 12 9 7 6 +39 34 34 31 29 30 +65 58 55 53 51 51 51 +84 79 77 75 75 71 +84 79 78 75 75 73 67 +43 37 36 32 31 28 25 23 +77 70 66 63 61 58 60 +48 43 39 37 37 +78 72 68 67 64 61 57 +25 18 14 12 5 +71 66 65 58 55 53 +90 84 82 81 76 75 74 77 +54 47 46 41 41 +41 35 33 28 24 +78 73 72 71 64 62 56 +10 11 12 13 15 16 14 +49 50 51 53 56 58 60 60 +20 21 22 25 27 30 34 +70 71 74 77 78 80 86 +44 45 48 45 46 48 50 53 +62 64 65 68 71 73 70 69 +73 75 76 79 82 81 81 +34 35 32 35 39 +75 76 78 80 78 80 85 +91 92 95 95 98 +22 25 25 26 27 29 31 28 +27 30 31 31 34 36 39 39 +55 56 56 58 62 +25 28 28 31 34 39 +57 60 63 64 68 70 72 73 +60 62 65 69 72 70 +46 47 48 52 54 54 +19 22 23 25 29 33 +83 84 86 90 91 93 98 +41 42 44 49 52 55 56 57 +16 19 21 24 27 34 37 36 +27 29 32 35 38 43 43 +30 31 33 40 43 47 +39 40 41 47 48 49 56 +83 81 83 85 86 89 91 +48 46 49 52 54 55 53 +73 71 73 74 75 78 78 +71 70 71 73 74 77 79 83 +39 36 38 41 42 44 45 52 +86 85 86 84 86 87 89 91 +44 42 45 48 46 45 +86 85 86 89 87 87 +4 1 2 1 5 +46 45 44 46 47 50 56 +89 86 86 89 90 91 +73 71 72 75 76 77 77 76 +24 22 23 23 25 27 27 +29 28 29 29 33 +69 66 69 69 71 73 76 83 +61 59 63 65 67 +67 66 70 71 69 +53 50 53 57 59 60 60 +72 70 72 76 80 +38 35 38 42 49 +50 48 51 58 61 +70 68 70 76 73 +61 60 61 67 69 69 +30 27 29 31 33 38 42 +4 1 2 5 8 14 16 23 +12 12 15 16 19 21 +37 37 39 40 38 +2 2 5 7 9 10 11 11 +3 3 6 7 11 +18 18 20 23 30 +70 70 72 73 70 73 75 +38 38 40 37 39 42 43 42 +71 71 74 73 73 +65 65 64 67 68 71 75 +35 35 36 37 36 43 +30 30 31 31 32 35 +93 93 95 95 96 94 +27 27 27 30 32 33 36 36 +36 36 36 38 40 44 +18 18 20 21 22 25 25 30 +62 62 64 68 70 73 +90 90 94 95 96 99 97 +44 44 48 49 51 51 +68 68 69 73 75 79 +60 60 64 66 72 +20 20 22 24 31 33 36 37 +34 34 37 43 45 43 +58 58 63 64 67 67 +54 54 60 61 64 67 71 +67 67 68 70 77 80 86 +75 79 81 84 87 89 +45 49 51 53 50 +5 9 12 15 17 19 19 +47 51 54 55 56 60 +76 80 81 83 86 89 90 97 +83 87 89 88 91 92 +29 33 31 34 31 +51 55 57 60 57 59 59 +35 39 40 39 40 44 +1 5 8 5 8 13 +74 78 79 79 80 +57 61 61 62 65 63 +4 8 8 10 10 +67 71 74 74 77 81 +42 46 47 50 50 55 +36 40 41 45 47 +53 57 60 64 67 64 +6 10 11 13 17 17 +78 82 84 88 90 94 +79 83 86 89 93 98 +34 38 45 46 49 52 +50 54 59 62 64 66 65 +58 62 69 71 72 72 +56 60 65 66 67 71 +22 26 28 30 32 37 38 44 +84 89 91 93 94 95 +58 63 64 67 65 +36 41 44 47 50 52 55 55 +62 67 68 69 73 +70 77 80 81 84 86 92 +68 73 74 71 72 75 78 81 +73 79 76 79 76 +53 58 55 56 57 58 59 59 +31 36 34 37 40 44 +37 43 41 43 50 +14 20 22 22 25 +70 75 77 80 80 81 84 83 +51 56 59 59 59 +2 8 9 12 12 14 16 20 +50 55 57 58 60 60 65 +58 63 64 66 70 72 +81 88 90 93 97 95 +26 33 37 39 41 41 +74 80 82 86 90 +26 33 37 38 44 +68 75 81 82 83 84 +13 18 19 21 26 27 29 27 +53 59 60 66 69 70 70 +17 22 29 30 33 35 38 42 +42 47 48 49 50 52 58 65 +84 83 81 79 76 78 +61 58 55 54 54 +77 75 73 70 67 63 +86 85 84 83 80 77 76 70 +44 41 42 39 38 37 35 +22 19 16 13 16 13 11 14 +86 85 84 87 86 86 +32 31 30 29 31 28 24 +18 15 12 9 7 9 7 1 +84 81 81 78 76 74 +11 10 7 6 6 4 3 5 +20 19 19 18 18 +16 13 13 10 6 +99 96 94 91 89 86 86 80 +27 24 23 22 21 17 16 +50 49 45 43 42 39 38 39 +85 83 79 78 75 75 +19 16 12 10 9 8 4 +28 27 23 21 16 +91 88 83 80 77 +17 16 14 9 11 +74 71 66 64 64 +40 38 33 30 28 24 +66 64 63 56 53 46 +33 34 33 32 31 28 27 +52 54 52 50 47 46 43 46 +60 63 61 59 57 54 54 +82 84 82 81 78 77 74 70 +36 39 37 35 28 +67 69 66 64 67 65 64 +45 46 45 48 51 +83 84 82 83 81 80 80 +33 36 38 36 32 +88 91 88 87 89 86 80 +43 44 42 39 39 38 37 +35 36 36 33 30 31 +3 4 4 2 2 +77 79 76 74 74 71 67 +89 92 92 90 88 87 85 79 +45 48 44 41 40 +33 36 33 30 28 27 23 25 +66 69 68 65 61 59 57 57 +88 89 88 84 80 +46 47 43 42 36 +97 98 96 94 89 88 87 84 +11 14 12 5 3 6 +80 83 82 81 74 74 +24 26 23 16 12 +63 64 57 54 48 +86 86 85 83 82 +24 24 21 20 21 +56 56 53 52 51 51 +60 60 58 55 54 50 +93 93 90 87 86 83 78 +13 13 16 13 12 11 8 7 +64 64 63 66 64 66 +50 50 49 51 51 +34 34 33 32 35 31 +82 82 79 77 80 78 73 +47 47 47 46 43 +95 95 95 94 96 +48 48 48 45 44 44 +18 18 18 16 14 10 +87 87 85 84 84 83 81 75 +72 72 68 67 66 63 +65 65 64 61 57 55 52 54 +91 91 90 86 86 +46 46 42 39 35 +53 53 51 50 47 44 40 33 +85 85 78 76 75 +70 70 68 63 61 62 +47 47 44 38 35 33 31 31 +79 79 78 72 68 +73 73 68 65 58 +75 71 69 68 65 +52 48 46 43 40 38 35 37 +21 17 15 12 12 +41 37 35 32 28 +88 84 83 81 78 72 +68 64 61 63 61 +18 14 15 12 13 +62 58 56 53 54 51 51 +24 20 18 19 15 +93 89 87 89 84 +41 37 35 34 34 33 32 +44 40 39 36 36 34 35 +22 18 16 16 16 +86 82 80 77 77 74 73 69 +34 30 29 28 27 26 26 19 +93 89 87 83 80 79 +59 55 54 51 47 46 45 47 +20 16 13 12 8 6 4 4 +27 23 20 17 15 14 10 6 +25 21 17 16 11 +98 94 88 87 84 +65 61 58 55 52 47 44 46 +32 28 26 20 20 +82 78 77 74 72 67 63 +55 51 49 47 45 44 37 32 +36 31 28 27 26 23 21 20 +90 85 83 80 77 76 74 76 +15 10 8 7 6 5 3 3 +57 51 49 46 45 44 42 38 +29 24 21 20 19 13 +82 76 74 72 71 72 69 66 +10 4 7 4 5 +37 32 34 32 29 28 26 26 +56 50 52 50 46 +53 46 49 47 46 45 43 38 +76 71 68 68 65 64 +88 81 81 79 77 74 76 +83 76 76 73 73 +66 59 59 58 54 +98 93 92 90 90 84 +27 22 18 17 14 11 +29 24 20 19 17 15 18 +81 76 74 71 67 65 62 62 +69 63 60 56 55 51 +86 81 77 74 67 +74 67 62 59 58 +66 60 55 54 56 +53 46 39 37 35 33 33 +29 23 20 14 10 +33 28 27 26 19 16 15 8 +60 61 56 55 51 +97 91 88 87 86 80 81 +74 73 68 67 64 60 +23 21 17 15 12 12 +47 53 55 56 59 60 63 65 +38 38 38 36 34 +69 62 59 57 54 +13 13 12 9 8 7 7 9 +32 34 34 37 39 41 42 43 +81 77 75 74 75 73 72 +2 3 5 7 12 14 11 +43 43 41 40 40 39 33 +27 25 27 28 32 +47 51 53 55 62 63 69 +29 32 34 33 30 26 +51 58 60 61 65 68 68 +66 69 68 69 71 73 73 +84 84 86 83 79 +59 60 56 53 51 +15 20 22 23 27 29 32 39 +4 11 12 10 11 13 +39 35 33 31 33 31 31 +29 30 32 33 35 35 +84 83 84 84 87 88 91 96 +20 15 14 11 12 +16 16 14 15 14 13 11 12 +49 43 41 37 38 +9 16 20 22 25 28 32 +18 18 19 21 25 26 +72 74 75 78 82 82 +19 23 28 31 35 +86 79 78 74 70 +14 14 17 14 15 18 22 +59 52 51 54 51 48 46 +1 1 2 5 7 12 11 +54 50 49 47 43 43 +81 85 86 87 88 89 87 90 +7 8 11 13 16 22 +4 10 7 8 12 +70 64 63 60 62 62 +6 6 9 14 16 18 21 28 +56 61 58 60 62 67 +44 37 35 31 28 26 21 +14 18 20 23 27 27 +44 44 42 39 37 37 35 31 +95 95 97 99 97 99 96 +62 64 61 61 58 55 +52 58 58 59 60 61 +30 28 30 33 33 36 +51 47 44 41 40 37 +81 78 76 73 75 72 +23 24 28 30 33 35 38 40 +12 10 7 5 4 4 5 +16 19 19 22 26 +79 80 83 82 83 86 88 +76 69 66 65 62 62 61 62 +14 13 7 5 4 7 +56 50 48 45 45 41 +62 64 65 69 73 +64 68 71 72 75 74 74 +43 47 51 54 56 59 63 +60 56 53 51 50 47 46 42 +75 78 77 77 75 75 +53 53 57 60 61 66 +82 85 84 82 80 82 79 74 +66 61 58 51 49 47 46 +35 39 39 40 42 44 48 +42 35 34 31 28 21 20 20 +94 87 85 86 83 79 +53 55 56 59 62 66 +10 9 13 14 12 +19 25 27 29 32 39 39 +79 77 80 82 85 82 79 +39 35 33 34 33 30 26 +64 71 73 76 83 85 84 +64 65 63 66 70 +73 74 81 84 85 85 +34 34 35 36 36 +63 69 70 72 75 81 84 88 +66 70 77 79 82 85 +80 81 79 75 68 +91 87 86 85 82 80 83 86 +50 50 56 59 62 +2 7 7 10 14 +61 62 66 67 68 70 71 70 +43 43 45 47 47 48 48 +29 27 24 18 16 9 +17 21 23 23 29 +84 77 75 74 73 70 63 +32 30 29 26 22 21 16 +25 18 15 17 14 12 9 3 +82 85 88 90 92 90 +21 18 21 18 21 +76 82 82 83 85 87 87 +52 50 47 42 41 +22 26 28 29 30 30 +17 17 18 18 20 22 +26 26 22 20 14 +34 32 37 38 40 43 45 46 +60 60 62 65 62 +20 17 20 21 24 27 34 34 +41 40 41 42 43 47 50 50 +56 49 45 42 42 +21 21 25 26 29 30 32 36 +48 44 44 43 40 38 +94 93 91 93 92 88 +70 73 70 69 64 63 +42 46 47 50 54 +25 26 24 22 19 17 19 +95 95 94 92 90 93 90 88 +23 22 24 23 27 +75 76 75 72 71 68 +74 73 71 70 69 66 59 59 +14 20 22 24 26 29 27 +15 18 22 23 24 29 +50 50 51 54 56 57 59 +41 39 39 41 43 44 47 51 +22 22 19 19 18 18 +63 63 66 68 69 70 74 +21 20 19 18 16 13 12 5 +72 69 66 66 65 61 +61 68 69 71 74 75 75 +81 75 74 73 72 66 60 +18 18 19 19 20 22 19 +78 74 72 69 65 64 61 62 +30 26 24 21 19 19 19 +76 76 78 79 80 78 78 +32 38 40 43 50 +63 56 56 54 54 +81 82 81 79 79 81 +85 85 86 86 87 88 94 +65 61 59 56 49 +1 5 8 10 8 10 9 +63 64 67 67 68 69 67 +44 44 45 49 49 +87 83 82 79 82 +54 59 60 63 64 67 70 74 +13 12 11 9 8 8 +30 32 31 30 24 21 16 +77 75 72 71 73 70 67 67 +86 86 91 93 93 +70 70 67 62 60 59 58 +44 50 51 57 59 60 62 +84 84 90 91 95 +42 46 47 50 53 58 58 +31 27 25 25 28 +1 1 4 1 1 +47 52 52 54 57 64 +38 36 38 37 37 +49 49 45 43 42 41 +20 19 26 28 33 +50 53 55 54 56 63 +19 26 30 33 35 34 +73 73 76 79 82 82 86 +40 36 33 32 35 29 +50 51 53 54 60 67 +68 72 74 77 79 81 81 84 +76 79 82 84 91 94 98 +8 6 7 9 11 11 +56 50 48 48 46 +14 17 14 14 10 +9 13 18 19 17 +57 58 55 55 52 50 49 43 +85 82 80 77 74 71 68 +80 81 82 84 86 88 +17 19 20 21 23 24 25 +85 83 81 80 78 +50 47 46 44 42 +71 69 66 65 63 62 +80 78 75 73 70 +28 29 32 33 34 36 +36 33 30 28 25 22 20 +66 68 70 71 74 75 +36 33 32 30 29 27 26 23 +67 66 64 62 61 59 58 55 +45 43 40 39 36 34 31 30 +25 23 20 19 16 15 14 +67 65 63 60 59 58 +3 6 9 10 12 15 17 20 +45 42 40 38 37 34 +67 69 72 74 77 80 81 84 +86 84 82 80 77 +13 11 10 7 6 4 2 +18 20 21 23 26 28 31 +79 80 83 85 88 89 92 95 +70 72 74 76 77 78 81 82 +43 45 48 51 52 +66 63 62 61 60 57 55 +15 12 11 8 5 +86 83 82 81 78 +75 78 81 82 85 +28 29 32 33 36 38 +72 75 78 80 81 83 86 88 +23 21 18 16 14 +98 96 94 93 90 +76 75 74 71 69 68 65 62 +66 65 64 61 60 57 54 53 +73 71 70 67 66 65 62 59 +41 44 45 48 50 53 +27 24 23 22 19 +17 14 13 12 10 9 6 5 +36 33 30 28 26 24 21 +94 92 89 88 85 +50 53 55 57 60 61 +62 65 66 69 70 73 +47 46 44 41 38 35 34 31 +48 51 53 54 55 56 59 +78 79 80 81 82 85 87 89 +51 54 56 58 61 64 65 +50 52 53 54 55 58 61 62 +76 75 74 71 69 66 64 +61 64 67 69 70 72 73 +75 74 72 71 70 67 +38 39 41 42 43 45 46 +76 79 81 84 85 86 89 91 +59 58 57 56 55 54 51 50 +88 85 84 82 81 80 79 76 +15 12 9 8 7 4 1 +37 36 34 33 31 30 29 +66 69 72 74 77 78 79 81 +54 51 49 46 44 +65 63 60 59 58 +31 33 34 36 39 40 +7 10 11 13 15 18 21 +17 19 21 23 24 27 29 30 +33 30 27 24 23 22 20 18 +47 46 45 44 42 39 36 35 +45 42 40 38 37 +31 33 34 37 40 41 42 44 +95 93 90 89 86 84 82 +53 50 49 47 45 43 41 39 +38 37 34 31 30 27 26 +48 50 52 53 54 +9 10 12 13 16 17 18 19 +75 77 80 83 85 +39 40 43 45 48 49 +89 90 92 94 95 98 99 +78 77 76 74 73 71 +32 35 36 38 39 42 +95 94 93 90 89 86 83 82 +63 62 59 57 54 52 49 46 +45 46 47 49 52 54 +86 85 84 83 80 77 +61 58 56 54 53 +42 40 38 35 32 30 +86 87 90 91 93 94 96 99 +45 48 51 53 56 +49 50 51 53 55 57 +16 15 13 10 8 7 6 +37 40 41 43 46 +83 82 79 76 75 +9 12 15 18 20 +31 30 29 27 24 22 +30 33 35 37 39 41 43 +25 22 20 19 16 15 13 12 +53 51 48 45 42 39 37 +30 29 27 26 25 23 20 18 +36 38 41 42 43 44 46 49 +22 21 18 15 14 11 9 +46 47 48 51 54 +39 41 44 45 47 49 51 +52 50 48 45 42 41 +38 39 42 45 48 50 53 56 +50 51 53 56 58 59 +86 85 83 80 78 76 75 73 +59 58 57 54 51 +22 24 25 27 29 30 32 35 +11 13 15 16 19 21 +36 33 31 29 28 27 25 22 +43 42 39 37 35 33 31 30 +69 67 66 64 61 +80 77 75 72 70 68 67 +55 57 60 63 66 68 +80 77 76 73 72 +19 17 15 14 13 +50 48 45 44 42 +6 7 10 13 14 +50 52 55 57 60 +67 64 62 60 59 56 54 52 +25 28 30 32 35 +80 77 76 73 72 70 69 +36 35 32 29 28 27 26 25 +64 62 61 60 57 54 +76 78 79 81 84 87 90 91 +69 71 72 75 78 +22 19 16 15 13 12 11 +95 92 91 88 86 84 81 +76 79 80 82 83 86 88 89 +25 26 28 29 30 32 +4 7 10 12 15 +70 71 74 77 78 81 +27 29 32 35 38 41 44 46 +73 72 69 66 64 +17 14 13 10 7 5 +47 44 42 40 37 36 +28 30 32 33 34 37 39 41 +86 88 89 90 93 +79 78 76 74 71 +44 46 47 48 51 53 54 +82 84 87 88 91 92 95 96 +24 22 21 18 16 14 +48 47 46 45 42 +73 76 77 80 81 +29 28 27 26 24 +59 56 54 52 49 47 +43 45 46 49 51 53 56 59 +25 24 23 21 18 16 13 12 +60 59 57 54 52 50 +23 20 18 15 14 12 +53 55 56 58 59 60 +86 89 92 94 96 +21 20 18 16 14 11 +61 63 66 68 70 71 73 +49 46 45 42 40 38 37 +9 11 14 16 19 20 +41 39 36 33 30 28 25 23 +52 54 55 56 57 58 59 62 +20 18 15 13 11 10 +62 60 57 56 53 52 50 49 +69 72 75 77 79 81 +80 81 84 87 90 92 93 +34 32 31 28 26 24 22 +21 20 18 15 14 11 9 6 +89 87 86 83 80 79 77 74 +29 32 33 34 35 37 38 +29 27 26 24 21 18 +38 41 42 45 46 49 50 +63 64 67 69 71 73 74 +40 42 45 48 49 +17 18 19 21 22 23 +5 6 9 10 13 15 17 +44 47 50 52 55 58 60 62 +28 25 24 21 18 16 15 +39 38 36 35 34 33 31 +78 76 75 74 73 70 +69 68 65 64 63 +80 82 83 85 88 91 94 96 +76 74 71 70 69 68 +81 84 86 88 89 +40 42 44 45 46 48 51 53 +50 51 52 54 55 57 +57 60 62 63 65 67 70 +46 45 42 39 37 36 +72 71 70 68 66 +37 40 42 45 47 +53 56 58 59 62 +87 85 84 82 79 77 75 72 +82 81 80 77 74 71 70 +28 30 31 32 33 +37 36 33 30 27 26 24 22 +60 59 58 56 54 +86 85 83 80 78 75 72 71 +20 21 22 25 27 +39 41 43 44 47 48 49 50 +33 32 29 27 26 23 20 18 +40 37 36 33 31 30 +23 25 28 30 32 35 +82 81 79 76 75 73 71 68 +79 77 76 75 73 72 70 69 +82 85 86 89 91 94 97 +87 88 90 91 93 +14 17 19 20 22 25 26 27 +82 79 76 75 72 70 68 +88 87 84 81 79 77 +15 13 12 10 9 8 7 +1 2 5 6 9 11 +20 18 15 14 12 11 9 6 +11 9 6 3 1 +66 65 63 60 57 54 +64 63 62 61 58 57 +79 77 75 74 72 +62 60 59 58 57 54 53 +17 16 13 10 8 +59 62 64 65 68 69 +82 80 79 77 74 72 +16 13 11 8 7 4 +17 14 12 9 7 4 +46 45 43 40 39 36 33 +85 86 87 89 92 94 96 99 +50 52 55 57 60 62 +64 65 67 68 70 73 76 79 +54 53 51 49 47 44 42 39 +29 30 31 34 35 36 38 +40 37 34 33 31 30 27 24 +68 70 71 74 76 77 78 +62 61 59 58 57 56 55 52 +4 5 8 9 12 13 +89 86 85 82 80 79 +5 8 9 10 13 14 17 +84 82 81 78 76 73 71 +84 86 87 90 93 96 97 +32 31 29 28 26 23 +17 19 21 23 26 29 31 +62 65 66 67 69 72 +43 45 47 48 50 52 55 +36 35 34 33 31 29 27 +18 15 14 13 11 +36 35 32 30 27 +13 16 17 19 20 21 23 +98 97 95 93 90 87 86 +95 93 91 90 88 85 82 +28 26 24 21 19 18 16 13 +61 58 57 54 53 51 49 47 +81 84 86 88 90 92 93 +45 46 49 50 51 +48 51 53 54 56 57 58 60 +73 70 69 68 66 64 +75 72 70 67 65 64 62 +50 48 45 42 41 38 37 36 +44 42 39 37 34 32 +46 45 44 42 40 +51 48 46 44 41 39 37 +19 18 16 15 12 11 +39 40 42 45 46 +76 77 78 81 82 83 86 87 +90 89 88 85 83 82 81 79 +72 74 76 78 79 80 +65 66 67 68 70 72 +49 51 54 56 59 62 63 +37 35 32 30 28 25 24 22 +90 87 86 84 82 +61 64 65 67 68 71 74 77 +1 3 4 7 10 +61 60 59 58 57 55 54 52 +6 8 9 11 13 14 17 19 +56 57 58 59 61 63 +58 60 63 66 67 +22 20 17 16 15 14 13 10 +66 63 62 60 57 56 55 53 +61 64 67 70 71 74 77 +88 86 84 82 80 78 77 75 +6 9 11 14 16 +75 76 79 82 83 85 86 +78 79 80 81 84 85 +14 11 8 5 2 1 +24 27 30 31 32 35 +85 84 83 80 77 +68 71 74 76 79 81 82 85 +21 19 17 16 14 11 9 +93 92 90 87 85 +80 78 76 75 72 69 +84 87 88 90 93 94 97 +54 53 50 49 48 45 +41 42 44 45 47 +24 26 29 32 35 38 39 41 +54 52 49 47 44 42 41 40 +39 42 43 44 45 48 50 +82 81 79 76 73 71 +70 67 65 64 63 61 +57 56 53 51 49 46 +74 76 79 81 83 85 87 90 +56 59 61 64 67 70 71 +31 29 28 27 24 23 +59 57 55 52 50 +82 85 88 91 94 95 97 +60 58 55 53 51 +57 58 60 63 65 68 +41 44 46 48 50 51 53 +44 46 47 50 53 +33 34 36 38 41 42 44 +18 20 22 23 26 28 29 +51 48 47 45 44 42 +23 21 19 17 14 12 +58 56 53 52 49 47 46 44 +98 96 95 94 91 +80 78 76 75 73 +58 61 63 64 66 +83 85 87 88 89 +23 21 19 17 15 14 12 9 +60 62 63 64 65 68 +42 41 38 37 36 33 +93 92 90 88 87 86 84 82 +31 32 34 36 39 42 +8 10 12 13 16 17 18 19 +14 17 18 20 23 24 +8 11 13 14 17 18 21 +69 68 66 63 61 58 55 +90 87 85 82 80 79 +38 35 32 30 28 +18 20 23 26 28 29 30 +17 16 13 10 8 7 5 +83 82 80 77 75 72 69 66 +87 88 89 92 94 +69 71 72 74 76 78 81 82 +49 46 43 40 37 34 33 +30 28 26 24 23 20 +44 43 40 39 37 34 33 31 +21 23 26 29 32 33 34 36 +61 59 58 56 54 52 50 48 +53 50 49 48 45 42 +63 66 68 71 73 76 +57 55 53 50 49 +54 57 60 62 65 +21 22 25 27 29 30 +12 14 15 18 20 21 22 23 +68 71 73 74 76 77 80 +15 13 12 9 6 5 2 +35 37 40 41 42 45 46 +56 55 53 52 50 +38 39 42 43 44 +48 46 45 43 42 +95 92 91 88 86 84 83 80 +48 51 52 55 58 +40 42 44 46 49 51 diff --git a/02/input_sample.txt b/02/input_sample.txt new file mode 100644 index 0000000..82cd679 --- /dev/null +++ b/02/input_sample.txt @@ -0,0 +1,6 @@ +7 6 4 2 1 +1 2 7 8 9 +9 7 6 2 1 +1 3 2 4 5 +8 6 4 4 1 +1 3 6 7 9 \ No newline at end of file diff --git a/02/solve_part1.py b/02/solve_part1.py new file mode 100755 index 0000000..8efc0e3 --- /dev/null +++ b/02/solve_part1.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +def read_input(filename): + with open(filename) as f: + for line in f: + line = line.strip() + yield line.split(" ") + +def main(args): + safe_count = 0 + for levels in read_input("input.txt"): + tmp = [ (int(levels[i-1]) - int(levels[i])) for i in range(1,len(levels))] + tmp2 = [ abs(x) for x in tmp] + if (abs(sum(tmp)) != sum(tmp2)): + continue + tmp3 = [x for x in tmp2 if x in [1,2,3]] + if len(tmp3) != len(tmp2): + continue + safe_count += 1 + print(safe_count) + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser( + prog='AdventOfCode 2024, Day 02, part 1', + ) + parser.add_argument('-f', '--file', required=True) + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/02/solve_part2.py b/02/solve_part2.py new file mode 100755 index 0000000..52d39c1 --- /dev/null +++ b/02/solve_part2.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +def read_input(filename): + with open(filename) as f: + for line in f: + line = line.strip() + yield line.split(" ") + +def is_safe(levels): + tmp = [ (int(levels[i-1]) - int(levels[i])) for i in range(1,len(levels))] + tmp2 = [ abs(x) for x in tmp] + if (abs(sum(tmp)) != sum(tmp2)): + return False + tmp3 = [x for x in tmp2 if x in [1,2,3]] + if len(tmp3) != len(tmp2): + return False + return True + +def main(args): + safe_count = 0 + for levels in read_input(args.file): + if (is_safe(levels)): + safe_count += 1 + continue + for i in range(len(levels)): + tmp2 = levels[:i] + levels[i+1 :] + if is_safe(tmp2): + safe_count += 1 + break + print(safe_count) + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser( + prog='AdventOfCode 2024, Day 02, part 2', + ) + parser.add_argument('-f', '--file', required=True) + args = parser.parse_args() + main(args) \ No newline at end of file diff --git a/03/input.txt b/03/input.txt new file mode 100644 index 0000000..c97cbdb --- /dev/null +++ b/03/input.txt @@ -0,0 +1,6 @@ +-:-]what()(+/mul(957,396)?mul(550,844)%+why())-? #}from()mul(488,628)%} ~**mul(770,931)$~mul(791,733)<{mul(985,350)<#why()don't()what()select()$what())]what()who()mul(327,185))<^^mul(542,68)#?who()when()do()from()mul(51,291)[where()!{]/}'@?mul(233,511)@what()]mul(311,967))&who()how()mul(839,578)^who()]}mul(266,735){mul(176,670)mul(154,710)*select()](':^,mul(531,801)# *why()why()mul(30,325)~,where();select()select()}-/when()mul(512,729)+where();[mul(720,339)[~*when()mul(722,867)!);{+mul(582,286)^:)what()@mul(604,485) (who()why()who()from()[mul(128,295)how()?!%~~[~}{[&;mul(548,186))(%];mul(841,290)when()where()'?mul(646,803)mul(553,782)how()when()-mul(569,604)@ ++:/%why()]select()mul(257,598)#mul(897,819)how()what()from()how()]when()~/!}mul(856,271)+&why(){}why()>who()mul(373,408)-who()^&%>';,when()mul(54,88)what()!mul(663,711)$#(?;^from()mul(898,810)when()from()%@mul(776,102)why()mul(303,842)!/,%<^;mul(840,791){[@mul(909,714)don't()>who()why()from(545,686)%~mul(483,956)^'why()from()where()$>*:mul(931,649) mul(800,313)):mul(31,69)mul(549,670)$;mul(327,976)@who()^mul(627,907)/[@what(925,706) ;^who()!mul(629,813)when(){$&where(){#mul(504,147)?mul(222,429)#who()*/!select()?$ mul(439,336)?from()*select()*}when()]who()mul(148,356)(who()+mul(271,905)mul(564,172)@?(~mul(628,470)#} mul(301,170)?@,^don't();&:^&how(605,264))(what()'mul(896,108),$mul(413,431):<>where();how()>!}when()do()!}/&:when()>mul(754,737)~:#:* mul(962,620)}mul(26,490)!~,mul(450,234){/]who() <;{mul(938,932)?--#%};}mul(140,314)(-}/,[mul(202,839)^why()-!},mul(459,716),mul(600,932)}when()]who()}who())&mul(752,142$mul(174,573)mul(231,182)from()mul(308,661)what()} mul(178,99)&^*[(mul(858,730)~}from()^mul(17,545)what()~{~*^what(90,714)how(),mul(63,969)-]mul(364,49);mul(130,598<:&why()select(879,794)mul(46,169)>&how()%mul(564,506)/what(255,868)mul(415,375)':@who()mul(525,772)<$mul(277,787)[~mul(314,321)'&@$^%mul(741,325)?(%#;*mul(459,703)why()~what()mul(250,38)what()<-$)when()%(don't()mul(296 ',mul(673,933)?#<@who()from()^?mul(831,912)?/*mul(407,853)mul(119what()why()>mul(816,762) how()<}~from()how()/@:mul(792,799)()@?%:$:mul(289,264) +why(),'*),from()mul(767,350):>~mul(123,684)@from()>mul(722,338)<'mul(252,529)do()%)%^when()!mul(731,123)mul(582,378)-mul(934,355}where()what()how()@%<[>;:mul(5,63) who()!mul(946,479)+}select()$@mul(478,71)~<()-#mul(500,398)'from(612,869)select(98,846)!!<]:select()mul(785,98)',select()//:-mul(192,182):{ why(){;mul(910,471)&^+&who(424,579)/:select()[mul(217,829)where()how(423,674)$*mul(318,444)[!?~mul(254,793)who()select(521,861)how()mul(54,186)why()[:^;-mul(109,234)mul(465,266)+?([-mul(518,485)^mul(403,383)mul(726:how()when()#mul(344,785)/}+?mul(97,996)+@'mul(637,749)how()-%+mul(302,591)don't()%^]}!)]mul(524,902)$[]/*mul(839,651)}^)$when()'what()mul(270,805)#mul(566,750){ how()/mul(716,302)/&*>@-what()>when()what()mul(602,574)+where(619,83)mul(235,585)?where()[%select()+>where(){]mul(209,404)~where(),why()how()-/-mul(123,125)^'how()who()$}/;mul(851,629)how()who()'#;$ do():select()!when()[>+>mul(576,669)what()!,'?from()&mul(423,260) how()-mul(910,922)?<@'->(mul(274,173)why()}<~from(601,667)mul(282,816)from(953,125)~mul(98,837)&[how()[what()mul^%} '$from()^-;mul(439,801)mul(761,498))>$'-why()<who():mul(109,723)from()who()mul(391,416)& -how()>mul(496,170)^'${mul(657,96)why(611,959)why())from()%+mul(62,175)>}~,%from() >mul(92,927)mul(17,279)!why(){+where()}how()mul(939,286){;mul(744,904) from()?''who()&who()how()mul(170,192)@,mul(499,985)';from()})!{+who(){mul(572,653)#:why()mul(720,626who()from()(%:mul(676,779)!why() when(58,261)^ *mul +from(){)')@!*mul(802,646)how()(-+[;#when() {mul(742,576)]* ;mul(38,717)?what()}'how(184,130)mul(126,115)]@>mul(512,978)/where()+*why()mul(705,242)?{$how();when()mul(173,898)'(~who()mul(536,621)&^from()select()when()?@mul(52,680)] -%@;][mul(971,573)^mul(879,466) +mul[!-,why()(?mul(770,624)~:mul(197,580){{(%mul(678,337)what()mul(951,457)'<#mul(679,253)?do()who();& who()select()mul(105,231)+{&!when()who()how()!')mul(262,609)):,{'from()/?@}don't()*:mul(471,462):([(@;from()mul(734,965)/&/where()mul(885,324)why(){>/#<:mul(390,818)!mul(684,730)*>>{[!what()what()mul(824,893)mul(801,597/why()!when()how() '>from()%mul(165,825)who(837,795)?? why(187,949)mul(703,551) when()'mul(759,898)select()#$$ where()where()mul(694,292)%(who()%#}mul(884,767)^:$mul(945,214) where()how(837,748)(mul(537,489)(%{mul(594,245)who()from()from()%}!)])why()mul(832,704)^~mul(902,18)how()what()who()/#'-#mul(345}who()when()?]&^mul(873,161)^mul(81,518)]$mul(875,700)how()where()(mul(735,369)/-< why()@>mul(703,274)-from()when()**,)mul(204,896)]+mul(28,596);why()#select()'#]mul(774,171< why() !from()mul(29,711)mul(28,600)}when()!@(^why()~{mul(555,761)%}do()from()-mul(139,179){how()'?mul(294,354)}where()mul(317,957)]select()#;where() where()^@from()mul(461,831)~who(75,120)%who()@-&;,)mul(563,131)mul(607,401)select())from())&,mul(26,412)select(726,797)&)how()@select()mul(416,615)(what()select()!()<#;&mul(921,158)>- mul(245,598)select()what()*({mul(468,522)]^select(574,638)]@};do()from(799,930)%who()#:[how()mul(413,674)[how()*mul(327,432)%?@'mul(486,644)}~>-mul(637,16)how(254,818){%where()#where()who():who()mul(431,749)$$where(228,303),%+&mul(593,337)}#:where(){why()[+&!mul(520,180)^mul(723,959)mul(492,739){/?mul(327,463)?-select()-<,mul(102,950)!#do()@when()-when()},select()/mul(274,979/from())who()(~)!^$mul(78,739)why()@{~mul(819~?~+]>@mul(824,208)}mul(338,41)where() &*;;&what()mul(888,646)from(),$:-who(263,596)!!-from()mul(396,204)>{)>{?(%{mul(885,937);!what()&%!from()}mul(207,417)(<;what()mul(187,893)((&&}&why()*)-mul(589,985)^how(310,10)when(),]:mul(989,534)$where()mul(552,604;(!;select(){){where()#mul(152,511)+/$!;+/<+]mul@select()::when()who()how()!what()mul(446,994)from()<}what()select()'why(244,102)+)%}who()mul(693,903)?*/}select()mul(282,115)[];why(){mul(925,276)how()&{what()&$when()&-!mul(191,385)*)mul(446,703)[>what()?*}what()^who()*mul(997,718)!>$)@,^*)mul(788,724)from()#&]~/<,)how()mul(181,531)[(why()[mul(409,206)what(604,231) when()why(921,229)]>where()//mul(199,96)when()why()#!/usr/bin/perl~%>~ &:mul(239,884) +what())[$^+why()mul(118,89)mul(689,203)#,,what()what()mul(633,394)from();~from()!where()*?@mul(568,753)/[+when()?%:mul(828,475)what()don't()-;@ mul(509,544)[when()};<+'(mul(235,757)<+:%select():mul(241,373)$mulselect() (%where()where()]-)mul(306,62)from()what()mul(285,414)!*&&>who()#mul(543,866)/~select()[+don't()/>)where()!when(),'mul(701,189)/';!:]+how(902,507)-^mul(847,104)mul(883,112){'~}&mul(697,190)what()%![!(why()@^where()who()mul(843,4)%what()&-%mul(945,389)#<)select()mul(690,755):mul(774,780)}mul(940,623)%where() ?where()(}^!mul(34,627)mul(479,281)#}>what(157,964)select(){how()why()+who(640,716),mul(117,249)mul(395,14)-]( ~(how()-mul(220,860)+^mul(765,74)select(),$who(),@mul(639,551);(mul(26,80)why(480,988)^why():? <[mul(672,116@mul(316,879)}mul(498,582) @,:{'why(589,887)mul(39;]mul(855,31)^from()?mul(93,510)mulwho(){@-what()from();where()from()~:(mul(688,799)~when()>from()-select()who()~#+{ >mul(275,916)#?-mul(359,865)where(441,672)'}what()[from()when()<>who()mul(909,227)$:!'mul(330,478)!?[;(+#what(919,466)&/mul(73,181)[{how()mul(403,182);mul(249,968):!from()?!{#-mul(661,975)!-;}'mul(999,285)select(565,140)+>@,$:from(47,825)~!mul(599,436))+ [>%!mul(959,617)mul(5,150)where()@;&mul(630,775)<&-:;mul(114,820[don't()when()#how()mul(976,290;+-from()where()]mul(338,47)when()what()where()%]mul*who() #+what()mul(679,324)mul(859,321)%'mul(446,297),#select();';from()mul(206,301)why()-'mul(87,734)mul(735,118)] {/what()*@^what()where()mul(685,883)when()what()mul(91,84)}]-~where(){when(374,912)$do()>~,' how()mul(67,939),)&~@where()(mul(923,997)~,*$when()[from()from()mul(699,705)~/when()+}mul(214,775)'%mul(715,142)-;mul(290,853)from()$why()what()select()-@-mul(682,729)+^$}, !mul(197,39)mul(269,573)@^mul(819,945)/select()-do()%$~'#select() 'mul(64,956)[who()*who()@,)>+}mul(519,356);*/%>why()[[)mul(184,666)what()mul(892,160)+*&where(764,214)--]?(>mul(996,338)>when()what()]))&?mul(865,864))?@[::when()>what()>mul(218,296)&)%:[~why()how(416,393)mul(118,100)from()select()#: $mul(7,742)how()&~how()>who()^mul(667,218)?/mul(218,898)!:$from()>mul(746,995)(+select()] when()}mul(971,429), !,&mul(505,165):!-)?-how()from()%mul(921,456)@mul(491,404)#how()-mul(284,834)#?(mul(667,960)]where():how()what(963,920)% what()don't())mul(236,336) why()why()select()where()^mul(33,901)mul(253,866)<#>$]%-mul(216,512),)from()what()what(464,183)where()select()@'}mul(98,640)' :)what()$%~#/mul(283,893)(mul(520,959)#^?{>@*when()when()]mul(80,420)where()mul(751,106)when()when()! how()mul(148,813)@><^[mul(740,246) how()where()!!/mul(242,262) who()who()%,mul(308(#/when()$mul(359,332)from()why()from()~$$^where()@mul(270,445)why()}%mul(623,449)where()how()?& />mul(759,849)-} (mul(84,200),$;who()[!mul(934,76)(@^:where()why()/'mul(650,46)[mul(105,265):)when()+ &'what()^mul(334,290)] $what()/mul(930,226,>^!%don't()mul(243,460){'#/what()+/mul(437,684)mul(501,579)/mul(243,174)mul(988( +<#where(206,306)where()[,from()mul(331,170)(?^~}#mul(940,949)>(,*+mul(925,961)^*from()select()^--^)(mul(994,182)+'+mul(153,816)~&mul(260,998)~:],],who()why(348,109)why()who()when(290,863)why(735,89)!from()@ >#mul(205,831)'$ %'mul(981,644)!#,*>mul(910,535))[who()#mul(220,934)how(271,592)-,*$,+mul(11,63)mul(783,580)^&*}~(;from(){mul(21,444$what(274,202)how()mul(293,78)mul(189,814)#{}why(80,738)}from()mul(456,691)*@{(,[%mul(916,89)how())(]@mul(524,412)];:(mul(374,851)where()[mul(473,999)select()$what()}don't();];(}mul(327,69)%&+;:/what()don't()-%,'()mul(377,536)mul(31,322))@what()^select()mul(719,58)$why()~&what()']}mul(39,890)(+<#who(){how()!mul(299,824)(]](+mul(205,11) +{mul(602,646)!% ^mul(384,953)do()&&:]<mul(228,736){({}don't()-when()@*>-mul(278,494))/&?><(select()mul(916,219)select(),:{(<*mul(360,209)why();~}where()-(,mul~when()when()!where()@:;:#/do()select()select()!,how(972,480)~-how()who()mul(726,867):>mul(549,954)](how(802,821)select()how()[+^mul(535#select()}why()[what()]why()*{#mul(72,525)mul(809,41who()!~where(82,230)}mul(961,563)}who()what(417,588)&*mul}{,+?%^[when(34,108)who()mul(71,111)$+,}#~-^]@ when(){:@mul(545,335) &how()from()<:mul(958,59)$ (what()mul(886,155)how()&+mul(525,132)<&}who(502,340)select()when()#^mul(339,398)who(),(how())@@how()$$mul(831,852)when()don't()>mul(935,45) select(930,598)!:select()mul(693,62)(mul(681,508)how()^@*;)mul(235,731)who(468,32)#~>don't()#:what()where()when()~~^>@#{mul(2,62)mul(866,617),>% mul(806,586)how():{/mul(669,407)!/mul(457,522)mul(40,474)>)]select()who()}mul(451,794)]#mul(115,471)~mul(331,456)@^who(){#when()mul(672,70)where()who())(#how()what()!mul(438,748)-/mul(605,224)mul(46,34)~?'mul(650,523)?mul(871,731)?%from(966,980)>when()mul(790,779) from()#$:,'mul(428,763)@# why()mul(724,6)select() ,mul(208,11)why()how()mul(287,562)$[:select()},?mul(531,36)/mul(12,351)#$+,:#:$when():mul(941,380)-[from()!)?-select()mul(102,544)when();~{select()~^;-do() ]who()from(),mul(959,599)>why()/,<%-,!mul(517,558)%])$mul(945,968)mul(854,265)?