defmodule AdventOfCode.Day01 do @input "99006 28305 38540 91683 18133 49738 70780 13081 38316 55879 61729 73383 57462 59629 91153 56589 76573 52850 76155 36285 24171 76277 10666 30707 73383 93797 86077 24033 40710 50187 58326 65150 67654 30707 64826 52850 70235 11694 66149 71125 24077 19630 46497 93335 78959 47746 49339 29442 54141 95451 96148 29849 60258 88293 23099 57809 41307 66225 65974 82114 40769 84109 65277 79459 20836 39953 12863 96208 30718 30707 65114 50745 46146 36285 14591 81775 99705 90954 64713 86029 18767 78959 50856 44136 19757 47746 89557 74726 54062 80955 69386 30707 91224 49972 68269 75801 47118 94704 49799 57324 42535 91397 69994 50187 52436 94924 24596 56660 86843 95067 96155 75541 25680 75049 10905 30636 73049 91039 35651 82698 13185 61356 47380 49738 11526 78959 22640 17601 28081 24121 91214 38947 70299 56815 69491 64519 14166 11598 44639 11827 39531 65456 29197 97770 97941 39589 89154 67313 74726 62661 42065 57417 67812 40982 17072 26967 73245 20609 11680 79249 68304 94322 98762 25205 51469 55108 93672 47746 19665 81775 16645 69048 58364 31379 92331 50187 97903 65233 86845 79249 50676 93797 75338 48071 87166 34605 89047 94911 33371 43535 90980 44540 92511 54481 47738 98087 81003 30707 87425 53074 86444 36285 24802 51147 26115 76277 89747 63773 46823 81775 70790 54357 45381 40553 71680 21755 56603 12660 20721 25637 54715 73383 70245 32502 95000 47746 61672 49279 69277 80955 18422 20285 89751 24379 82454 81055 18812 71141 12403 50187 51380 52850 70840 30006 56957 80955 80981 75183 42793 45433 40184 68802 75791 61356 54948 15120 25442 67654 88023 11694 34476 29242 73955 43439 40956 31785 59337 60125 84175 16414 61172 79249 20032 96208 11394 97531 89416 73030 58763 39442 71522 96208 41390 29669 89374 91039 45927 12473 13265 75801 19150 40228 82687 11428 44626 49738 44561 79249 97948 51147 14766 15646 38684 16481 74001 52850 75864 40844 65366 71125 53729 67654 90293 52850 37726 97531 70804 85744 10158 95339 46905 21771 71830 22746 26957 30707 62648 69687 16278 15961 72223 84109 68493 27071 63124 14353 39953 61356 46199 93853 51574 11750 56997 83594 15042 93797 29355 85961 32667 81775 91910 96117 45361 90326 57209 42508 21891 82114 69835 36285 94443 91397 55059 40228 15688 87731 32147 88293 86293 69781 34923 63879 44962 23951 82598 96035 40003 76078 13023 81775 27866 11694 67002 88124 91012 77163 66044 48243 33331 56996 83739 40228 46420 37353 94463 32287 89002 11694 11437 89879 22418 47746 21411 15950 32217 84109 88031 28305 35905 13458 35647 65548 51955 40377 74030 74726 81468 75864 43969 88293 46194 82114 85098 86085 19106 76277 39507 81364 49298 88422 46755 75801 65761 78300 77565 69583 99407 22393 71358 75801 40988 49738 15235 49799 85560 82033 22336 50187 30214 76277 33528 47746 65883 73396 28514 43873 54235 49621 40814 84109 30738 61805 23352 88293 74158 76277 74379 75470 13703 24883 65060 51147 98105 12843 63511 82603 14335 55075 95359 82342 88133 61356 95532 43253 51153 75098 14718 62422 13804 98736 91397 49738 43643 47746 76512 75864 64507 68412 56558 50187 94652 62259 80650 42322 56524 75908 97034 70538 78284 49799 63253 17703 70398 91039 20457 87050 38983 60522 80593 79249 32158 98087 15099 13939 78903 12907 62941 80063 11803 11694 49738 37998 27243 61846 93339 79646 68583 81203 46703 84109 66461 76277 50187 98087 15890 71125 52412 65472 88293 89208 44630 55747 85179 97531 52028 81775 84567 52513 19950 72857 51147 65290 34362 91039 83960 35257 17612 86932 44656 11694 33483 36285 51670 49799 96300 75864 95240 36523 21850 67295 52441 81775 32254 81390 68525 52850 74508 53968 80323 67864 65300 47746 24288 44630 66066 51308 16209 83039 29819 30707 74036 70014 62630 84109 34134 28305 46966 41389 73363 76513 95916 40844 21327 76277 37034 55019 80617 75864 24686 77305 25133 61356 93810 79249 68870 14283 38845 52268 41953 30707 76876 75801 20112 68275 91690 79249 12865 26445 35744 94812 49085 75801 86030 26757 88533 76277 43415 47935 34986 87425 99785 61356 91725 49799 30670 61818 94247 22948 96381 48072 59252 26199 17282 80898 45938 10743 79072 40844 55769 75864 78572 88293 87331 83164 60162 75801 71125 75801 40031 18205 52638 38867 44289 84251 63865 49738 18898 49799 95301 88087 22055 67584 53205 56266 28323 52850 90363 14587 89953 75864 73798 75131 45863 98591 98470 18502 71795 68172 33778 62819 98946 74323 21994 95233 30707 48095 51523 42340 71441 84109 33909 93797 10691 73087 29496 95149 42230 40844 68830 80812 79249 28305 44218 37419 79729 96842 32224 75801 30279 78959 38608 56727 45483 76277 32047 40844 70586 44630 76474 40844 32742 78959 98317 11109 42335 53918 65316 70907 81775 96208 96023 23222 12721 73383 73700 12794 79390 75864 90694 98087 91565 82137 86422 53606 92810 28630 74624 59757 68037 37599 28396 33032 89780 68219 30962 99744 23460 67654 77012 93797 21031 52028 66950 55803 65128 75335 28012 11694 57394 80955 98281 46595 77495 26699 74936 37782 91250 12721 91241 77978 91314 40844 88290 91966 20940 29130 94073 32412 27646 61356 60072 84970 24487 40228 93468 98087 34827 84109 42629 54769 72808 15123 67231 70469 47920 51377 95716 77889 14507 84109 38335 71125 59119 85683 27496 30904 49592 36285 59259 92228 14976 12721 32138 60938 49659 75876 11006 51147 27301 81810 59332 11690 91052 97587 63614 74726 13512 96191 85275 75780 19247 28305 40663 71567 92257 20940 68520 34365 87435 87425 59634 73879 48762 66787 37318 77650 49411 74726 34658 71064 35706 84109 93123 61356 17924 52329 87196 66321 57740 49146 22830 53972 51620 18748 75848 28607 14772 65350 18592 91039 66676 44630 44102 82837 47056 61356 86148 93628 40518 50135 41596 40844 78037 80873 35795 71125 18723 62486 93797 67654 97671 69144 23699 43539 97919 93556 16785 82114 62616 10568 15930 25428 82441 50369 32656 84109 77413 49738 72752 93797 25097 68790 19543 50187 75318 43459 19415 84109 20997 33697 35202 23562 72538 32387 44842 47280 28326 62911 17462 40228 42990 61356 20421 52850 17182 78955 49471 43107 31823 84109 90999 49738 52439 75864 47746 51147 50990 20026 26573 61356 38712 56479 69067 80955 36559 61356 81690 17222 52850 47746 82635 51207 76405 46009 78056 97531 77790 16534 97566 28480 91451 40844 30371 97678 31553 92823 40103 96208 96713 84654 72241 20478 21177 52850 36285 49799 60819 83899 89533 96207 52878 70318 98899 79249 21739 95321 52895 32973 24760 44578 61257 84109 59243 84109 83626 49799 73327 76277 89469 30707 38452 72499 91111 70772 19932 29213 23814 67902 11228 98087 90008 84109 71262 91481 75116 76277 21556 28310 67613 87425 18819 32653 16596 47746 60189 48086 91775 74181 82183 26300 82671 22127 27814 70386 56740 51147 23120 49799 57467 97531 46686 73630 75851 28089 43651 40228 97125 95585 49136 66827 91337 50881 94434 49799 32403 76277 41731 98603 27543 78528 74801 94830 14902 39291 99047 84044 66749 79249 76240 44630 72198 92069 95888 76277 32500 11134 86753 75864 15649 40228 56086 37007 15311 76277 37803 96208 53060 91397 51967 46791 17354 75864 10055 91996 34244 51147 21231 29851 59489 85269 13639 52850 34062 76277 83983 88634 93647 71603 53687 27829 70194 63627 98944 51147 13991 69066 87843 28757 74448 18555 52799 77670 75944 81775 42844 93797 96272 49738 17838 28305 26081 59101 45724 61356 47237 93229 21228 49378 35856 48946 93591 79249 61212 48408 61062 49738 96064 67117 75537 91039 44059 71125 81622 40844 50667 78959 97084 72682 13169 50187 57322 40844 12130 79854 82114 50187 54596 37752 47748 49738 24302 70834 39283 75801 44310 49738 82822 28305 79286 11554 78155 29272 26900 79547 97801 17772 62797 75864 80367 71125 52103 31822 43130 57967 28888 68281 73180 98087 82035 44295 25627 28305 10869 98087 37552 41211 84907 80456 34645 49738 61338 18250 83990 52028 11269 79249 79295 40228 43221 28305 86001 84109 34108 96672 95413 40228 19964 95091 82521 79249 60781 52850 57794 49515 12298 52827 84216 75356 36509 47746 82594 91039 32516 34110 50254 39055 35816 98087 60865 16648 61952 46277 53399 47746 77087 63430 96779 11694 13853 62075 22933 98087 58086 11745 21436 49186 50170 49738 86579 76496 26267 11694 77545 75864 43670 81580 21175 71125 87781 88939 52791 71941 48617 97531 96403 49799 67474 86504 98932 75864 46899 15115 79574 20872 30104 28168 76149 47235 70412 85595 33000 91039 59971 27058 88217 85302 15130 21587 56015 12678 54238 84154 35684 52890 88659 73714 40206 75864 81346 69296 35433 44675 84398 98087 64460 63562 32488 47746 77815 35044 61406 76662 93879 88293 33472 39552 86621 96208 31585 68175 92665 60399 51965 89287 99377 98087 20257 42276 79455 93460 44861 63652 94931 44752 34821 16486 34053 28305 35378 45573 99445 47746 30344 62122 68931 70443 57795 16675 51592 57833 52107 56613 44792 99154 81960 56133 93395 49357 53268 60866 30699 47746 44246 50560 71363 76277 84318 85118 50198 93797 58232 93108 76277 21865 22162 48676 77444 25800 77344 77645 84109 84109 64076 88361 56650 19091 69278 39510 78847 99948 81571 76277 44644 18403 90621 79249 59174 91039 43079 96572 46349 32815 69355 75801 67085 50187 66194 84109 91560 87467 96434 67654 57896 60828 12385 56266 13553 51324 39494 81775 33031 72416 84179 75864 76823 79249 78648 30707 49568 67654 13913 52422 13779 30707 19801 51147 53472 76175 54951 79797 78858 71125 33043 42990 66269 76277 69674 52004 56156 38942 15052 93396 74147 98425 16337 77679 57835 19068 35937 65962 79379 88101 37535 42786 48559 88293 72941 42990 13143 61959 98319 42529 21984 99125 52205 59110 37942 51147 30925 80755 85946 17365 29975 80268 16606 67285 10354 87185 43214 15806 75801 71358 85088 87425 23246 66100 14264 51147 97821 80955 90143 66978 43233 85824 19501 40704 62214 18149 70520 24430 98507 11694 57062 20525 19520 81001 45602 98999 22321 95761 58654 51363 40844 25400 99926 80955 27878 52028 92982 71125 24451 96208 24960 93240 78368 88546 73870 49349 64409 90193 68720 35981 84679 18658 85561 69254 61418 25765 23592 52028 79447 53529 79307 47756 43133 52850 67547 71095 25054 99257 18090 49799 42348 55820 53062 75425 12477 51328 32590 30707 43150 85390 90232 46509 54157 70945 10397 23863 40228 92788 10069 44941 82220 79249 51061 49799 24569 52850 92802 52028 21675 45636 55904 91120 32060 61403 99313 63921 64724 32937 41313 25655 92841 52028 48903 61356 32705 49799 29306 30225 12758 69044 92611 94265 37798 11694 72934 71883 17322 91397 31246 51147 42506 74407 91039 47746 41966 74541 37154 37237 80080 21658 25042 57210 63465 40844 51158 61785 71697 40228 68447 67654 59005 11635 72699 49799 77876 47746 32324 47746 80836 30707 79063 19530 92346 15587 98008 66426 52358 23988 61687 71358 19947 96208 57697 78728 81721 72246 46459 57550 25740 54114 78645 76394 80369 31516 33120 69506 86551 79249 79500 44630 87802 36285 96810 95657 63959 52028 36968 33686 56795 50480 12699 18338 80955 87425 54674 68560 89734 52028 56820 40844 33215 40228 51005 59999 54487 93797 40303 60286 89364 90784 99804 67654 47249 98358 13318 11694 71579 47746 42237 82114 10936 52850 94920 41396 97531 27455 55195 28885 37609 76447 32421 95865 86247 11694 75761 97060 92502 36285 24793 76277 79928 55461 61966 30707 54823 96245 12390 75864 98087 51194 28305 50041 11694 30051 25773 14953 10237 72188 53818 84109 90140 57055 16877 76277 70440 91397 20425 65269 31119 96439 64934 16064 41053 43279 59199 52850 96208 55322 47865 28549 72676 99138 36328 83521 87171 87425 33085 48785 29549 11694 16365 71358 21309 32908 78146 38186 77480 87627 33026 82946 78593 18482 51671 32396 24897 14774 66982 40844 10601 56266 90805 78349 98801 75864 69006 79249 87117 90262 51999 52850 69463 56266 79838 75864 87352 21058 70793 51826 65518 42990 63083 33412 14321 51147 71218 91039 68794 49799 61356 72502 29130 30308 50008 34275 75342 36332 22229 22962 43553 91039 56266 15695 26755 40878 43604 79587 69206 14900 83729 11694 97816 40844 74873 56266 96518 96208 26091 53663 35139 75864 77138 84834 63035 67101 90356 11694 64708 90467 68272 91039 87370 11694 81179 11694 91200 91397 68973 85476 44889 52028 56893 37615 28208 66396 16017 49735 33656 40844 95864 81775 85836 40844 94113 39592 38652 40228 59247 46979 64534 71125 83964 40228 15724 56266 55105 29130 13237 28305 34736 99523 95583 12965 34797 36285 47199 88293 20631 56266" @input_test "3 4 4 3 2 5 1 3 3 9 3 3" defp parse_list(input) do String.split(input, "\n") |> Enum.map(fn line -> String.split(line) |> Enum.map(fn number -> String.to_integer(number) end) end) |> Enum.reduce({[], []}, fn line, acc -> {left, right} = acc { Enum.concat(left, [Enum.at(line, 0)]) |> Enum.sort(), Enum.concat(right, [Enum.at(line, 1)]) |> Enum.sort() } end) end def part1() do {left, right} = parse_list(@input) sum = Enum.with_index(left) |> Enum.reduce(0, fn {leftElement, index}, acc -> rightElement = Enum.at(right, index) difference = if rightElement > leftElement do rightElement - leftElement else leftElement - rightElement end acc + difference end) sum end def part2() do {left, right} = parse_list(@input) Enum.reduce(left, 0, fn element, acc -> occurrences = for _x = ^element <- right, do: true acc + element * length(occurrences) end) end end