diff --git a/.gitignore b/.gitignore
index 52a8de5..3e0dff2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ riderModule.iml
/_ReSharper.Caches/
.idea/.idea.AdventOfCode/.idea
AdventOfCode.sln.DotSettings.user
+BenchmarkDotNet.Artifacts
diff --git a/AdventOfCode.csproj b/AdventOfCode.csproj
index efbbd57..ddbe11f 100644
--- a/AdventOfCode.csproj
+++ b/AdventOfCode.csproj
@@ -8,6 +8,7 @@
+
diff --git a/DayBenchmarker.cs b/DayBenchmarker.cs
new file mode 100644
index 0000000..94b11e5
--- /dev/null
+++ b/DayBenchmarker.cs
@@ -0,0 +1,23 @@
+using AdventOfCode.Days;
+using BenchmarkDotNet.Attributes;
+
+namespace AdventOfCode;
+
+[ShortRunJob]
+[MemoryDiagnoser(false)]
+public class DayBenchmark
+{
+ private Day Day => new Day15();
+
+ [Benchmark]
+ public void Part1()
+ {
+ Day.RunPart1(display: false);
+ }
+
+ [Benchmark]
+ public void Part2()
+ {
+ Day.RunPart2(display: false);
+ }
+}
\ No newline at end of file
diff --git a/Days/Day.cs b/Days/Day.cs
index f84954d..1e3b747 100644
--- a/Days/Day.cs
+++ b/Days/Day.cs
@@ -4,9 +4,9 @@ public abstract class Day
{
public abstract int Number { get; }
public abstract string Name { get; }
-
- public abstract void RunPart1();
- public abstract void RunPart2();
+
+ public abstract void RunPart1(bool display = true);
+ public abstract void RunPart2(bool display = true);
public override string ToString()
{
diff --git a/Days/Day1.cs b/Days/Day1.cs
index 2247034..0c53261 100644
--- a/Days/Day1.cs
+++ b/Days/Day1.cs
@@ -7,7 +7,7 @@ public class Day1 : Day
public override int Number => 1;
public override string Name => "Calorie Counting";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
int currentCalories = 0;
int maxCalories = 0;
@@ -27,14 +27,17 @@ public class Day1 : Day
currentCalories += int.Parse(line);
}
-
- AnsiConsole.MarkupLine($"[green]Max calories is: [yellow]{maxCalories}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Max calories is: [yellow]{maxCalories}[/][/]");
+ }
}
-
- public override void RunPart2()
+
+ public override void RunPart2(bool display = true)
{
var elfCalories = new List();
-
+
int currentCalories = 0;
foreach (var line in Input.ReadAllLines())
{
@@ -51,18 +54,22 @@ public class Day1 : Day
}
var totalCalories = elfCalories.OrderByDescending(c => c).Take(3).Sum();
- AnsiConsole.MarkupLine($"[green]Total calories by top 3 elf is: [yellow]{totalCalories}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Total calories by top 3 elf is: [yellow]{totalCalories}[/][/]");
+ }
}
#region Input
- public const string Input =
+ public const string Input =
"""
10062
15651
1271
14355
7220
-
+
4878
1754
8466
@@ -73,14 +80,14 @@ public class Day1 : Day
3172
1327
6310
-
+
22413
4145
22294
-
+
23108
30453
-
+
2084
3496
4800
@@ -91,11 +98,11 @@ public class Day1 : Day
2558
2120
6159
-
+
25265
20200
2083
-
+
7424
5830
2575
@@ -107,9 +114,9 @@ public class Day1 : Day
2059
7145
7223
-
+
58621
-
+
2926
9188
7432
@@ -119,7 +126,7 @@ public class Day1 : Day
5517
2703
5446
-
+
2457
5814
1294
@@ -130,7 +137,7 @@ public class Day1 : Day
1964
1155
2380
-
+
2812
1827
5533
@@ -145,20 +152,20 @@ public class Day1 : Day
2681
4849
5250
-
+
2922
10365
5819
10227
2962
2702
-
+
2982
9254
14137
5026
9374
-
+
5933
2888
2250
@@ -172,7 +179,7 @@ public class Day1 : Day
1032
5847
5383
-
+
5044
5922
3155
@@ -184,9 +191,9 @@ public class Day1 : Day
4649
2764
6444
-
+
12932
-
+
4764
4285
1278
@@ -201,7 +208,7 @@ public class Day1 : Day
5748
5573
5848
-
+
6078
6687
5510
@@ -212,7 +219,7 @@ public class Day1 : Day
1356
4064
4159
-
+
7426
1147
4176
@@ -220,11 +227,11 @@ public class Day1 : Day
9484
7907
10806
-
+
24981
21675
9324
-
+
5537
5730
1280
@@ -239,14 +246,14 @@ public class Day1 : Day
3816
3859
5406
-
+
1315
8662
2280
11800
10201
3886
-
+
3048
4147
3299
@@ -262,7 +269,7 @@ public class Day1 : Day
5213
1338
3929
-
+
5456
4051
1621
@@ -277,7 +284,7 @@ public class Day1 : Day
4335
3015
1139
-
+
2875
6387
2926
@@ -291,7 +298,7 @@ public class Day1 : Day
6728
3302
6345
-
+
9641
5967
10265
@@ -300,7 +307,7 @@ public class Day1 : Day
5632
4913
6151
-
+
5890
4285
3601
@@ -313,17 +320,17 @@ public class Day1 : Day
7214
4034
1032
-
+
4266
2086
12754
8475
5044
9616
-
+
27815
19415
-
+
7914
11106
6938
@@ -331,17 +338,17 @@ public class Day1 : Day
6902
2983
3710
-
+
7659
3565
1310
11842
-
+
8750
17624
9697
16020
-
+
4606
6296
2321
@@ -352,12 +359,12 @@ public class Day1 : Day
8016
7910
4786
-
+
11012
12831
3980
12204
-
+
7996
7933
1500
@@ -368,7 +375,7 @@ public class Day1 : Day
7506
8096
8661
-
+
5694
4145
3095
@@ -381,7 +388,7 @@ public class Day1 : Day
5043
1241
5011
-
+
2410
7373
6724
@@ -392,7 +399,7 @@ public class Day1 : Day
8336
6517
1376
-
+
6084
9909
1760
@@ -400,15 +407,15 @@ public class Day1 : Day
4904
6734
9492
-
+
8002
4098
-
+
17545
1504
17040
14118
-
+
1103
5378
6135
@@ -423,7 +430,7 @@ public class Day1 : Day
2252
1904
3474
-
+
1788
5889
7810
@@ -433,7 +440,7 @@ public class Day1 : Day
1422
9526
6762
-
+
1187
2137
6551
@@ -442,7 +449,7 @@ public class Day1 : Day
7099
3465
5179
-
+
7056
3142
3237
@@ -455,7 +462,7 @@ public class Day1 : Day
4493
5359
1336
-
+
4690
6692
4638
@@ -467,7 +474,7 @@ public class Day1 : Day
7742
1895
4528
-
+
4929
5947
5044
@@ -481,14 +488,14 @@ public class Day1 : Day
6390
5467
5496
-
+
11896
13381
1055
3993
4275
12480
-
+
1903
1527
3280
@@ -503,7 +510,7 @@ public class Day1 : Day
2345
2551
1901
-
+
2674
9184
3423
@@ -513,13 +520,13 @@ public class Day1 : Day
7827
4466
4901
-
+
4653
12104
14737
8740
4164
-
+
5317
5734
4580
@@ -535,11 +542,11 @@ public class Day1 : Day
5408
5952
1849
-
+
9691
16403
16828
-
+
3653
6762
2042
@@ -551,7 +558,7 @@ public class Day1 : Day
6303
1662
6814
-
+
3720
6801
2350
@@ -565,7 +572,7 @@ public class Day1 : Day
4022
3702
3169
-
+
7146
5318
1820
@@ -575,22 +582,22 @@ public class Day1 : Day
8848
6614
5497
-
+
11545
4050
20095
-
+
8230
11577
6426
4671
11838
-
+
1726
7355
8115
2780
-
+
1795
4697
10410
@@ -598,7 +605,7 @@ public class Day1 : Day
2370
9497
1221
-
+
2909
6719
2733
@@ -612,7 +619,7 @@ public class Day1 : Day
5855
5432
3804
-
+
7874
7949
6658
@@ -621,10 +628,10 @@ public class Day1 : Day
3235
9142
2856
-
+
6968
7042
-
+
7463
8035
4908
@@ -635,13 +642,13 @@ public class Day1 : Day
8611
2114
8748
-
+
11054
16021
9826
11604
4819
-
+
11214
4850
11665
@@ -649,9 +656,9 @@ public class Day1 : Day
1347
4053
4570
-
+
66862
-
+
1597
6127
6229
@@ -659,13 +666,13 @@ public class Day1 : Day
9308
9661
11410
-
+
13224
1160
1978
13018
14604
-
+
2773
3885
2383
@@ -680,7 +687,7 @@ public class Day1 : Day
4116
6281
2026
-
+
3714
2840
2116
@@ -694,7 +701,7 @@ public class Day1 : Day
4974
2005
5293
-
+
2580
1645
5677
@@ -708,7 +715,7 @@ public class Day1 : Day
5658
4817
5911
-
+
2126
2851
2766
@@ -717,12 +724,12 @@ public class Day1 : Day
3449
2765
1299
-
+
18470
9129
17956
14494
-
+
1033
4468
5938
@@ -730,7 +737,7 @@ public class Day1 : Day
2406
1175
5997
-
+
1256
7932
1544
@@ -738,7 +745,7 @@ public class Day1 : Day
5709
1348
2919
-
+
4399
1449
8295
@@ -748,7 +755,7 @@ public class Day1 : Day
2857
1722
5204
-
+
8161
6865
6428
@@ -758,7 +765,7 @@ public class Day1 : Day
5109
1769
2125
-
+
1112
7417
1328
@@ -770,11 +777,11 @@ public class Day1 : Day
6639
6129
4144
-
+
5554
15529
1499
-
+
9459
3175
7412
@@ -783,7 +790,7 @@ public class Day1 : Day
6807
10056
8657
-
+
5195
1397
5365
@@ -799,20 +806,20 @@ public class Day1 : Day
2455
6048
4488
-
+
10875
-
+
5322
8688
2636
14243
-
+
11403
7465
10079
2270
15254
-
+
11758
7630
5137
@@ -820,9 +827,9 @@ public class Day1 : Day
7119
10008
6125
-
+
5184
-
+
4306
1159
6483
@@ -836,7 +843,7 @@ public class Day1 : Day
6841
2189
3030
-
+
3132
6730
5733
@@ -848,11 +855,11 @@ public class Day1 : Day
4264
6006
3295
-
+
4829
23038
16150
-
+
1519
10692
11102
@@ -860,7 +867,7 @@ public class Day1 : Day
2948
11851
6301
-
+
5787
2664
6046
@@ -876,14 +883,14 @@ public class Day1 : Day
2568
3589
5334
-
+
2303
10849
3983
10010
4854
2111
-
+
4576
1236
3111
@@ -896,7 +903,7 @@ public class Day1 : Day
5623
7257
2589
-
+
6031
4307
6669
@@ -908,7 +915,7 @@ public class Day1 : Day
7149
3091
1001
-
+
8737
1843
4676
@@ -919,7 +926,7 @@ public class Day1 : Day
1739
4845
2909
-
+
1396
2963
10672
@@ -927,7 +934,7 @@ public class Day1 : Day
9975
6511
8694
-
+
5262
3743
1895
@@ -943,23 +950,23 @@ public class Day1 : Day
5040
4052
5291
-
+
16754
8916
17259
17813
-
+
9683
13286
13577
9343
1792
3335
-
+
25505
12891
20104
-
+
8618
6560
4584
@@ -968,12 +975,12 @@ public class Day1 : Day
1229
6759
8275
-
+
18418
14090
3552
3156
-
+
4681
2564
4557
@@ -988,12 +995,12 @@ public class Day1 : Day
3089
4322
4049
-
+
3768
12991
1680
2378
-
+
2609
5115
2179
@@ -1008,21 +1015,21 @@ public class Day1 : Day
1728
2087
4708
-
+
11919
12306
11697
9806
11749
3995
-
+
5298
1877
2065
10499
3493
2892
-
+
4172
2913
2288
@@ -1035,7 +1042,7 @@ public class Day1 : Day
2610
5309
5175
-
+
6904
9471
1232
@@ -1045,10 +1052,10 @@ public class Day1 : Day
6327
6507
7603
-
+
23962
3536
-
+
3214
1102
3823
@@ -1064,7 +1071,7 @@ public class Day1 : Day
2407
3129
3586
-
+
8438
2649
4887
@@ -1075,14 +1082,14 @@ public class Day1 : Day
1160
6542
8475
-
+
10172
1686
5999
9145
10361
7814
-
+
3049
5192
2091
@@ -1098,7 +1105,7 @@ public class Day1 : Day
5652
3636
3827
-
+
5944
7870
2055
@@ -1106,7 +1113,7 @@ public class Day1 : Day
7574
8691
8852
-
+
2178
1658
6451
@@ -1118,16 +1125,16 @@ public class Day1 : Day
2348
5377
2680
-
+
6607
13797
10728
6412
-
+
10824
25891
24424
-
+
2278
3407
1688
@@ -1143,7 +1150,7 @@ public class Day1 : Day
5260
2094
2334
-
+
3330
2884
6186
@@ -1155,7 +1162,7 @@ public class Day1 : Day
4569
1909
5574
-
+
2073
2159
1468
@@ -1170,7 +1177,7 @@ public class Day1 : Day
1432
5501
2600
-
+
7484
8409
8216
@@ -1179,13 +1186,13 @@ public class Day1 : Day
5125
5532
10092
-
+
3704
4032
13787
14642
6007
-
+
2893
3724
6947
@@ -1198,7 +1205,7 @@ public class Day1 : Day
5402
5771
2995
-
+
3027
2193
4194
@@ -1213,7 +1220,7 @@ public class Day1 : Day
6162
1556
5269
-
+
6162
7433
2853
@@ -1225,7 +1232,7 @@ public class Day1 : Day
6655
5549
2992
-
+
3304
3655
2028
@@ -1237,7 +1244,7 @@ public class Day1 : Day
2769
2514
2146
-
+
2616
5717
1758
@@ -1251,10 +1258,10 @@ public class Day1 : Day
2327
6678
5738
-
+
17934
19341
-
+
6652
3289
6927
@@ -1268,14 +1275,14 @@ public class Day1 : Day
5324
6085
2571
-
+
4344
6656
3831
4768
12536
13166
-
+
2696
5427
9429
@@ -1283,7 +1290,7 @@ public class Day1 : Day
5758
9578
4958
-
+
6889
3107
1112
@@ -1297,7 +1304,7 @@ public class Day1 : Day
4325
5497
4214
-
+
3588
5313
1330
@@ -1307,9 +1314,9 @@ public class Day1 : Day
9578
8426
4836
-
+
31988
-
+
5561
3355
5593
@@ -1324,7 +1331,7 @@ public class Day1 : Day
6329
3297
5067
-
+
4244
1729
1598
@@ -1339,7 +1346,7 @@ public class Day1 : Day
4259
2821
1968
-
+
5291
7790
8452
@@ -1348,7 +1355,7 @@ public class Day1 : Day
2069
1365
9288
-
+
5533
4261
6170
@@ -1363,12 +1370,12 @@ public class Day1 : Day
4188
3993
1592
-
+
15202
9385
17135
10731
-
+
4591
2068
1136
@@ -1383,7 +1390,7 @@ public class Day1 : Day
3815
3595
4846
-
+
8033
7540
9200
@@ -1392,7 +1399,7 @@ public class Day1 : Day
2148
7195
9335
-
+
6923
4006
5057
@@ -1406,20 +1413,20 @@ public class Day1 : Day
3240
4363
2870
-
+
18428
1484
6717
-
+
21437
10877
-
+
13896
13142
14976
4279
7760
-
+
3736
3606
6255
@@ -1433,7 +1440,7 @@ public class Day1 : Day
4794
1810
3891
-
+
7568
9015
8576
@@ -1443,7 +1450,7 @@ public class Day1 : Day
7403
7606
8039
-
+
3523
5469
4603
@@ -1455,11 +1462,11 @@ public class Day1 : Day
1976
8036
1708
-
+
23475
-
+
58206
-
+
8598
4206
7981
@@ -1470,11 +1477,11 @@ public class Day1 : Day
4155
6886
7736
-
+
10064
5532
4310
-
+
5605
6163
3079
@@ -1485,24 +1492,24 @@ public class Day1 : Day
3829
8064
5976
-
+
14566
2324
11737
8884
-
+
5741
9973
5120
8385
6468
6446
-
+
12939
7370
11204
3902
-
+
6531
6059
3199
@@ -1516,7 +1523,7 @@ public class Day1 : Day
5311
1092
3929
-
+
2969
5314
5341
@@ -1526,12 +1533,12 @@ public class Day1 : Day
1458
4516
1911
-
+
18278
17057
19676
13319
-
+
1740
1218
7693
@@ -1543,9 +1550,9 @@ public class Day1 : Day
2606
3634
4818
-
+
51246
-
+
7826
5544
5835
@@ -1556,7 +1563,7 @@ public class Day1 : Day
7170
1166
7254
-
+
2013
4870
1732
@@ -1571,7 +1578,7 @@ public class Day1 : Day
3028
1304
3809
-
+
4410
6375
5386
@@ -1583,7 +1590,7 @@ public class Day1 : Day
4051
5263
4460
-
+
3437
4993
6230
@@ -1596,7 +1603,7 @@ public class Day1 : Day
3257
1333
3603
-
+
1433
4953
4098
@@ -1604,7 +1611,7 @@ public class Day1 : Day
8320
11840
10795
-
+
6925
7292
9340
@@ -1614,7 +1621,7 @@ public class Day1 : Day
5490
6380
6512
-
+
4332
2273
3506
@@ -1627,7 +1634,7 @@ public class Day1 : Day
2109
4513
5392
-
+
2597
7554
9150
@@ -1636,7 +1643,7 @@ public class Day1 : Day
7443
6788
3224
-
+
6098
7293
6994
@@ -1646,16 +1653,16 @@ public class Day1 : Day
3312
7702
3616
-
+
55975
-
+
2514
10887
-
+
7264
10835
21533
-
+
6666
1428
6668
@@ -1667,9 +1674,9 @@ public class Day1 : Day
7279
7284
3344
-
+
4809
-
+
4748
7859
5322
@@ -1678,7 +1685,7 @@ public class Day1 : Day
2462
7973
1576
-
+
1207
1949
2608
@@ -1688,27 +1695,27 @@ public class Day1 : Day
7804
2404
9159
-
+
38251
-
+
10983
5513
9496
7341
11958
7265
-
+
10483
7081
5477
12178
-
+
8421
13928
7231
10781
11620
-
+
7219
2204
5179
@@ -1719,18 +1726,18 @@ public class Day1 : Day
1902
5293
8458
-
+
13895
10711
10857
14214
-
+
9062
4001
8483
4260
9408
-
+
8856
2473
4738
@@ -1740,7 +1747,7 @@ public class Day1 : Day
1747
6853
8308
-
+
6468
5359
8925
@@ -1749,7 +1756,7 @@ public class Day1 : Day
6194
4431
4177
-
+
1452
2594
5079
@@ -1761,9 +1768,9 @@ public class Day1 : Day
2458
5843
3390
-
+
59084
-
+
4350
2892
6057
@@ -1778,19 +1785,19 @@ public class Day1 : Day
2641
6303
3518
-
+
4595
15941
14489
12371
13428
-
+
6748
3113
13130
13855
10202
-
+
4461
4550
3781
@@ -1805,7 +1812,7 @@ public class Day1 : Day
1913
2538
5819
-
+
5492
2956
6397
@@ -1819,16 +1826,16 @@ public class Day1 : Day
6510
5134
2251
-
+
1912
11885
9792
9026
-
+
15319
21333
4765
-
+
1510
1760
1193
@@ -1844,7 +1851,7 @@ public class Day1 : Day
5830
1273
2963
-
+
2625
5173
2499
@@ -1860,18 +1867,18 @@ public class Day1 : Day
2160
1791
2522
-
+
20725
-
+
15813
26702
-
+
1464
3116
7046
5531
13731
-
+
4178
4204
3722
@@ -1887,7 +1894,7 @@ public class Day1 : Day
2312
1086
1093
-
+
1020
3213
1017
@@ -1902,7 +1909,7 @@ public class Day1 : Day
1308
2755
4357
-
+
3010
5317
1507
@@ -1918,7 +1925,7 @@ public class Day1 : Day
1899
3390
1455
-
+
2098
6531
3206
@@ -1931,7 +1938,7 @@ public class Day1 : Day
4543
5069
3491
-
+
3195
3617
1509
@@ -1947,7 +1954,7 @@ public class Day1 : Day
2234
3937
3111
-
+
6510
1964
6255
@@ -1962,7 +1969,7 @@ public class Day1 : Day
3088
3182
3470
-
+
7230
5126
5584
@@ -1974,7 +1981,7 @@ public class Day1 : Day
3148
4209
3646
-
+
2971
2439
2362
@@ -1987,11 +1994,11 @@ public class Day1 : Day
3723
4143
6503
-
+
8492
19004
6323
-
+
5999
7828
7411
@@ -2002,26 +2009,26 @@ public class Day1 : Day
5631
6110
1128
-
+
6126
7809
1458
15754
3603
-
+
8908
8693
8558
3270
5458
12906
-
+
2463
7423
6250
2029
15528
-
+
5146
6644
1905
@@ -2035,7 +2042,7 @@ public class Day1 : Day
5373
5591
6634
-
+
2053
7877
2218
@@ -2046,7 +2053,7 @@ public class Day1 : Day
3502
8313
2841
-
+
5471
5190
4424
@@ -2056,7 +2063,7 @@ public class Day1 : Day
4799
8122
1038
-
+
4988
2833
4461
@@ -2069,14 +2076,14 @@ public class Day1 : Day
7435
7226
5779
-
+
11587
6728
6765
11498
4711
3547
-
+
2878
8426
11717
@@ -2084,18 +2091,18 @@ public class Day1 : Day
5481
10803
11181
-
+
4915
2093
6057
6957
13009
12971
-
+
17979
3250
19984
-
+
5650
5756
3307
@@ -2104,7 +2111,7 @@ public class Day1 : Day
9579
2849
6885
-
+
2609
2347
4692
@@ -2116,9 +2123,9 @@ public class Day1 : Day
2654
2221
1822
-
+
13157
-
+
10140
5075
10446
@@ -2127,11 +2134,11 @@ public class Day1 : Day
5856
8096
8762
-
+
16951
9118
17962
-
+
7524
4389
3716
@@ -2143,7 +2150,7 @@ public class Day1 : Day
4612
2477
6792
-
+
6403
11307
10753
@@ -2151,7 +2158,7 @@ public class Day1 : Day
4919
6485
3189
-
+
8790
10424
8816
@@ -2160,7 +2167,7 @@ public class Day1 : Day
5529
8946
3864
-
+
1370
4810
3752
@@ -2176,7 +2183,7 @@ public class Day1 : Day
5629
4962
3203
-
+
2120
4830
2859
@@ -2190,19 +2197,19 @@ public class Day1 : Day
4156
3624
2730
-
+
58973
-
+
18871
8511
-
+
13088
1608
12123
5162
9357
2409
-
+
3194
2605
8440
@@ -2211,10 +2218,10 @@ public class Day1 : Day
5709
4431
5553
-
+
10532
36332
-
+
7227
10011
7519
@@ -2222,7 +2229,7 @@ public class Day1 : Day
7444
2693
3845
-
+
10004
5735
9671
@@ -2231,7 +2238,7 @@ public class Day1 : Day
1292
10428
2800
-
+
4229
6072
3748
@@ -2245,14 +2252,14 @@ public class Day1 : Day
2712
2788
5133
-
+
10716
11271
11169
9815
1641
1025
-
+
3016
3916
6618
@@ -2263,15 +2270,15 @@ public class Day1 : Day
6525
1920
8741
-
+
19472
-
+
15684
10706
14780
15411
9358
-
+
5290
8167
5269
@@ -2282,12 +2289,12 @@ public class Day1 : Day
4844
7749
5696
-
+
9032
12663
11173
14750
-
+
1121
2123
6582
diff --git a/Days/Day10.cs b/Days/Day10.cs
index dd5dfd7..4cd424a 100644
--- a/Days/Day10.cs
+++ b/Days/Day10.cs
@@ -6,7 +6,7 @@ public class Day10 : Day
{
public override int Number => 10;
public override string Name => "Cathode-Ray Tube";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
int cycle = 1;
int x = 1;
@@ -47,10 +47,13 @@ public class Day10 : Day
}
}
- AnsiConsole.MarkupLine($"[green]Sum of signal strengths: [yellow]{sum}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Sum of signal strengths: [yellow]{sum}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
// Setup the CRT
const char litPixel = '#';
@@ -122,7 +125,10 @@ public class Day10 : Day
}
// Print the CRT
- AnsiConsole.Write(crtCanvas);
+ if (display)
+ {
+ AnsiConsole.Write(crtCanvas);
+ }
}
#region Input
diff --git a/Days/Day11.cs b/Days/Day11.cs
index df4024d..0f50f19 100644
--- a/Days/Day11.cs
+++ b/Days/Day11.cs
@@ -51,9 +51,9 @@ public class Monkey
// Divide worry level by 3 before test
if (divideWorry)
{
- newValue = newValue / 3;
+ newValue = newValue / 3;
}
-
+
// Even using this simplification, it's still needed to use longs because
// they sometime overflow before being simplified in part 2
newValue = newValue % (2*3*5*7*11*13*17*19);
@@ -77,7 +77,7 @@ public class Day11 : Day
{
public override int Number => 11;
public override string Name => "Monkey in the Middle";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
const int roundsCount = 20;
@@ -95,10 +95,13 @@ public class Day11 : Day
var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
- AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
const int roundsCount = 10_000;
@@ -116,7 +119,10 @@ public class Day11 : Day
var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
- AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
+ }
}
private static IImmutableList ParseMonkeys()
diff --git a/Days/Day12.cs b/Days/Day12.cs
index 708005b..a9e836d 100644
--- a/Days/Day12.cs
+++ b/Days/Day12.cs
@@ -43,7 +43,7 @@ public class Day12 : Day
private (int x, int y) _end;
private (int x, int y) _start;
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
var map = ParseMap();
var canvas = DrawMap(map);
@@ -57,13 +57,16 @@ public class Day12 : Day
canvas.SetPixel(x, y, Color.White);
}
- AnsiConsole.Write(canvas);
- AnsiConsole.WriteLine();
+ if (display)
+ {
+ AnsiConsole.Write(canvas);
+ AnsiConsole.WriteLine();
- AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
+ AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
var map = ParseMap();
var canvas = DrawMap(map);
@@ -77,10 +80,13 @@ public class Day12 : Day
canvas.SetPixel(x, y, Color.White);
}
- AnsiConsole.Write(canvas);
- AnsiConsole.WriteLine();
+ if (display)
+ {
+ AnsiConsole.Write(canvas);
+ AnsiConsole.WriteLine();
- AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
+ AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
+ }
}
private (int length, List<(int x, int y)> path) ExplorePath(byte[,] map)
diff --git a/Days/Day13.cs b/Days/Day13.cs
index 6f25c9d..831e8db 100644
--- a/Days/Day13.cs
+++ b/Days/Day13.cs
@@ -153,7 +153,7 @@ public class Day13 : Day
{
public override int Number => 13;
public override string Name => "Distress Signal";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
var pairs = ParsePacketPairs();
@@ -169,10 +169,13 @@ public class Day13 : Day
}
}
- AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
var packets = ParsePackets();
@@ -186,7 +189,11 @@ public class Day13 : Day
var firstDividerIndex = orderedPackets.IndexOf(firstDivider) + 1;
var lastDividerIndex = orderedPackets.IndexOf(lastDivider) + 1;
- AnsiConsole.MarkupLine($"[green]Decoder key is: [yellow]{firstDividerIndex * lastDividerIndex}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Decoder key is: [yellow]{firstDividerIndex * lastDividerIndex}[/][/]");
+ }
}
private static PacketElement ReadElement(ref ReadOnlySpan packet)
{
diff --git a/Days/Day14.cs b/Days/Day14.cs
index 383964b..9e64f84 100644
--- a/Days/Day14.cs
+++ b/Days/Day14.cs
@@ -121,7 +121,7 @@ public class Day14 : Day
private readonly Point _sandSource = new(500, 0);
private Point _offsetSandSource;
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
var map = GenerateMap();
@@ -136,12 +136,15 @@ public class Day14 : Day
sandBlocksCount++;
}
- AnsiConsole.Write(canvas);
+ if (display)
+ {
+ AnsiConsole.Write(canvas);
- AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
+ AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
var map = GenerateDictionaryMap();
@@ -156,9 +159,13 @@ public class Day14 : Day
sandBlocksCount++;
}
- AnsiConsole.Write(GenerateCanvas(map, _sandSource));
- AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
+ if (display)
+ {
+ AnsiConsole.Write(GenerateCanvas(map, _sandSource));
+
+ AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
+ }
}
private static bool GenerateSand(CellType[,] map, Canvas canvas, in Point sandSource)
diff --git a/Days/Day15.cs b/Days/Day15.cs
index 993e2d7..5257161 100644
--- a/Days/Day15.cs
+++ b/Days/Day15.cs
@@ -74,7 +74,7 @@ public class Day15 : Day
{
public override int Number => 15;
public override string Name => "Beacon Exclusion Zone";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
const int targetY = 2_000_000;
@@ -129,10 +129,13 @@ public class Day15 : Day
totalCovered -= beaconsOnTargetY.Count;
// Print total covered columns on line Y
- AnsiConsole.MarkupLine($"[green]Number of positions that cannot contain a beacon: [yellow]{totalCovered}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Number of positions that cannot contain a beacon: [yellow]{totalCovered}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
const int xMin = 0;
const int xMax = 4_000_000;
@@ -213,7 +216,10 @@ public class Day15 : Day
var tuningFrequency = finalPoint.X * (long) 4_000_000 + finalPoint.Y;
- AnsiConsole.MarkupLine($"[green]Tuning frequency: [yellow]{tuningFrequency}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Tuning frequency: [yellow]{tuningFrequency}[/][/]");
+ }
}
private static IList ParsePairs()
diff --git a/Days/Day2.cs b/Days/Day2.cs
index 8429968..255f74f 100644
--- a/Days/Day2.cs
+++ b/Days/Day2.cs
@@ -18,10 +18,10 @@ public enum Outcome : long
public class Day2 : Day
{
- public override int Number { get; } = 2;
- public override string Name { get; } = "Rock Paper Scissors";
-
- public override void RunPart1()
+ public override int Number => 2;
+ public override string Name => "Rock Paper Scissors";
+
+ public override void RunPart1(bool display = true)
{
long score = 0;
@@ -33,14 +33,17 @@ public class Day2 : Day
score += (long) selfChoice;
score += (long) ComputeOutcome(adversaryChoice, selfChoice);
}
-
- AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
+ }
}
-
- public override void RunPart2()
+
+ public override void RunPart2(bool display = true)
{
long score = 0;
-
+
foreach (var line in Input.ReadAllLines())
{
var adversaryChoice = AdversaryInputToChoice(line[0]);
@@ -50,8 +53,11 @@ public class Day2 : Day
score += (long) selfChoice;
score += (long) desiredOutcome;
}
-
- AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
+ }
}
private Outcome ComputeOutcome(Choice adversary, Choice self) => (adversary, self) switch
@@ -83,7 +89,7 @@ public class Day2 : Day
'C' => Choice.Scissors,
_ => throw new ArgumentException("Invalid input")
};
-
+
private Choice SelfInputToChoice(char input) => input switch
{
'X' => Choice.Rock,
diff --git a/Days/Day3.cs b/Days/Day3.cs
index 922edbd..6789900 100644
--- a/Days/Day3.cs
+++ b/Days/Day3.cs
@@ -7,7 +7,7 @@ public class Day3 : Day
public override int Number => 3;
public override string Name => "Rucksack Reorganization";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
long sum = 0;
@@ -22,10 +22,13 @@ public class Day3 : Day
sum += CharToPriority(common);
}
- AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
long sum = 0;
@@ -40,10 +43,13 @@ public class Day3 : Day
sum += CharToPriority(common);
}
- AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
+ }
}
- private int CharToPriority(char c)
+ private static int CharToPriority(char c)
{
if (char.IsLower(c))
{
diff --git a/Days/Day4.cs b/Days/Day4.cs
index 5dd2b0c..5c891f1 100644
--- a/Days/Day4.cs
+++ b/Days/Day4.cs
@@ -6,7 +6,7 @@ public class Day4 : Day
{
public override int Number => 4;
public override string Name => "Camp Cleanup";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
int overlaps = 0;
foreach (var line in Input.ReadAllLines())
@@ -18,7 +18,7 @@ public class Day4 : Day
var firstSection = sections[0];
var secondSection = sections[1];
-
+
// Check if first section contains second section
if (firstSection.Start <= secondSection.Start && firstSection.End >= secondSection.End)
{
@@ -30,11 +30,14 @@ public class Day4 : Day
overlaps++;
}
}
-
- AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
int overlaps = 0;
foreach (var line in Input.ReadAllLines())
@@ -46,15 +49,18 @@ public class Day4 : Day
var firstSection = sections[0];
var secondSection = sections[1];
-
+
// Check if first section overlaps second
if (firstSection.Start <= secondSection.End && firstSection.End >= secondSection.Start)
{
overlaps++;
}
}
-
- AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
+ }
}
#region Input
diff --git a/Days/Day5.cs b/Days/Day5.cs
index 11da5ab..335a010 100644
--- a/Days/Day5.cs
+++ b/Days/Day5.cs
@@ -9,7 +9,7 @@ public class Day5 : Day
private IDictionary>? _stacks;
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
_stacks = InitStacks();
@@ -26,14 +26,17 @@ public class Day5 : Day
}
}
- for (int i = 1; i <= 9; i++)
+ if (display)
{
- AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
+ for (int i = 1; i <= 9; i++)
+ {
+ AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
+ }
+ AnsiConsole.WriteLine();
}
- AnsiConsole.WriteLine();
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
_stacks = InitStacks();
@@ -53,11 +56,14 @@ public class Day5 : Day
}
}
- for (int i = 1; i <= 9; i++)
+ if (display)
{
- AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
+ for (int i = 1; i <= 9; i++)
+ {
+ AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
+ }
+ AnsiConsole.WriteLine();
}
- AnsiConsole.WriteLine();
}
#region Input
diff --git a/Days/Day6.cs b/Days/Day6.cs
index 21722cc..534a5b4 100644
--- a/Days/Day6.cs
+++ b/Days/Day6.cs
@@ -6,7 +6,7 @@ public class Day6 : Day
{
public override int Number => 6;
public override string Name => "Tuning Trouble";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
int position = 0;
@@ -30,10 +30,13 @@ public class Day6 : Day
charStream.Dequeue();
}
- AnsiConsole.MarkupLine($"[green]Position of start-of-packet marker is: [yellow]{position}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Position of start-of-packet marker is: [yellow]{position}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
const int length = 14;
int position = 0;
@@ -48,7 +51,7 @@ public class Day6 : Day
for (int i = length - 1; i < Input.Length; i++)
{
charStream.Enqueue(Input[i]);
-
+
// Check if all 14 chars are different
if (charStream.ToHashSet().Count == charStream.Count)
{
@@ -59,7 +62,10 @@ public class Day6 : Day
charStream.Dequeue();
}
- AnsiConsole.MarkupLine($"[green]Position of start-of-message marker is: [yellow]{position}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Position of start-of-message marker is: [yellow]{position}[/][/]");
+ }
}
#region Input
diff --git a/Days/Day7.cs b/Days/Day7.cs
index 06a8a66..012862b 100644
--- a/Days/Day7.cs
+++ b/Days/Day7.cs
@@ -32,7 +32,7 @@ public class Day7 : Day
{
public override int Number => 7;
public override string Name => "No Space Left On Device";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
var fileSystem = ParseFileSystem();
@@ -42,10 +42,13 @@ public class Day7 : Day
.Where(d => d.Size < 100_000)
.Sum(d => d.Size);
- AnsiConsole.MarkupLine($"[green]Total size: [yellow]{totalSize}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Total size: [yellow]{totalSize}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
const long fileSystemSpace = 70_000_000;
const long requiredSpace = 30_000_000;
@@ -63,7 +66,10 @@ public class Day7 : Day
.Where(d => d.Size > missingSpace)
.MinBy(d => d.Size);
- AnsiConsole.MarkupLine($"[green]Directory to remove size: [yellow]{directoryToRemove!.Size}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Directory to remove size: [yellow]{directoryToRemove!.Size}[/][/]");
+ }
}
private static DirectoryEntry ParseFileSystem()
diff --git a/Days/Day8.cs b/Days/Day8.cs
index 02605f5..ba354e5 100644
--- a/Days/Day8.cs
+++ b/Days/Day8.cs
@@ -6,7 +6,7 @@ public class Day8 : Day
{
public override int Number => 8;
public override string Name => "Treetop Tree House";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
var grid = CreateGrid();
@@ -92,10 +92,14 @@ public class Day8 : Day
}
}
- AnsiConsole.MarkupLine($"[green]Total viewable trees: [yellow]{valid.Count}[/][/]");
+
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Total viewable trees: [yellow]{valid.Count}[/][/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
var grid = CreateGrid();
@@ -116,7 +120,10 @@ public class Day8 : Day
}
}
- AnsiConsole.MarkupLine($"[green]Max scenic score: [yellow]{maxScenicScore}[/][/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]Max scenic score: [yellow]{maxScenicScore}[/][/]");
+ }
}
private int ComputeScenicScore(int[,] grid, int i, int j, int size)
diff --git a/Days/Day9.cs b/Days/Day9.cs
index 81f8523..13c0007 100644
--- a/Days/Day9.cs
+++ b/Days/Day9.cs
@@ -7,7 +7,7 @@ public class Day9 : Day
public override int Number => 9;
public override string Name => "Rope Bridge";
- public override void RunPart1()
+ public override void RunPart1(bool display = true)
{
// Start
(int x, int y) start = (0, 0);
@@ -49,10 +49,13 @@ public class Day9 : Day
}
}
- AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
+ }
}
- public override void RunPart2()
+ public override void RunPart2(bool display = true)
{
const int tailSegments = 9;
@@ -130,7 +133,10 @@ public class Day9 : Day
}
}
- AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
+ if (display)
+ {
+ AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
+ }
}
#region Input
diff --git a/Program.cs b/Program.cs
index 7635722..edc523e 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,9 +1,18 @@
-
-using System.Diagnostics;
+using System.Diagnostics;
using System.Reflection;
+using AdventOfCode;
using AdventOfCode.Days;
+using BenchmarkDotNet.Running;
using Spectre.Console;
+// Benchmark
+if (args is ["--bench" or "-b"])
+{
+ BenchmarkRunner.Run();
+ Environment.Exit(0);
+}
+
+// Normal run
var days = Assembly.GetAssembly(typeof(Day))!.GetTypes()
.Where(t => t.IsAssignableTo(typeof(Day)) && t.GetConstructor(Type.EmptyTypes) != null && !t.IsAbstract)
.Select(t => (Day)Activator.CreateInstance(t)!);