advent_of_code/lib/day01.ex
2024-12-03 21:59:56 +01:00

1055 lines
17 KiB
Elixir

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