commit 048fc25a7d129ec9cd79af4fc6b5062fc4aba5da
parent e7f77b0e91d59715273b12614ccce835f6800315
Author: Sebastiano Tronto <sebastiano@tronto.net>
Date: Sun, 1 Dec 2024 09:40:19 +0100
Started 2024 + day 1
Diffstat:
11 files changed, 1156 insertions(+), 0 deletions(-)
diff --git a/2024/.gitignore b/2024/.gitignore
@@ -0,0 +1,2 @@
+*/a
+*/b
diff --git a/2024/01/Makefile b/2024/01/Makefile
@@ -0,0 +1,24 @@
+CC=g++ -std=c++20 -g -Wall
+
+a:
+ ${CC} -o a.out day01a.cpp
+
+b:
+ ${CC} -o b.out day01b.cpp
+
+clean:
+ rm -f a b
+
+atest: a
+ ./a.out
+
+btest: b
+ ./b.out
+
+arun: a
+ ./a.out < input
+
+brun: b
+ ./b.out < input
+
+.PHONY: a b clean atest btest arun brun
diff --git a/2024/01/b.out b/2024/01/b.out
Binary files differ.
diff --git a/2024/01/day01a.cpp b/2024/01/day01a.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+#include <algorithm>
+#include <vector>
+using namespace std;
+
+int main() {
+ int x, y, tot;
+ vector<int> v, w;
+
+ while (cin >> x >> y) {
+ v.push_back(x);
+ w.push_back(y);
+ }
+
+ sort(v.begin(), v.end());
+ sort(w.begin(), w.end());
+
+ tot = 0;
+ for (unsigned i = 0; i < v.size(); i++)
+ tot += abs(v[i] - w[i]);
+
+ cout << tot << endl;
+ return 0;
+}
diff --git a/2024/01/day01b.cpp b/2024/01/day01b.cpp
@@ -0,0 +1,21 @@
+#include <iostream>
+#include <algorithm>
+#include <vector>
+using namespace std;
+
+int main() {
+ int x, y, tot;
+ vector<int> v, w;
+
+ while (cin >> x >> y) {
+ v.push_back(x);
+ w.push_back(y);
+ }
+
+ tot = 0;
+ for (unsigned i = 0; i < v.size(); i++)
+ tot += v[i] * count(w.begin(), w.end(), v[i]);
+
+ cout << tot << endl;
+ return 0;
+}
diff --git a/2024/01/input b/2024/01/input
@@ -0,0 +1,1000 @@
+68878 98732
+24519 87903
+73275 70114
+87985 89419
+80485 75440
+98994 55979
+28041 41805
+50762 92905
+23796 72412
+71699 84915
+43168 71645
+12985 96078
+38491 34431
+30867 76208
+89794 10790
+59797 86225
+62401 50098
+90230 45208
+40596 36238
+52821 75949
+61994 85771
+62756 70340
+91145 33842
+57051 45050
+36257 80983
+36465 84670
+98498 23292
+49344 50098
+13100 22817
+82572 57598
+77578 36555
+99900 91029
+75949 26486
+50711 74711
+52402 27513
+69977 71045
+23803 41588
+57399 16399
+81372 45126
+98985 10547
+76606 99481
+86993 78240
+54958 27513
+23734 61444
+25189 10790
+11983 91029
+53266 91029
+31226 16399
+54686 86915
+60013 40760
+29568 52436
+97354 44827
+91545 40986
+15914 60707
+64854 49298
+30497 66916
+39169 92811
+13341 98568
+89066 41215
+89654 33815
+59655 66645
+89071 48550
+91777 41832
+28820 23803
+68277 10790
+24747 20641
+19058 68263
+50952 65659
+77247 71079
+79147 28383
+89104 79596
+26384 27513
+58111 79657
+61032 72412
+45514 49298
+37369 80983
+66897 96745
+42256 18346
+53662 67789
+18203 50098
+14178 24879
+16119 50862
+85457 55460
+74217 62672
+72612 50061
+30548 32091
+21631 49298
+55905 19836
+15340 92089
+44619 28383
+67975 95646
+22169 56053
+15778 32810
+63133 98314
+42385 35192
+51645 87903
+30068 80881
+44510 83025
+50757 59248
+31854 16399
+54593 27981
+16570 11600
+21295 99780
+70191 38799
+64847 16732
+30348 30596
+92301 49298
+66545 23803
+32957 27513
+49572 10507
+10790 65414
+85781 24738
+32819 50098
+22674 23803
+44321 40307
+39258 19836
+25314 27018
+98446 83025
+96722 15026
+96131 51435
+60029 46857
+22672 24485
+57347 40735
+55089 65268
+93093 57076
+46410 40686
+46719 49999
+48860 80891
+75752 40285
+32025 76676
+58831 14816
+93208 75949
+93404 87903
+91034 54811
+74178 40675
+99272 84920
+24617 59248
+31004 22425
+49824 79823
+50187 76234
+64360 55010
+40773 10935
+93193 28383
+24292 27513
+66603 96899
+94711 49904
+81183 59248
+38727 50143
+47093 34542
+94395 41907
+39003 89663
+40029 57072
+90456 84416
+75830 87903
+33466 27513
+16427 59248
+49490 33354
+52134 40307
+67069 80983
+35192 57341
+82716 11017
+74969 49298
+16596 30045
+30786 50769
+69766 39818
+88136 94929
+29630 70754
+98865 52818
+83025 52968
+38613 75675
+34339 87903
+20221 11583
+60785 21075
+42016 32352
+50862 54811
+91144 10790
+82759 92299
+34668 35814
+80045 80983
+17106 87903
+47417 28383
+62403 75949
+58496 77896
+98013 75949
+82894 34330
+93384 44962
+95803 10790
+76669 66543
+14186 80983
+40149 58549
+50049 40735
+62487 55256
+32816 59248
+84420 67838
+54052 83025
+91698 73884
+62982 26639
+34047 65346
+32974 19836
+36970 14966
+14307 18019
+26904 87903
+36343 72547
+43235 89108
+76676 72412
+55938 66916
+34071 16143
+72820 64337
+17369 17215
+46104 45050
+88124 73288
+31485 52329
+50048 87903
+11820 51419
+81418 69376
+45029 97736
+10581 25449
+49081 33618
+52159 99078
+81831 98314
+88990 32303
+43609 44962
+32213 40285
+40285 83782
+99022 50098
+53784 22929
+88877 40307
+50928 58596
+41715 92182
+88640 20046
+57029 69964
+47786 36174
+85810 15842
+11369 90510
+70368 27513
+94570 64489
+39889 80581
+13275 16427
+68274 27513
+77936 51774
+15466 29702
+44729 80983
+32438 16399
+41087 23803
+60462 49298
+65311 76326
+32702 40735
+82433 97292
+93862 90212
+33210 81930
+94761 90283
+42167 74463
+35098 48550
+27078 99873
+54429 12606
+27075 89108
+97224 73884
+56433 68263
+30526 59248
+40340 10790
+69964 48550
+58197 72412
+86344 18262
+28455 87594
+87168 57559
+73594 65764
+43616 54811
+36860 55905
+62313 46800
+63659 87903
+19649 40735
+63386 45583
+70670 96410
+25427 84151
+95907 50098
+90333 92116
+88441 40735
+52924 40735
+54606 93929
+53431 35192
+72778 94800
+32259 44962
+22837 15734
+41370 20407
+50667 91029
+23172 20736
+87478 78442
+18679 67415
+25132 27513
+35955 72412
+19951 42485
+92404 73884
+43932 75949
+89428 47755
+68629 23255
+18060 75949
+96741 67071
+46707 89108
+89112 92197
+55083 71071
+41640 66916
+17099 58116
+70851 16399
+23057 92148
+19836 92356
+25812 72833
+93063 23164
+45392 59203
+21796 69964
+97556 35192
+57076 97029
+58339 50098
+58116 62171
+91036 98314
+60829 59813
+22495 46432
+66493 29832
+15341 17977
+50093 59248
+20768 10238
+23220 40987
+51196 62761
+23277 80983
+37255 28383
+42832 93721
+60978 28336
+81525 16486
+75180 66916
+69316 49298
+29241 48253
+11596 50862
+34351 31482
+43881 52947
+18039 15790
+35090 47718
+37781 66916
+90037 44975
+58775 49298
+11066 92303
+35717 97563
+73565 49309
+26674 96015
+91767 35192
+20613 29701
+98660 26456
+19235 73884
+52519 61051
+40366 14356
+33606 59248
+67433 78913
+51982 98675
+21129 45050
+26259 59939
+41424 74011
+15544 18046
+85842 93362
+44238 54811
+50995 77228
+50211 45766
+88522 55008
+85664 10790
+83872 49541
+90863 66681
+12731 80983
+35092 44962
+89343 27513
+43030 59369
+14341 14679
+67832 54811
+65399 97833
+40649 53538
+99865 39569
+84679 16399
+37678 91006
+40703 80889
+36214 88977
+38351 87638
+41150 30413
+82746 40735
+34606 89108
+32107 18123
+35459 50816
+26610 23803
+18202 49298
+34659 23803
+89860 35192
+25591 72412
+11117 92839
+90319 83025
+36871 40735
+94581 72076
+56790 46209
+13136 81739
+12085 62323
+75208 37298
+80354 40735
+61593 39732
+21371 71180
+44422 19479
+37274 27513
+13294 41590
+12424 22554
+57230 40809
+95559 81507
+18733 43631
+95220 79915
+15071 92369
+70964 57296
+55914 83712
+57268 87903
+61644 20006
+14409 58116
+19343 90069
+79716 73884
+57337 79683
+35640 48701
+65868 66918
+21687 49298
+90364 90368
+81563 96307
+99862 35192
+50098 23985
+56421 33574
+87642 50862
+80261 57845
+80290 53468
+69199 73884
+52657 73884
+82897 13916
+55530 23966
+77782 54811
+60975 11030
+99943 66089
+14928 40735
+32910 50078
+73884 52473
+81361 58116
+13203 16427
+72163 80438
+82198 13938
+46030 38491
+33431 52909
+30199 40285
+58012 61365
+60604 88325
+66916 73884
+59248 10790
+52823 68263
+67584 38374
+35764 58969
+38010 35192
+53537 27513
+40680 90231
+77944 85142
+65080 80983
+15342 65310
+66994 49661
+46267 41636
+80983 95143
+78052 36273
+54944 49284
+37652 65872
+60311 89108
+51144 69333
+31653 48550
+55121 87873
+36739 66142
+20290 69352
+86844 80544
+90543 40885
+36289 61112
+42899 95984
+19910 73884
+16572 40307
+22864 91559
+68021 38491
+49918 73786
+93754 91029
+51211 96235
+98091 95113
+51208 26252
+12671 40285
+61367 89030
+58498 75949
+26520 61255
+16399 35061
+26388 40307
+20061 45050
+42577 59248
+46182 23803
+45833 22608
+75415 35192
+45131 27513
+78087 72412
+37845 59937
+73178 40307
+38346 10790
+36144 48550
+95728 35192
+24529 74785
+13457 62690
+80521 90830
+26709 87903
+96061 58362
+39901 75949
+59024 36414
+70572 73484
+26182 48550
+54289 44962
+77243 41357
+45652 63563
+61275 33760
+76258 58116
+87903 75949
+36803 72708
+34689 49298
+78499 69964
+97542 16399
+99456 23803
+31246 97810
+67707 66916
+53353 76845
+72413 81639
+77355 91427
+11696 37641
+38619 66916
+58279 27513
+32455 46733
+13767 10790
+53600 12534
+52611 86767
+69581 58116
+84766 44962
+25762 84153
+75405 27675
+94680 98620
+19072 83025
+64541 25303
+47436 48379
+55099 77486
+62938 40285
+85782 22822
+49496 68211
+26405 18321
+33543 53744
+98210 17305
+26641 70987
+78605 23803
+48550 91029
+91470 59527
+76437 48391
+26589 68552
+37984 42659
+47771 75949
+69492 69964
+30910 17034
+72127 48550
+20323 74549
+68586 54811
+85656 49347
+50811 29122
+91633 13067
+97829 94888
+64580 30618
+87031 50862
+16689 35192
+93352 21275
+91740 27513
+86775 66916
+63447 40735
+69321 85095
+21196 96099
+40135 24597
+94728 83025
+68263 78089
+49758 75949
+58570 40307
+70556 80983
+28954 87903
+23512 75949
+79621 26912
+23768 89108
+68025 71387
+94717 39913
+32934 38491
+25309 46226
+31117 91819
+28718 37008
+11096 80983
+82842 17899
+10104 44147
+15432 18566
+58103 81227
+36711 10790
+62998 76676
+56830 73884
+74532 40285
+10346 78375
+43025 31492
+31908 30023
+38840 96892
+42859 83025
+16034 68263
+56548 32521
+36514 95622
+93380 85880
+89108 49638
+14520 55668
+61195 65113
+59069 91029
+75276 89108
+94795 53666
+16658 43105
+23381 19836
+80772 80983
+22003 80790
+78628 73884
+53837 34325
+53845 85258
+87259 55484
+96036 28264
+43607 75949
+90261 55158
+97376 52565
+11241 46873
+13946 56491
+48838 35216
+26427 88573
+24683 38491
+61135 72412
+39381 47195
+66763 71602
+50727 16399
+26719 73008
+91561 57060
+27810 23803
+25003 80469
+87375 40479
+47591 80117
+15769 78617
+62428 95360
+58030 40285
+42184 59248
+16058 18264
+49021 66916
+60036 16399
+79735 64973
+28417 87903
+75666 34050
+45303 45905
+99666 58844
+83328 47904
+34405 27513
+40795 27513
+94482 57076
+73638 76842
+11760 72412
+18055 73884
+42382 73884
+74101 89766
+53388 22330
+80963 61832
+35307 75326
+24016 61479
+76700 69002
+11790 54811
+37543 40735
+23488 38262
+79409 73517
+84795 48550
+72611 72142
+24699 49298
+43748 48550
+89525 98314
+67690 26597
+77431 66916
+18256 65012
+47688 69964
+27275 54811
+28105 75949
+99231 47666
+10732 40307
+96670 82188
+67501 16141
+24786 95724
+72693 58116
+11436 11225
+44962 16427
+11976 57220
+23830 75949
+20155 29692
+49298 40758
+15879 38491
+46430 19053
+58886 32623
+38384 73884
+54723 67754
+40400 45721
+11657 16399
+45050 45050
+85338 35986
+83322 66916
+47722 83411
+16468 24658
+95873 81506
+41360 47035
+66342 36775
+87812 87399
+28383 39066
+91602 15602
+40405 89236
+77890 81548
+98616 49298
+22404 35192
+54032 44962
+52902 16399
+91840 98314
+63905 12686
+10098 54811
+11009 35192
+88737 23803
+64422 88518
+37474 95536
+41788 91339
+76027 15249
+17826 50042
+79264 64640
+98770 36874
+13862 57804
+38691 27513
+21357 78686
+32360 52496
+18251 48550
+38720 31160
+36065 75949
+35917 16399
+60979 18939
+91586 89952
+28849 67949
+40735 58746
+26437 19975
+86360 45050
+35949 19228
+83277 50098
+38624 10790
+52011 49393
+39123 39337
+27513 89108
+62673 15222
+94379 83025
+23909 90571
+77737 93244
+70404 70858
+62370 84696
+84827 44218
+53387 35250
+87556 89108
+80571 51193
+26409 91029
+13990 83025
+11278 34702
+16299 89667
+63994 65610
+86493 54811
+29416 78479
+17711 28383
+80358 80983
+56072 39436
+93254 73884
+91931 16399
+53072 98128
+24215 98633
+90482 97373
+21665 40735
+64002 80983
+84470 27470
+81717 67708
+41573 22587
+46883 16167
+19788 93408
+41097 23282
+80709 38138
+37670 69964
+49520 40544
+19523 42044
+83480 22439
+67124 88126
+90934 21464
+87043 65017
+50073 10790
+81378 61975
+51195 80983
+87524 10790
+54555 49298
+49730 84396
+91852 72412
+14863 93792
+74431 25266
+39883 80983
+99545 50098
+49954 39659
+50720 54616
+82282 66849
+27672 34776
+48615 88195
+16323 23803
+34687 30556
+84144 25955
+43893 16399
+58000 17912
+63630 93219
+42225 59248
+10697 50098
+84790 49298
+84555 50098
+11332 67228
+55152 91029
+17760 35192
+74448 78826
+72412 99596
+81795 65194
+28000 23577
+58978 75949
+97634 91029
+12089 74439
+21668 11140
+98314 59248
+27619 92514
+34387 40285
+64406 70596
+54811 36254
+28351 92362
+79006 46580
+49237 10460
+30856 46374
+59999 48734
+76251 98298
+14006 91029
+88588 33976
+97866 91029
+11813 10790
+91016 83025
+43424 32540
+83490 72412
+78507 89604
+91517 91029
+55040 21407
+21483 83837
+47039 75811
+97168 38491
+96466 28383
+66156 85652
+50285 91029
+14057 19440
+73017 79572
+33025 15856
+97174 15804
+65673 59248
+19216 34215
+44883 87903
+30254 40285
+31552 29668
+76764 16427
+60507 41588
+18078 39147
+46186 54811
+90898 23803
+23982 40735
+37504 80710
+72585 89108
+17791 84089
+79779 66916
+25517 57516
+54064 54811
+47343 59248
+11730 16399
+14957 23803
+30186 14989
+66079 89338
+82720 66916
+59760 44962
+23159 77329
+21390 50098
+12330 90747
+38607 53663
+96534 97111
+65278 58227
+48760 91626
+34518 47541
+79376 48439
+40307 36080
+59634 68532
+16764 51086
+20484 10950
+40175 72383
+12457 70481
+56023 34025
+63916 58517
+46289 70209
+91143 44935
+65424 70887
+39578 52243
+79985 22203
+72984 35192
+41823 76917
+98393 10103
+48951 40735
+51888 89069
+85621 44767
+49048 27513
+48878 87903
+91067 73884
+67152 73125
+80589 59248
+80824 52481
+65118 59248
+66648 83025
+17766 13909
+83672 35572
+81351 42040
+72780 87903
+87114 75949
+74871 29739
+62623 73816
+68716 49219
+72795 72092
+97700 40307
+80913 80983
+21100 37233
+49723 10790
+30881 80895
+42287 28982
+90849 50862
+13053 14799
+90689 50862
+91029 19117
+61953 43248
+67212 50164
+70587 31660
+50801 40285
+44701 68049
+67526 72412
+64537 98405
+10820 23823
+94953 57422
+93517 72412
+84240 45050
+72049 80983
+17021 10790
+41393 72559
+88520 57245
+63317 28383
+28723 74185
+64942 27513
+10994 34190
+57068 93681
+15289 53584
+20900 35192
+32744 41588
+18435 72823
+95710 35192
+14710 69585
+31598 87903
+63543 10790
+29870 91029
+20129 16427
+21868 49298
+76460 73884
+65538 72412
+84172 51085
+77952 35689
+26417 78889
+93014 89108
+66327 13137
+40867 10790
+65286 76246
+93712 91171
+73589 30084
+91733 49842
+55558 37212
+11506 83025
+59048 71853
+62575 73247
+96799 92730
+46068 93958
+32722 12454
+42557 26234
+83134 54811
+52665 73128
+38085 69964
+33365 22988
+74033 87903
+49743 38491
+47311 92414
+41588 38093
+78063 48550
+83201 80983
+57980 35192
+58451 71130
+81627 56209
diff --git a/2024/README.md b/2024/README.md
@@ -0,0 +1,41 @@
+# Advent of Code 2024
+
+This is my second year trying the AoC. This time I decided to take this
+as an excuse to improve my C++ skills, so I'll use that instead of C.
+
+As last year, my solutions are not commented, but feel free to send
+me an email at sebastiano@tronto.net if you want to know how I solved
+each problem!
+
+## Template
+
+This time I am trying to use a decent template for each day. Here are the
+instructions in case you want to use it.
+
+To start a new day run
+
+```
+$ ./init N
+```
+
+For example, to start day 7 you should run:
+
+```
+$ ./init.sh 7
+```
+
+and the script is going to create a folder `07` and copy some template
+files there. Then you can copy the `input` file into that folder, edit
+`dayNNa.cpp` and once your code is ready you can run
+
+```
+$ make arun
+```
+
+To run the first part with the downloaded input file. You can also use
+`make atest` to take the input from standard input, so you can copy-paste
+the test case into your terminal; press Ctrl-D to enter and EOF and
+terminate the input.
+
+For second part you can edit the file `dayNNb.cpp` and run `make btest`
+and `make brun`.
diff --git a/2024/init.sh b/2024/init.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+nn="$(printf '%02d' $1)"
+mkdir -p $nn
+sed "s/DAY/$nn/g" template.make > $nn/Makefile
+cp template.cpp $nn/day${nn}a.cpp
+cp template.cpp $nn/day${nn}b.cpp
diff --git a/2024/learned.txt b/2024/learned.txt
@@ -0,0 +1,3 @@
+List of things I learned (or refreshed) with this year's AoC.
+
+* Day 1: std::count()
diff --git a/2024/template.cpp b/2024/template.cpp
@@ -0,0 +1,10 @@
+#include <iostream>
+#include <vector>
+#include <algorithm>
+using namespace std;
+
+int main() {
+ while (cin >> TODO)
+ ;
+ return 0;
+}
diff --git a/2024/template.make b/2024/template.make
@@ -0,0 +1,24 @@
+CC=g++ -std=c++20 -g -Wall
+
+a:
+ ${CC} -o a.out dayDAYa.cpp
+
+b:
+ ${CC} -o b.out dayDAYb.cpp
+
+clean:
+ rm -f a b
+
+atest: a
+ ./a.out
+
+btest: b
+ ./b.out
+
+arun: a
+ ./a.out < input
+
+brun: b
+ ./b.out < input
+
+.PHONY: a b clean atest btest arun brun