diff --git a/AdventOfCode.csproj b/AdventOfCode.csproj
index ddbe11f..a698010 100644
--- a/AdventOfCode.csproj
+++ b/AdventOfCode.csproj
@@ -2,7 +2,7 @@
Exe
- net7.0
+ net8.0
enable
enable
@@ -12,4 +12,9 @@
+
+
+
+
+
diff --git a/DayBenchmarker.cs b/DayBenchmarker.cs
index 94b11e5..fd3cdc7 100644
--- a/DayBenchmarker.cs
+++ b/DayBenchmarker.cs
@@ -7,7 +7,13 @@ namespace AdventOfCode;
[MemoryDiagnoser(false)]
public class DayBenchmark
{
- private Day Day => new Day15();
+ private Day Day { get; } = new Day1();
+
+ [GlobalSetup]
+ public void Setup()
+ {
+ Day.ReadInput();
+ }
[Benchmark]
public void Part1()
diff --git a/Days/Day.cs b/Days/Day.cs
index 1e3b747..e74e006 100644
--- a/Days/Day.cs
+++ b/Days/Day.cs
@@ -1,3 +1,5 @@
+using System.Reflection;
+
namespace AdventOfCode.Days;
public abstract class Day
@@ -5,9 +7,19 @@ public abstract class Day
public abstract int Number { get; }
public abstract string Name { get; }
+ protected string Input { get; private set; } = null!;
+
public abstract void RunPart1(bool display = true);
public abstract void RunPart2(bool display = true);
+ public void ReadInput()
+ {
+ using var inputStream = Assembly.GetExecutingAssembly()
+ .GetManifestResourceStream($"AdventOfCode.Inputs.Day{Number}.txt")!;
+
+ Input = new StreamReader(inputStream).ReadToEnd();
+ }
+
public override string ToString()
{
return $"Day {Number}: {Name}";
diff --git a/Days/Day1.cs b/Days/Day1.cs
index 0c53261..2b01327 100644
--- a/Days/Day1.cs
+++ b/Days/Day1.cs
@@ -5,2309 +5,96 @@ namespace AdventOfCode.Days;
public class Day1 : Day
{
public override int Number => 1;
- public override string Name => "Calorie Counting";
+ public override string Name => "Trebuchet?!";
+
+ private static readonly (string, int)[] WrittenDigits =
+ [
+ ("one" , 1),
+ ("two" , 2),
+ ("three", 3),
+ ("four" , 4),
+ ("five" , 5),
+ ("six" , 6),
+ ("seven", 7),
+ ("eight", 8),
+ ("nine" , 9)
+ ];
public override void RunPart1(bool display = true)
{
- int currentCalories = 0;
- int maxCalories = 0;
- foreach (var line in Input.ReadAllLines())
+ var calibrationSum = 0;
+
+ foreach (var line in Input.AsSpan().EnumerateLines())
{
- // Next elf on empty line
- if (string.IsNullOrWhiteSpace(line))
- {
- if (currentCalories > maxCalories)
- {
- maxCalories = currentCalories;
- }
+ var firstDigitIndex = line.IndexOfAnyInRange('0', '9');
+ var lastDigitIndex = line.LastIndexOfAnyInRange('0', '9');
- currentCalories = 0;
- continue;
- }
+ var firstDigit = line[firstDigitIndex] - '0';
+ var lastDigit = line[lastDigitIndex] - '0';
- currentCalories += int.Parse(line);
+ calibrationSum += firstDigit * 10 + lastDigit;
}
if (display)
{
- AnsiConsole.MarkupLine($"[green]Max calories is: [yellow]{maxCalories}[/][/]");
+ AnsiConsole.MarkupLine($"[green]Sum of calibration values is: [yellow]{calibrationSum}[/][/]");
}
}
public override void RunPart2(bool display = true)
{
- var elfCalories = new List();
+ var calibrationSum = 0;
- int currentCalories = 0;
- foreach (var line in Input.ReadAllLines())
+ foreach (var line in Input.AsSpan().EnumerateLines())
{
- // Next elf on empty line
- if (string.IsNullOrWhiteSpace(line))
- {
- elfCalories.Add(currentCalories);
+ var minFirstDigitIndex = line.IndexOfAnyInRange('0', '9');
+ var maxLastDigitIndex = line.LastIndexOfAnyInRange('0', '9');
- currentCalories = 0;
- continue;
+ var firstDigitValue = 0;
+ if (minFirstDigitIndex == -1)
+ {
+ minFirstDigitIndex = int.MaxValue;
+ }
+ else
+ {
+ firstDigitValue = line[minFirstDigitIndex] - '0';
}
- currentCalories += int.Parse(line);
- }
+ var lastDigitValue = 0;
+ if (maxLastDigitIndex == -1)
+ {
+ maxLastDigitIndex = int.MinValue;
+ }
+ else
+ {
+ lastDigitValue = line[maxLastDigitIndex] - '0';
+ }
- var totalCalories = elfCalories.OrderByDescending(c => c).Take(3).Sum();
+ foreach (var (writtenDigit, value) in WrittenDigits)
+ {
+ var firstWrittenDigitIndex = line.IndexOf(writtenDigit);
+
+ if (firstWrittenDigitIndex != -1 && firstWrittenDigitIndex < minFirstDigitIndex)
+ {
+ minFirstDigitIndex = firstWrittenDigitIndex;
+ firstDigitValue = value;
+ }
+
+ var lastWrittenDigitIndex = line.LastIndexOf(writtenDigit);
+
+ if (lastWrittenDigitIndex != -1 && lastWrittenDigitIndex > maxLastDigitIndex)
+ {
+ maxLastDigitIndex = lastWrittenDigitIndex;
+ lastDigitValue = value;
+ }
+ }
+
+ calibrationSum += 10 * firstDigitValue + lastDigitValue;
+ }
if (display)
{
- AnsiConsole.MarkupLine($"[green]Total calories by top 3 elf is: [yellow]{totalCalories}[/][/]");
+ AnsiConsole.MarkupLine($"[green]Sum of calibration values is: [yellow]{calibrationSum}[/][/]");
}
}
-
- #region Input
- public const string Input =
- """
- 10062
- 15651
- 1271
- 14355
- 7220
-
- 4878
- 1754
- 8466
- 4741
- 2582
- 3003
- 5327
- 3172
- 1327
- 6310
-
- 22413
- 4145
- 22294
-
- 23108
- 30453
-
- 2084
- 3496
- 4800
- 1388
- 8728
- 6380
- 6397
- 2558
- 2120
- 6159
-
- 25265
- 20200
- 2083
-
- 7424
- 5830
- 2575
- 2825
- 2234
- 6106
- 5505
- 2847
- 2059
- 7145
- 7223
-
- 58621
-
- 2926
- 9188
- 7432
- 1639
- 7420
- 1161
- 5517
- 2703
- 5446
-
- 2457
- 5814
- 1294
- 3280
- 8531
- 8214
- 4736
- 1964
- 1155
- 2380
-
- 2812
- 1827
- 5533
- 1756
- 1491
- 4127
- 6452
- 5935
- 1415
- 6221
- 3489
- 2681
- 4849
- 5250
-
- 2922
- 10365
- 5819
- 10227
- 2962
- 2702
-
- 2982
- 9254
- 14137
- 5026
- 9374
-
- 5933
- 2888
- 2250
- 4514
- 1825
- 5616
- 3497
- 2988
- 1181
- 3836
- 1032
- 5847
- 5383
-
- 5044
- 5922
- 3155
- 1610
- 5510
- 5016
- 6666
- 7024
- 4649
- 2764
- 6444
-
- 12932
-
- 4764
- 4285
- 1278
- 5020
- 5917
- 1888
- 4757
- 6323
- 5067
- 1314
- 1530
- 5748
- 5573
- 5848
-
- 6078
- 6687
- 5510
- 7642
- 6719
- 4376
- 7733
- 1356
- 4064
- 4159
-
- 7426
- 1147
- 4176
- 2797
- 9484
- 7907
- 10806
-
- 24981
- 21675
- 9324
-
- 5537
- 5730
- 1280
- 2090
- 2963
- 5992
- 6043
- 5141
- 3039
- 2120
- 3664
- 3816
- 3859
- 5406
-
- 1315
- 8662
- 2280
- 11800
- 10201
- 3886
-
- 3048
- 4147
- 3299
- 3912
- 1571
- 4582
- 1621
- 2201
- 4543
- 5377
- 3016
- 5297
- 5213
- 1338
- 3929
-
- 5456
- 4051
- 1621
- 5228
- 2672
- 3277
- 4006
- 4954
- 1487
- 5361
- 3298
- 4335
- 3015
- 1139
-
- 2875
- 6387
- 2926
- 5439
- 3494
- 5287
- 3793
- 3714
- 4944
- 1094
- 6728
- 3302
- 6345
-
- 9641
- 5967
- 10265
- 1129
- 3759
- 5632
- 4913
- 6151
-
- 5890
- 4285
- 3601
- 3344
- 7294
- 6321
- 2730
- 6352
- 2350
- 7214
- 4034
- 1032
-
- 4266
- 2086
- 12754
- 8475
- 5044
- 9616
-
- 27815
- 19415
-
- 7914
- 11106
- 6938
- 10695
- 6902
- 2983
- 3710
-
- 7659
- 3565
- 1310
- 11842
-
- 8750
- 17624
- 9697
- 16020
-
- 4606
- 6296
- 2321
- 1272
- 3504
- 7121
- 2313
- 8016
- 7910
- 4786
-
- 11012
- 12831
- 3980
- 12204
-
- 7996
- 7933
- 1500
- 1810
- 4030
- 8645
- 1710
- 7506
- 8096
- 8661
-
- 5694
- 4145
- 3095
- 3963
- 2396
- 5197
- 6086
- 6793
- 5924
- 5043
- 1241
- 5011
-
- 2410
- 7373
- 6724
- 2641
- 1827
- 8344
- 6833
- 8336
- 6517
- 1376
-
- 6084
- 9909
- 1760
- 10864
- 4904
- 6734
- 9492
-
- 8002
- 4098
-
- 17545
- 1504
- 17040
- 14118
-
- 1103
- 5378
- 6135
- 6207
- 3143
- 5550
- 5723
- 5494
- 2841
- 1461
- 2413
- 2252
- 1904
- 3474
-
- 1788
- 5889
- 7810
- 8520
- 5415
- 4633
- 1422
- 9526
- 6762
-
- 1187
- 2137
- 6551
- 8399
- 1510
- 7099
- 3465
- 5179
-
- 7056
- 3142
- 3237
- 4910
- 6656
- 3680
- 2619
- 5549
- 5737
- 4493
- 5359
- 1336
-
- 4690
- 6692
- 4638
- 5490
- 6449
- 1518
- 5872
- 7935
- 7742
- 1895
- 4528
-
- 4929
- 5947
- 5044
- 1627
- 5037
- 6646
- 5949
- 2142
- 2362
- 3050
- 6390
- 5467
- 5496
-
- 11896
- 13381
- 1055
- 3993
- 4275
- 12480
-
- 1903
- 1527
- 3280
- 3748
- 3315
- 1058
- 2541
- 4245
- 4386
- 4792
- 4937
- 2345
- 2551
- 1901
-
- 2674
- 9184
- 3423
- 1954
- 2788
- 5954
- 7827
- 4466
- 4901
-
- 4653
- 12104
- 14737
- 8740
- 4164
-
- 5317
- 5734
- 4580
- 3244
- 5509
- 4009
- 2576
- 4137
- 1282
- 5506
- 3530
- 3057
- 5408
- 5952
- 1849
-
- 9691
- 16403
- 16828
-
- 3653
- 6762
- 2042
- 4618
- 4212
- 6293
- 4782
- 2071
- 6303
- 1662
- 6814
-
- 3720
- 6801
- 2350
- 4456
- 4623
- 3242
- 2471
- 4104
- 4096
- 3641
- 4022
- 3702
- 3169
-
- 7146
- 5318
- 1820
- 3845
- 4955
- 4134
- 8848
- 6614
- 5497
-
- 11545
- 4050
- 20095
-
- 8230
- 11577
- 6426
- 4671
- 11838
-
- 1726
- 7355
- 8115
- 2780
-
- 1795
- 4697
- 10410
- 8064
- 2370
- 9497
- 1221
-
- 2909
- 6719
- 2733
- 4335
- 1327
- 1672
- 1297
- 6705
- 5209
- 6690
- 5855
- 5432
- 3804
-
- 7874
- 7949
- 6658
- 1621
- 8850
- 3235
- 9142
- 2856
-
- 6968
- 7042
-
- 7463
- 8035
- 4908
- 5032
- 4791
- 2030
- 1768
- 8611
- 2114
- 8748
-
- 11054
- 16021
- 9826
- 11604
- 4819
-
- 11214
- 4850
- 11665
- 1891
- 1347
- 4053
- 4570
-
- 66862
-
- 1597
- 6127
- 6229
- 11518
- 9308
- 9661
- 11410
-
- 13224
- 1160
- 1978
- 13018
- 14604
-
- 2773
- 3885
- 2383
- 2850
- 1758
- 5724
- 4418
- 4637
- 1510
- 3870
- 3793
- 4116
- 6281
- 2026
-
- 3714
- 2840
- 2116
- 3505
- 3941
- 6676
- 5696
- 3216
- 6406
- 4660
- 4974
- 2005
- 5293
-
- 2580
- 1645
- 5677
- 5376
- 6527
- 4410
- 6837
- 3069
- 2399
- 3727
- 5658
- 4817
- 5911
-
- 2126
- 2851
- 2766
- 8660
- 8181
- 3449
- 2765
- 1299
-
- 18470
- 9129
- 17956
- 14494
-
- 1033
- 4468
- 5938
- 2874
- 2406
- 1175
- 5997
-
- 1256
- 7932
- 1544
- 2772
- 5709
- 1348
- 2919
-
- 4399
- 1449
- 8295
- 7470
- 2088
- 1958
- 2857
- 1722
- 5204
-
- 8161
- 6865
- 6428
- 4807
- 2173
- 8614
- 5109
- 1769
- 2125
-
- 1112
- 7417
- 1328
- 6385
- 4670
- 2840
- 3293
- 6438
- 6639
- 6129
- 4144
-
- 5554
- 15529
- 1499
-
- 9459
- 3175
- 7412
- 10610
- 10283
- 6807
- 10056
- 8657
-
- 5195
- 1397
- 5365
- 3713
- 4376
- 4034
- 2480
- 2665
- 2566
- 4664
- 5262
- 5913
- 2455
- 6048
- 4488
-
- 10875
-
- 5322
- 8688
- 2636
- 14243
-
- 11403
- 7465
- 10079
- 2270
- 15254
-
- 11758
- 7630
- 5137
- 6345
- 7119
- 10008
- 6125
-
- 5184
-
- 4306
- 1159
- 6483
- 5131
- 5009
- 4585
- 2996
- 3514
- 4009
- 4788
- 6841
- 2189
- 3030
-
- 3132
- 6730
- 5733
- 2747
- 6464
- 5221
- 4567
- 3528
- 4264
- 6006
- 3295
-
- 4829
- 23038
- 16150
-
- 1519
- 10692
- 11102
- 6321
- 2948
- 11851
- 6301
-
- 5787
- 2664
- 6046
- 4527
- 1955
- 5270
- 1557
- 4567
- 5631
- 2150
- 4612
- 3044
- 2568
- 3589
- 5334
-
- 2303
- 10849
- 3983
- 10010
- 4854
- 2111
-
- 4576
- 1236
- 3111
- 4898
- 5930
- 5241
- 2783
- 5451
- 6549
- 5623
- 7257
- 2589
-
- 6031
- 4307
- 6669
- 7866
- 4333
- 2069
- 2778
- 5463
- 7149
- 3091
- 1001
-
- 8737
- 1843
- 4676
- 4381
- 6164
- 2616
- 2453
- 1739
- 4845
- 2909
-
- 1396
- 2963
- 10672
- 11217
- 9975
- 6511
- 8694
-
- 5262
- 3743
- 1895
- 3811
- 6089
- 4659
- 4195
- 4633
- 1928
- 3865
- 2166
- 4947
- 5040
- 4052
- 5291
-
- 16754
- 8916
- 17259
- 17813
-
- 9683
- 13286
- 13577
- 9343
- 1792
- 3335
-
- 25505
- 12891
- 20104
-
- 8618
- 6560
- 4584
- 1118
- 3931
- 1229
- 6759
- 8275
-
- 18418
- 14090
- 3552
- 3156
-
- 4681
- 2564
- 4557
- 4838
- 2048
- 3097
- 4513
- 5181
- 3803
- 1857
- 3836
- 3089
- 4322
- 4049
-
- 3768
- 12991
- 1680
- 2378
-
- 2609
- 5115
- 2179
- 6126
- 1423
- 1300
- 6113
- 3720
- 1279
- 4681
- 1147
- 1728
- 2087
- 4708
-
- 11919
- 12306
- 11697
- 9806
- 11749
- 3995
-
- 5298
- 1877
- 2065
- 10499
- 3493
- 2892
-
- 4172
- 2913
- 2288
- 7358
- 1065
- 3030
- 5316
- 5023
- 1876
- 2610
- 5309
- 5175
-
- 6904
- 9471
- 1232
- 1741
- 2239
- 8554
- 6327
- 6507
- 7603
-
- 23962
- 3536
-
- 3214
- 1102
- 3823
- 1876
- 3929
- 4890
- 5526
- 3009
- 2619
- 1565
- 3364
- 1392
- 2407
- 3129
- 3586
-
- 8438
- 2649
- 4887
- 4306
- 1675
- 2870
- 2014
- 1160
- 6542
- 8475
-
- 10172
- 1686
- 5999
- 9145
- 10361
- 7814
-
- 3049
- 5192
- 2091
- 4788
- 3460
- 2701
- 2441
- 2485
- 2440
- 2256
- 5054
- 4631
- 5652
- 3636
- 3827
-
- 5944
- 7870
- 2055
- 9296
- 7574
- 8691
- 8852
-
- 2178
- 1658
- 6451
- 6725
- 1093
- 6265
- 7412
- 5641
- 2348
- 5377
- 2680
-
- 6607
- 13797
- 10728
- 6412
-
- 10824
- 25891
- 24424
-
- 2278
- 3407
- 1688
- 6069
- 2324
- 1868
- 6037
- 2496
- 3324
- 5346
- 4118
- 3881
- 5260
- 2094
- 2334
-
- 3330
- 2884
- 6186
- 5513
- 3483
- 6790
- 4571
- 4173
- 4569
- 1909
- 5574
-
- 2073
- 2159
- 1468
- 6189
- 2770
- 5299
- 2039
- 4247
- 6289
- 5453
- 3797
- 1432
- 5501
- 2600
-
- 7484
- 8409
- 8216
- 1966
- 2720
- 5125
- 5532
- 10092
-
- 3704
- 4032
- 13787
- 14642
- 6007
-
- 2893
- 3724
- 6947
- 5569
- 6284
- 5015
- 6589
- 4359
- 3846
- 5402
- 5771
- 2995
-
- 3027
- 2193
- 4194
- 6211
- 4912
- 4523
- 3402
- 4199
- 4777
- 5955
- 3217
- 6162
- 1556
- 5269
-
- 6162
- 7433
- 2853
- 4649
- 4505
- 7220
- 5276
- 1873
- 6655
- 5549
- 2992
-
- 3304
- 3655
- 2028
- 4079
- 5182
- 6830
- 3885
- 2274
- 2769
- 2514
- 2146
-
- 2616
- 5717
- 1758
- 2847
- 4579
- 1853
- 1556
- 2043
- 1293
- 1566
- 2327
- 6678
- 5738
-
- 17934
- 19341
-
- 6652
- 3289
- 6927
- 2152
- 2094
- 2458
- 5635
- 6927
- 4626
- 6846
- 5324
- 6085
- 2571
-
- 4344
- 6656
- 3831
- 4768
- 12536
- 13166
-
- 2696
- 5427
- 9429
- 1393
- 5758
- 9578
- 4958
-
- 6889
- 3107
- 1112
- 3035
- 4159
- 3697
- 4832
- 2604
- 6318
- 2804
- 4325
- 5497
- 4214
-
- 3588
- 5313
- 1330
- 8568
- 9017
- 1794
- 9578
- 8426
- 4836
-
- 31988
-
- 5561
- 3355
- 5593
- 3448
- 2235
- 3836
- 2375
- 2690
- 1704
- 3729
- 2626
- 6329
- 3297
- 5067
-
- 4244
- 1729
- 1598
- 1025
- 5921
- 3214
- 2230
- 4120
- 1274
- 1136
- 5798
- 4259
- 2821
- 1968
-
- 5291
- 7790
- 8452
- 1235
- 10438
- 2069
- 1365
- 9288
-
- 5533
- 4261
- 6170
- 1884
- 5315
- 2901
- 3588
- 2903
- 2441
- 2264
- 3162
- 4188
- 3993
- 1592
-
- 15202
- 9385
- 17135
- 10731
-
- 4591
- 2068
- 1136
- 4292
- 4351
- 2100
- 6075
- 4463
- 5887
- 4507
- 1273
- 3815
- 3595
- 4846
-
- 8033
- 7540
- 9200
- 10554
- 2572
- 2148
- 7195
- 9335
-
- 6923
- 4006
- 5057
- 1209
- 5025
- 4788
- 2977
- 3924
- 1149
- 5407
- 3240
- 4363
- 2870
-
- 18428
- 1484
- 6717
-
- 21437
- 10877
-
- 13896
- 13142
- 14976
- 4279
- 7760
-
- 3736
- 3606
- 6255
- 1070
- 4078
- 1204
- 4140
- 5864
- 5772
- 3706
- 4794
- 1810
- 3891
-
- 7568
- 9015
- 8576
- 9630
- 4006
- 8770
- 7403
- 7606
- 8039
-
- 3523
- 5469
- 4603
- 7988
- 6196
- 6253
- 7393
- 7866
- 1976
- 8036
- 1708
-
- 23475
-
- 58206
-
- 8598
- 4206
- 7981
- 1145
- 8057
- 3214
- 2519
- 4155
- 6886
- 7736
-
- 10064
- 5532
- 4310
-
- 5605
- 6163
- 3079
- 5633
- 7550
- 1557
- 3957
- 3829
- 8064
- 5976
-
- 14566
- 2324
- 11737
- 8884
-
- 5741
- 9973
- 5120
- 8385
- 6468
- 6446
-
- 12939
- 7370
- 11204
- 3902
-
- 6531
- 6059
- 3199
- 4544
- 2988
- 6196
- 5805
- 2947
- 6562
- 6497
- 5311
- 1092
- 3929
-
- 2969
- 5314
- 5341
- 7533
- 1601
- 9340
- 1458
- 4516
- 1911
-
- 18278
- 17057
- 19676
- 13319
-
- 1740
- 1218
- 7693
- 7610
- 1179
- 2611
- 2494
- 1995
- 2606
- 3634
- 4818
-
- 51246
-
- 7826
- 5544
- 5835
- 5983
- 5180
- 7833
- 8681
- 7170
- 1166
- 7254
-
- 2013
- 4870
- 1732
- 5678
- 5275
- 4257
- 3686
- 6372
- 6335
- 2539
- 1566
- 3028
- 1304
- 3809
-
- 4410
- 6375
- 5386
- 7307
- 2385
- 6675
- 1443
- 5057
- 4051
- 5263
- 4460
-
- 3437
- 4993
- 6230
- 2211
- 6522
- 4888
- 5539
- 4875
- 4449
- 3257
- 1333
- 3603
-
- 1433
- 4953
- 4098
- 10882
- 8320
- 11840
- 10795
-
- 6925
- 7292
- 9340
- 2198
- 1406
- 2490
- 5490
- 6380
- 6512
-
- 4332
- 2273
- 3506
- 6399
- 3161
- 2458
- 4217
- 2567
- 4582
- 2109
- 4513
- 5392
-
- 2597
- 7554
- 9150
- 5701
- 8972
- 7443
- 6788
- 3224
-
- 6098
- 7293
- 6994
- 8305
- 7896
- 2339
- 3312
- 7702
- 3616
-
- 55975
-
- 2514
- 10887
-
- 7264
- 10835
- 21533
-
- 6666
- 1428
- 6668
- 7673
- 2755
- 3344
- 5937
- 6942
- 7279
- 7284
- 3344
-
- 4809
-
- 4748
- 7859
- 5322
- 3460
- 3728
- 2462
- 7973
- 1576
-
- 1207
- 1949
- 2608
- 1448
- 2317
- 3410
- 7804
- 2404
- 9159
-
- 38251
-
- 10983
- 5513
- 9496
- 7341
- 11958
- 7265
-
- 10483
- 7081
- 5477
- 12178
-
- 8421
- 13928
- 7231
- 10781
- 11620
-
- 7219
- 2204
- 5179
- 5011
- 4139
- 2160
- 6130
- 1902
- 5293
- 8458
-
- 13895
- 10711
- 10857
- 14214
-
- 9062
- 4001
- 8483
- 4260
- 9408
-
- 8856
- 2473
- 4738
- 9554
- 1238
- 6186
- 1747
- 6853
- 8308
-
- 6468
- 5359
- 8925
- 7929
- 9055
- 6194
- 4431
- 4177
-
- 1452
- 2594
- 5079
- 6108
- 7286
- 6997
- 1052
- 4952
- 2458
- 5843
- 3390
-
- 59084
-
- 4350
- 2892
- 6057
- 6449
- 3274
- 4882
- 2824
- 2625
- 2761
- 6381
- 1803
- 2641
- 6303
- 3518
-
- 4595
- 15941
- 14489
- 12371
- 13428
-
- 6748
- 3113
- 13130
- 13855
- 10202
-
- 4461
- 4550
- 3781
- 5173
- 2232
- 3067
- 3125
- 3914
- 5166
- 4059
- 1403
- 1913
- 2538
- 5819
-
- 5492
- 2956
- 6397
- 5485
- 3908
- 1764
- 2853
- 2690
- 2751
- 6816
- 6510
- 5134
- 2251
-
- 1912
- 11885
- 9792
- 9026
-
- 15319
- 21333
- 4765
-
- 1510
- 1760
- 1193
- 5378
- 5539
- 1362
- 3155
- 6051
- 3748
- 5010
- 4280
- 1834
- 5830
- 1273
- 2963
-
- 2625
- 5173
- 2499
- 5779
- 3165
- 2148
- 2098
- 4888
- 2787
- 5898
- 3977
- 2740
- 2160
- 1791
- 2522
-
- 20725
-
- 15813
- 26702
-
- 1464
- 3116
- 7046
- 5531
- 13731
-
- 4178
- 4204
- 3722
- 2109
- 1772
- 3920
- 2560
- 4029
- 5846
- 4360
- 4538
- 4889
- 2312
- 1086
- 1093
-
- 1020
- 3213
- 1017
- 3650
- 4290
- 2888
- 4208
- 2723
- 4149
- 2381
- 3332
- 1308
- 2755
- 4357
-
- 3010
- 5317
- 1507
- 5472
- 2171
- 6005
- 4331
- 5355
- 3211
- 3797
- 3963
- 3738
- 1899
- 3390
- 1455
-
- 2098
- 6531
- 3206
- 4272
- 7461
- 5093
- 5370
- 5502
- 1543
- 4543
- 5069
- 3491
-
- 3195
- 3617
- 1509
- 2926
- 1668
- 5901
- 5893
- 3950
- 2428
- 2572
- 2390
- 4899
- 2234
- 3937
- 3111
-
- 6510
- 1964
- 6255
- 1875
- 5118
- 3782
- 3884
- 5480
- 2808
- 4666
- 2827
- 3088
- 3182
- 3470
-
- 7230
- 5126
- 5584
- 4880
- 7753
- 6132
- 4098
- 2893
- 3148
- 4209
- 3646
-
- 2971
- 2439
- 2362
- 6416
- 5306
- 2714
- 4752
- 6354
- 4807
- 3723
- 4143
- 6503
-
- 8492
- 19004
- 6323
-
- 5999
- 7828
- 7411
- 4296
- 8321
- 5238
- 5709
- 5631
- 6110
- 1128
-
- 6126
- 7809
- 1458
- 15754
- 3603
-
- 8908
- 8693
- 8558
- 3270
- 5458
- 12906
-
- 2463
- 7423
- 6250
- 2029
- 15528
-
- 5146
- 6644
- 1905
- 6828
- 2572
- 4226
- 6264
- 4324
- 3369
- 5999
- 5373
- 5591
- 6634
-
- 2053
- 7877
- 2218
- 2415
- 2090
- 6433
- 8607
- 3502
- 8313
- 2841
-
- 5471
- 5190
- 4424
- 5184
- 3040
- 5373
- 4799
- 8122
- 1038
-
- 4988
- 2833
- 4461
- 2976
- 1168
- 5195
- 1043
- 2270
- 7339
- 7435
- 7226
- 5779
-
- 11587
- 6728
- 6765
- 11498
- 4711
- 3547
-
- 2878
- 8426
- 11717
- 8591
- 5481
- 10803
- 11181
-
- 4915
- 2093
- 6057
- 6957
- 13009
- 12971
-
- 17979
- 3250
- 19984
-
- 5650
- 5756
- 3307
- 10549
- 6717
- 9579
- 2849
- 6885
-
- 2609
- 2347
- 4692
- 5000
- 5068
- 5148
- 4337
- 4316
- 2654
- 2221
- 1822
-
- 13157
-
- 10140
- 5075
- 10446
- 2946
- 5902
- 5856
- 8096
- 8762
-
- 16951
- 9118
- 17962
-
- 7524
- 4389
- 3716
- 3580
- 5930
- 1197
- 3233
- 6070
- 4612
- 2477
- 6792
-
- 6403
- 11307
- 10753
- 9665
- 4919
- 6485
- 3189
-
- 8790
- 10424
- 8816
- 3840
- 6236
- 5529
- 8946
- 3864
-
- 1370
- 4810
- 3752
- 1664
- 1247
- 3227
- 4605
- 4906
- 5436
- 4534
- 4722
- 4104
- 5629
- 4962
- 3203
-
- 2120
- 4830
- 2859
- 2828
- 3020
- 5260
- 5795
- 3286
- 5247
- 6126
- 4156
- 3624
- 2730
-
- 58973
-
- 18871
- 8511
-
- 13088
- 1608
- 12123
- 5162
- 9357
- 2409
-
- 3194
- 2605
- 8440
- 9642
- 9067
- 5709
- 4431
- 5553
-
- 10532
- 36332
-
- 7227
- 10011
- 7519
- 4030
- 7444
- 2693
- 3845
-
- 10004
- 5735
- 9671
- 3576
- 7111
- 1292
- 10428
- 2800
-
- 4229
- 6072
- 3748
- 1466
- 2305
- 2664
- 2612
- 5054
- 2625
- 2778
- 2712
- 2788
- 5133
-
- 10716
- 11271
- 11169
- 9815
- 1641
- 1025
-
- 3016
- 3916
- 6618
- 4213
- 6968
- 3525
- 1944
- 6525
- 1920
- 8741
-
- 19472
-
- 15684
- 10706
- 14780
- 15411
- 9358
-
- 5290
- 8167
- 5269
- 7051
- 2848
- 3948
- 5987
- 4844
- 7749
- 5696
-
- 9032
- 12663
- 11173
- 14750
-
- 1121
- 2123
- 6582
- 5753
- 6358
- 2524
- 6486
- 2259
- 2197
- 1883
- 3005
- 2406
- 5967
- """;
- #endregion
}
\ No newline at end of file
diff --git a/Days/Day10.cs b/Days/Day10.cs
deleted file mode 100644
index 4cd424a..0000000
--- a/Days/Day10.cs
+++ /dev/null
@@ -1,287 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day10 : Day
-{
- public override int Number => 10;
- public override string Name => "Cathode-Ray Tube";
- public override void RunPart1(bool display = true)
- {
- int cycle = 1;
- int x = 1;
- long sum = 0;
-
- // Increment sum when needed
- void IncrementCycle()
- {
- cycle++;
-
- // Check for signal stength at the start of a cycle
- if ((cycle + 20) % 40 == 0)
- {
- sum += x * cycle;
- }
- }
-
- foreach (var line in Input.ReadAllLines())
- {
- // noop
- if (line == "noop")
- {
- // noop finished, go to next cycle
- IncrementCycle();
- }
- // addx
- else
- {
- var split = line.Split(' ');
- var v = int.Parse(split[1]);
-
- // Prepare addx
- IncrementCycle();
-
- // addx finished, add to x and then go to next cycle
- x += v;
- IncrementCycle();
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Sum of signal strengths: [yellow]{sum}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- // Setup the CRT
- const char litPixel = '#';
- const char darkPixel = '.';
-
- const int rowCount = 6;
- const int columnCount = 40;
- var crt = new char[rowCount, columnCount];
- var crtCanvas = new Canvas(columnCount, rowCount);
-
- // Now cycle is the position where the CRT is drawing (need to offset by 1 in the grid)
- int cycle = 1;
- // x is the position of the sprite
- int x = 1;
-
- // Draw first pixel
- crt[0, 0] = litPixel;
- crtCanvas.SetPixel(0, 0, Color.Red);
-
- // Increment sum when needed
- void IncrementCycle()
- {
- cycle++;
-
- // We're done drawing the crt
- if (cycle > 240)
- {
- return;
- }
-
- // Draw a white or black pixel
- int row = (cycle - 1) / columnCount;
- int column = (cycle - 1) % columnCount;
-
- // The CRT is drawing on the sprite
- if (column == x - 1 || column == x || column == x + 1)
- {
- crt[row, column] = litPixel;
- crtCanvas.SetPixel(column, row, (cycle + row) % 2 == 0 ? Color.Green : Color.Red);
- }
- else
- {
- crt[row, column] = darkPixel;
- crtCanvas.SetPixel(column, row, Color.Black);
- }
- }
-
- foreach (var line in Input.ReadAllLines())
- {
- // noop
- if (line == "noop")
- {
- // noop finished, go to next cycle
- IncrementCycle();
- }
- // addx
- else
- {
- var split = line.Split(' ');
- var v = int.Parse(split[1]);
-
- // Prepare addx
- IncrementCycle();
-
- // addx finished, add to x and then go to next cycle
- x += v;
- IncrementCycle();
- }
- }
-
- // Print the CRT
- if (display)
- {
- AnsiConsole.Write(crtCanvas);
- }
- }
-
- #region Input
-
- public const string Input =
- """
- noop
- noop
- addx 15
- addx -10
- noop
- noop
- addx 3
- noop
- noop
- addx 7
- addx 1
- addx 4
- addx -1
- addx 1
- addx 5
- addx 1
- noop
- noop
- addx 5
- addx -1
- noop
- addx 3
- noop
- addx 3
- addx -38
- noop
- addx 3
- addx 2
- addx 5
- addx 2
- addx 26
- addx -21
- addx -2
- addx 5
- addx 2
- addx -14
- addx 15
- noop
- addx 7
- noop
- addx 2
- addx -22
- addx 23
- addx 2
- addx 5
- addx -40
- noop
- noop
- addx 3
- addx 2
- noop
- addx 24
- addx -19
- noop
- noop
- noop
- addx 5
- addx 5
- addx 2
- noop
- noop
- noop
- noop
- addx 7
- noop
- addx 3
- noop
- addx 3
- addx -2
- addx 2
- addx 5
- addx -38
- noop
- noop
- noop
- addx 5
- addx 2
- addx -1
- addx 2
- addx 30
- addx -23
- noop
- noop
- noop
- noop
- addx 3
- addx 5
- addx -11
- addx 12
- noop
- addx 6
- addx 1
- noop
- addx 4
- addx 3
- noop
- addx -40
- addx 4
- addx 28
- addx -27
- addx 5
- addx 2
- addx 5
- noop
- noop
- addx -2
- addx 2
- addx 5
- addx 3
- noop
- addx 2
- addx -25
- addx 30
- noop
- addx 3
- addx -2
- addx 2
- addx 5
- addx -39
- addx 29
- addx -27
- addx 5
- noop
- noop
- noop
- addx 4
- noop
- addx 1
- addx 2
- addx 5
- addx 2
- noop
- noop
- noop
- noop
- addx 5
- addx 1
- noop
- addx 2
- addx 5
- addx -32
- addx 34
- noop
- noop
- noop
- noop
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day11.cs b/Days/Day11.cs
deleted file mode 100644
index 0f50f19..0000000
--- a/Days/Day11.cs
+++ /dev/null
@@ -1,233 +0,0 @@
-using System.Collections.Immutable;
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Monkey
-{
- public int Number { get; }
- public long InspectionCount { get; private set; }
-
- private readonly Queue _items;
- private readonly Func _operation;
- private readonly long _testDivider;
- private readonly int _testFailMonkey;
- private readonly int _testSuccessMonkey;
-
- public Monkey(int number, IEnumerable items, Func operation, long testDivider, int testFailMonkey, int testSuccessMonkey)
- {
- Number = number;
- _operation = operation;
- _testDivider = testDivider;
- _testFailMonkey = testFailMonkey;
- _testSuccessMonkey = testSuccessMonkey;
-
- InspectionCount = 0;
- _items = new Queue(items);
- }
-
- public void AddItem(long item)
- {
- _items.Enqueue(item);
- }
-
- public bool ThrowItem(IImmutableList monkeys, bool divideWorry = true)
- {
- // Return false if there's no item to throw
- if (_items.Count < 1)
- {
- return false;
- }
-
- // Increment inspection count
- InspectionCount++;
-
- // Take next item to throw
- var item = _items.Dequeue();
-
- // Apply the operation on worry level
- var newValue = _operation(item);
-
- // Divide worry level by 3 before test
- if (divideWorry)
- {
- 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);
-
- // Test is a success
- if (newValue % _testDivider == 0)
- {
- monkeys[_testSuccessMonkey].AddItem(newValue);
- }
- // Test is a fail
- else
- {
- monkeys[_testFailMonkey].AddItem(newValue);
- }
-
- return true;
- }
-}
-
-public class Day11 : Day
-{
- public override int Number => 11;
- public override string Name => "Monkey in the Middle";
- public override void RunPart1(bool display = true)
- {
- const int roundsCount = 20;
-
- var monkeys = ParseMonkeys();
-
- // Do 20 rounds
- for (int round = 0; round < roundsCount; round++)
- {
- foreach (var monkey in monkeys)
- {
- // Throw items while there's some
- while (monkey.ThrowItem(monkeys)) { }
- }
- }
-
- var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- const int roundsCount = 10_000;
-
- var monkeys = ParseMonkeys();
-
- // Do 10 000 rounds
- for (int round = 0; round < roundsCount; round++)
- {
- foreach (var monkey in monkeys)
- {
- // Throw items while there's some
- while (monkey.ThrowItem(monkeys, false)) { }
- }
- }
-
- var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
- }
- }
-
- private static IImmutableList ParseMonkeys()
- {
- var monkeys = new List();
-
- // Split by monkey description
- foreach (var monkey in Input.ReplaceLineEndings("\n").Split("\n\n"))
- {
- var split = monkey.Split('\n');
- var numberLine = split[0];
- var itemsLine = split[1];
- var operationLine = split[2];
- var testDividerLine = split[3];
- var testSuccessLine = split[4];
- var testFailLine = split[5];
-
- // Monkey attributes
- var number = int.Parse(numberLine[numberLine.LastIndexOf(' ')..^1]);
- var items = itemsLine[(itemsLine.IndexOf(':') + 2)..].Split(", ").Select(long.Parse);
-
- // Read operation
- operationLine = operationLine[(operationLine.IndexOf('=') + 2)..];
- long? rightOperand = operationLine.EndsWith("old") ? null : long.Parse(operationLine.Split('+', '*')[1].Trim());
-
- Func operation = operationLine.Contains('+') switch
- {
- true => rightOperand is null
- ? old => old + old
- : old => old + (int)rightOperand,
- false => rightOperand is null
- ? old => old * old
- : old => old * (int)rightOperand
- };
-
- var testDivider = long.Parse(testDividerLine[testDividerLine.LastIndexOf(' ')..]);
- var testSuccessMonkey = int.Parse(testSuccessLine[testSuccessLine.LastIndexOf(' ')..]);
- var testFailMonkey = int.Parse(testFailLine[testFailLine.LastIndexOf(' ')..]);
-
- monkeys.Add(new Monkey(number, items, operation, testDivider, testFailMonkey, testSuccessMonkey));
- }
-
- return monkeys.ToImmutableList();
- }
-
- #region Input
-
- public const string Input =
- """
- Monkey 0:
- Starting items: 89, 95, 92, 64, 87, 68
- Operation: new = old * 11
- Test: divisible by 2
- If true: throw to monkey 7
- If false: throw to monkey 4
-
- Monkey 1:
- Starting items: 87, 67
- Operation: new = old + 1
- Test: divisible by 13
- If true: throw to monkey 3
- If false: throw to monkey 6
-
- Monkey 2:
- Starting items: 95, 79, 92, 82, 60
- Operation: new = old + 6
- Test: divisible by 3
- If true: throw to monkey 1
- If false: throw to monkey 6
-
- Monkey 3:
- Starting items: 67, 97, 56
- Operation: new = old * old
- Test: divisible by 17
- If true: throw to monkey 7
- If false: throw to monkey 0
-
- Monkey 4:
- Starting items: 80, 68, 87, 94, 61, 59, 50, 68
- Operation: new = old * 7
- Test: divisible by 19
- If true: throw to monkey 5
- If false: throw to monkey 2
-
- Monkey 5:
- Starting items: 73, 51, 76, 59
- Operation: new = old + 8
- Test: divisible by 7
- If true: throw to monkey 2
- If false: throw to monkey 1
-
- Monkey 6:
- Starting items: 92
- Operation: new = old + 5
- Test: divisible by 11
- If true: throw to monkey 3
- If false: throw to monkey 0
-
- Monkey 7:
- Starting items: 99, 76, 78, 76, 79, 90, 89
- Operation: new = old + 7
- Test: divisible by 5
- If true: throw to monkey 4
- If false: throw to monkey 5
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day12.cs b/Days/Day12.cs
deleted file mode 100644
index a9e836d..0000000
--- a/Days/Day12.cs
+++ /dev/null
@@ -1,333 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day12 : Day
-{
- public override int Number => 12;
- public override string Name => "Hill Climbing Algorithm";
-
- public const int EndElevation = 25;
-
- // Color map of elevation: blue -> green -> yellow -> orange -> red
- private readonly Color[] _colorMap =
- {
- Color.Blue1,
- Color.DodgerBlue1,
- Color.DeepSkyBlue1,
- Color.Turquoise2,
- Color.Cyan1,
- Color.Cyan2,
- Color.MediumSpringGreen,
- Color.SpringGreen1,
- Color.SpringGreen2_1,
- Color.Green1,
- Color.DarkOliveGreen2,
- Color.GreenYellow,
- Color.DarkOliveGreen1,
- Color.Yellow2,
- Color.Khaki1,
- Color.Yellow1,
- Color.NavajoWhite1,
- Color.LightGoldenrod2_1,
- Color.Gold1,
- Color.SandyBrown,
- Color.Orange1,
- Color.DarkOrange,
- Color.OrangeRed1,
- Color.IndianRed1,
- Color.HotPink,
- Color.MediumOrchid1_1
- };
-
- private (int x, int y) _end;
- private (int x, int y) _start;
-
- public override void RunPart1(bool display = true)
- {
- var map = ParseMap();
- var canvas = DrawMap(map);
-
- // Test all possible solutions
- var minimumPathLength = ExplorePath(map);
-
- // Draw solution path
- foreach (var (x, y) in minimumPathLength.path)
- {
- canvas.SetPixel(x, y, Color.White);
- }
-
- if (display)
- {
- AnsiConsole.Write(canvas);
- AnsiConsole.WriteLine();
-
- AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- var map = ParseMap();
- var canvas = DrawMap(map);
-
- // Test all possible solutions
- var minimumPathLength = FindNearestStart(map);
-
- // Draw solution path
- foreach (var (x, y) in minimumPathLength.path)
- {
- canvas.SetPixel(x, y, Color.White);
- }
-
- if (display)
- {
- AnsiConsole.Write(canvas);
- AnsiConsole.WriteLine();
-
- AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
- }
- }
-
- private (int length, List<(int x, int y)> path) ExplorePath(byte[,] map)
- {
- var height = map.GetLength(0);
- var width = map.GetLength(1);
-
- // Store seen positions with number of steps to reach this position
- var exploredPositions = new Dictionary<(int x, int y), int>();
- var toExplore = new Queue<(int x, int y, int elevation, int steps, List<(int x, int y)> path)>();
- var pathLengths = new List<(int length, List<(int x, int y)> path)>();
-
- toExplore.Enqueue((_start.x, _start.y, 0, 0, new()));
-
- // Explore all possible path
- while (toExplore.Count > 0)
- {
- var (x, y, previousElevation, steps, path) = toExplore.Dequeue();
-
- // If we went out of bound
- if (x < 0 || x >= width || y < 0 || y >= height)
- {
- continue;
- }
-
- // If new elevation is too high
- var newElevation = map[y, x];
- if (newElevation - previousElevation > 1)
- {
- continue;
- }
-
- // If new path is not better than old path, just skip
- if (exploredPositions.TryGetValue((x, y), out var oldSteps))
- {
- if (oldSteps <= steps)
- {
- continue;
- }
- }
-
- // Mark this position as explored and store required number of steps to reach it
- exploredPositions[(x, y)] = steps;
-
- // Update path
- var newPath = new List<(int x, int y)>(path) { (x, y) };
-
- // If we found the end, note that we could end the search here since it's a bfs, there can't be
- // any shorter path to this point
- if ((x, y) == _end)
- {
- pathLengths.Add((steps, newPath));
-
- continue;
- }
-
- var nextPositions = new (int x, int y)[]
- {
- (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
- };
-
- foreach (var nextPosition in nextPositions)
- {
- toExplore.Enqueue((nextPosition.x, nextPosition.y, newElevation, steps + 1, newPath));
- }
- }
-
- return pathLengths.MinBy(p => p.length);
- }
-
- private (int length, List<(int x, int y)> path) FindNearestStart(byte[,] map)
- {
- var height = map.GetLength(0);
- var width = map.GetLength(1);
-
- // Store seen positions with number of steps to reach this position
- var exploredPositions = new Dictionary<(int x, int y), int>();
- var toExplore = new Queue<(int x, int y, int elevation, int steps, List<(int x, int y)> path)>();
- var pathLengths = new List<(int length, List<(int x, int y)> path)>();
-
- toExplore.Enqueue((_end.x, _end.y, EndElevation, 0, new()));
-
- // Explore all possible path
- while (toExplore.Count > 0)
- {
- var (x, y, previousElevation, steps, path) = toExplore.Dequeue();
-
- // If we went out of bound
- if (x < 0 || x >= width || y < 0 || y >= height)
- {
- continue;
- }
-
- // If new elevation is too low, skip
- var newElevation = map[y, x];
- if (previousElevation - newElevation > 1)
- {
- continue;
- }
-
- // If new path is not better than old path, just skip
- if (exploredPositions.TryGetValue((x, y), out var oldSteps))
- {
- if (oldSteps <= steps)
- {
- continue;
- }
- }
-
- // Mark this position as explored and store required number of steps to reach it
- exploredPositions[(x, y)] = steps;
-
- // Update path
- var newPath = new List<(int x, int y)>(path) { (x, y) };
-
- // If we found a possible start, same as in the 1st part, we could stop here
- if (newElevation == 0)
- {
- pathLengths.Add((steps, newPath));
-
- continue;
- }
-
- var nextPositions = new (int x, int y)[]
- {
- (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
- };
-
- foreach (var nextPosition in nextPositions)
- {
- toExplore.Enqueue((nextPosition.x, nextPosition.y, newElevation, steps + 1, newPath));
- }
- }
-
- return pathLengths.MinBy(p => p.length);
- }
-
- private byte[,] ParseMap()
- {
- var lines = Input.ReadAllLines().ToArray();
- var lineCount = lines.Length;
- var columnCount = lines[0].Length;
-
- var map = new byte[lineCount, columnCount];
-
- for (int i = 0; i < lineCount; i++)
- {
- var line = lines[i];
-
- for (int j = 0; j < columnCount; j++)
- {
- var elevation = line[j];
-
- map[i, j] = elevation switch
- {
- 'S' => 0,
- 'E' => EndElevation,
- _ => (byte) (elevation - 'a')
- };
-
- // Store the end
- if (elevation == 'E')
- {
- _end = (j, i);
- }
-
- // Store the start
- if (elevation == 'S')
- {
- _start = (j, i);
- }
- }
- }
-
- return map;
- }
-
- private Canvas DrawMap(byte[,] map)
- {
- var height = map.GetLength(0);
- var width = map.GetLength(1);
-
- var canvas = new Canvas(width, height);
-
- for (int x = 0; x < width; x++)
- {
- for (int y = 0; y < height; y++)
- {
- canvas.SetPixel(x, y, _colorMap[map[y, x]]);
- }
- }
-
- return canvas;
- }
-
- #region Input
-
- public const string Input =
- """
- abccccccaaccaaccccaaaaacccccaaaaccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaccccccccccccccccaaaccccccccccccaacccccccccccccccccccccccccccccccccccccccccaaaa
- abaaaaccaaaaaccccaaaaaccccccaaaaccccccccccccccccccccaaacccccccccccaaaaaaaaaaaaaaaaaaccccccccccccccccaaaaccccccaaacaaccccccccccccccccccccccccccccccccccccccccaaaaa
- abaaacccaaaaaaaacaaaaaacccccaaaaccccccccccccccccccccaaaaacccccccccaaaaaaaaaaaaaaaaacccccccccaaccccaaaaaacccccccaaaaaccccaaccccccccccccccacccccccccccccccccccaaaaa
- abaaacccccaaaaaccccaaaaccccccaaacccccccccccccccccccaaaaaccccccccccaaaaaacacaaaaaacccccccccccaaccccaaaaacccccccccaaaaaaccaaaaaaccccccccccaaaccccacccccccccccaaaaaa
- abaacccccaaaaaccccaacccccccccccccccaaaaacccccccccccaaaaacccccccccaaaaaaaaccaaaaaaacccccccaaaaaaaaccaaaaacccccccaaaaaaaccaaaaacccccccccccaaacccaaaccccccccccccccaa
- abaaacccaaacaacccccccccccccccccccccaaaaaccccccccccccaaaaacccccccaaaaaaaaaccaaccaaacccccccaaaaaaaaccaacccccccccaaaaaaccaaaaaaccccccccccccaaaacaaaaccccccccccccccaa
- abaaacccccccaaccccccccccccccccccccaaaaaaccccccccccccaaccccccaacccaaaccaaaaccccccaacccccccccaaaacccccccccccccccaacaaaccaaaaaaaccccccccccccajjjjjjjcccccccccccccccc
- abcaacccccccccccccccccccccccccccccaaaaaaccccccccccccccccccccaaaaccccccaaaaccccccccccccccaacaaaaaccccccccccccccccccaaccccaaaaaacccccccccccjjjjjjjjjcccccaaaccccccc
- abccccccccccccccccccccccccccccccccaaaaaaccaaccccccccccccccaaaaaacccccccaaacccccccccccaacaaaaaaaaccccccccccccccccccccccccaaccaaccccccccaiijjjjojjjjcccccaaacaccccc
- abcccccccccccccccccccccccaaacccccccaaacacaaacccccccccccccccaaaaccccaaccccccccccccccccaaaaaaacccaccccccccccccccccccccccccaacccccccccccaiiijjooooojjkccaaaaaaaacccc
- abccccccccccccccccccccccaaaaccccccccccaaaaaccccccccccccccccaaaaacccaaaaaccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccccciiiiiiiioooooookkkcaaaaaaaacccc
- abccccccccccccccccccccccaaaaccccccccccaaaaaaaacccccccccccccaacaaccaaaaacccccccaaacccaaaaaaaaccccccccccccccccccccccccccccccccccchiiiiiiiiooooouoookkkccaaaaaaccccc
- abcccccccccaaccccccccccccaaaccccccccccccaaaaacccccccccccccccccccccaaaaaccccccaaaacccaaaaacaacccccccccccccaacaacccccccccccccccchhhiiiinnnooouuuuoookkkccaaaaaccccc
- abcccccccccaaacccccccccccccccccccccccccaaaaacccccccccccccccccccccccaaaaacccccaaaaccccccaaccccccccccccccccaaaaacccccccccccccccchhhnnnnnnnnouuuuuuppkkkkaaaaaaccccc
- abccccccaaaaaaaacccaaccccccccccccccccccaacaaccaacaaccccccccccccccccaacccccccccaaaccccccaacccccccccccccccaaaaacccccccccccccccchhhnnnnnnnnntuuxuuupppkkkkkacccccccc
- abccccccaaaaaaaacacaaaacccccccccccccccccccaaccaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccaacccccchhhnnnnttttttuxxxuuppppkkkkkcccccccc
- abcccccccaaaaaaccaaaaaaccccccccccaaccccccccccaaaaaccccccccccccccccccccccccaaacccccccccccccccccccccccccccccaaaaccaaccaaacccaaahhhnnntttttttuxxxxuupppppllllccccccc
- abcccccccaaaaaacccaaaacccccccccaaaaaaccccccccaaaaaacccccccccccccccccccccccaaacccccccccccccccccccccccccccccacccccaaaaaaacaaaaahhhppntttxxxxxxxxuuuuvpppplllccccccc
- abcccccccaaaaaacccaaaacccccccccaaaaaacccccaaaaaaaaaccccccccccccccccccccaaaaaaaacccccccccccccccccccccaaaccccccaacaaaaaaccaaaaahhhpppttxxxxxxxxyuuvvvvvppplllcccccc
- abcccccccaaccaacccaacaccaaaaccccaaaaacccccaaaaaaaaaccccccccccccccccccccaaaaaaaacccccccccccccccccccccaaacaaaaaaaccaaaaaaaaaaaaahhppptttxxxxxxyyyyyyvvvppplllcccccc
- SbccccccccccccccccccccccaaaacccaaaaacccccccaaaaaaaaacaaaccccccccaacccccccaaaaaccccccccaaaaacccccccccaaaaaaaaaaaaaaaaaaaaaaaaacgggpppttxxxxEzzyyyyyvvvqqqlllcccccc
- abccccccccccccccccccccccaaaacccaaaaacccccccaaaaaaaaccaaaccccccccaaacaaccaaaaaaccccccccaaaaacccccccaaaaaaaaaaaaaaaaaaaaaaaaaaacgggpppsssxxxyyyyyyvvvvvqqlllccccccc
- abcccaaaccccccccccccccccaaaccccccccccccccccaaaaaaaaaaaaaccccccccaaaaaaccaaaaaacccccccaaaaaacccaaaccaaaaaccaaaaaaaaaaaacccccccccgggppssswwyyyyyyvvvvqqqqlllccccccc
- abcaaaaaccccccccccccccccccccccccccccccccccaaaaaaaaaaaaacccccccaaaaaaacccaccaaacccccccaaaaaacccaaacccaaaaaaaaaaaccccaaacccaaaaacgggppsswwwyyyyyyvvqqqqqlllcccccccc
- abcaaaaaaccccccccccccccccccccccccccccccccccaaccaaaaaaaaaaaccccaaaaaaacccccccccccccccccaaaaacccaaacaaaacaaaaaaaaccccaaacccaaaaacggpppsswwwywwyyyvvqqqmmmlccccccccc
- abcaaaaaacccccccaacaaccccccccccccccccccccccccccaaaaaaaaaaaccccccaaaaacccccccccccccccccaaaccaaaaaaaaaaacccccccaacccccccccaaaaaacggpppsswwwwwwwwyvvqqqmmmcccccccccc
- abcaaaaaccccccccaaaaaccccccccccccccccccccccccccccaaaaaaaacccccccaacaaacccccccccccccccccccccaaaaaaaaaccccccccccccccccccccaaaaaagggoossswwwwrrwwwvvqqmmmccccccccccc
- abcaaaaacccccccaaaaaccccccccccccccccccccccccccccaaaaaaacccccccccaaccccccccccccccccccccccccccaaaaaaacccccccccccaaaccccccccaaaaagggooosssssrrrrwwwvqqmmmcccaacccccc
- abcccccccccccccaaaaaaccccccccccccccccccccaacccccccccaaaccccccccccccccccccccccccccccccccccccccaaaaaaccccccccccccaaaaccccccaaaccgggooosssssrrrrrwwrrqmmmcccaacccccc
- abcccccccccccccccaaaacccccccccccccccccccaaaacccccccacaaacccccccccccccccccccccccccccccccccccccaaaaaaacccccccccaaaaaacccccccccccgffoooooosoonrrrrrrrrmmmccaaaaacccc
- abcccccccccccccccaccccccccccccccccccccccaaaacccccccaaaaacccccccccccccccccccccccccccccccccccccaaacaaacccccccccaaaaacccccccccccccfffoooooooonnnrrrrrmmmddcaaaaacccc
- abccccccccccccccccccccccccccccccccccccccaaaaccccccccaaaaacccccccccccccccccccccccccaaaccccccccaacccccccccccccccaaaaaccccccccccccffffoooooonnnnnnrnnmmmdddaaaaacccc
- abcccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccccccccaaaaaccaaaacccccccccccccccccccccccccaacccccccccccccccfffffffffeeeennnnnnmmdddaaaacccccc
- abcccccccaaaccccccccaccccccccccccccccccccccccccccccaaaaccccccccccccaaaccccaaaaaccaaaaccccccccccccccccccccccccccccccccccccccccccccfffffffeeeeennnnnmddddaaaaaccccc
- abcccaaccaaacccccaaaacccccaacccccccccccccccccccccccccaaacccccccccccaaacccaaaaaacccaaaccccccccccccccccccccccccccccccccccccccccccccccffffeeeeeeeedddddddcccaacccccc
- abcccaaaaaaacccccaaaaaaccaaacccccccccccccccccccccccccccacccccccccccaaaaccaaaaaaccccccccccccccccccccccccccaacccccccccaaaccccccccccccccaaaaaaeeeeedddddcccccccccccc
- abcccaaaaaacccccccaaaacccaaacaaaccccaaaacccccccccaaacaaaccccccaacccaaaacaaaaaaacccccccccccccccccccccccccaaaccccccccaaaacccccccccccccccccccaaaaeeddddccccccccccccc
- abccccaaaaaaaacccaaaaaaaaaaaaaaaccccaaaacccccccccaaaaaaacccccaaacccaaaaaaaaaacccccccccccccccccccccccaaacaaaccccccccaaaaccccccccccccccccccccaaaccccccccccccccaaaca
- abcccaaaaaaaaacccaacaaaaaaaaaaacccccaaaaccccccccccaaaaaacaaacaaacaaaaaaaaaacccccccccccccccaaacccccccaaaaaaaaaaccccccaaaccccccccccccccccccccaacccccccccccccccaaaaa
- abcccaaaaaaaacccccccccccaaaaaacccccccaacccccccccccaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccaaaacccccccaaaaaaaaacccccccccccccccccccccccccccccaaacccccccccccccccaaaa
- abccaaaaaaacccccccccccccaaaaaaacccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccaaaacccccccaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccaaaaa
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day13.cs b/Days/Day13.cs
deleted file mode 100644
index 831e8db..0000000
--- a/Days/Day13.cs
+++ /dev/null
@@ -1,731 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public abstract class PacketElement : IEquatable, IComparable
-{
- public override bool Equals(object? obj)
- {
- if (ReferenceEquals(null, obj)) return false;
- if (ReferenceEquals(this, obj)) return true;
- return obj.GetType() == GetType() && Equals((PacketElement) obj);
- }
-
- public override int GetHashCode()
- {
- throw new NotImplementedException();
- }
-
- public static bool operator ==(PacketElement left, PacketElement right)
- {
- return left.Equals(right);
- }
-
- public static bool operator !=(PacketElement left, PacketElement right)
- {
- return !(left == right);
- }
-
- public static bool operator <(PacketElement left, PacketElement right)
- {
- return left.CompareTo(right) < 0;
- }
-
-
- public static bool operator >(PacketElement left, PacketElement right)
- {
- return left.CompareTo(right) > 0;
- }
-
- public bool Equals(PacketElement? other)
- {
- return other is not null && (this, other) switch
- {
- (IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value == rightInteger.Value,
- (ListElement leftList, IntegerElement rightInteger) => leftList.Elements is [var x] && x == rightInteger,
- (IntegerElement leftInteger, ListElement rightList) => rightList.Elements is [var x] && x == leftInteger,
- (ListElement leftList, ListElement rightList) => leftList == rightList,
- _ => throw new ArgumentException("Can only compare lists and integers")
- };
- }
-
- public int CompareTo(PacketElement? other)
- {
- return (this, other) switch
- {
- (IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value.CompareTo(rightInteger.Value),
- (ListElement leftList, IntegerElement rightInteger) => leftList.CompareTo(new ListElement(new PacketElement[] { rightInteger })),
- (IntegerElement leftInteger, ListElement rightList) => -rightList.CompareTo(new ListElement(new PacketElement[] { leftInteger })),
- (ListElement leftList, ListElement rightList) => leftList.CompareTo(rightList),
- _ => throw new ArgumentException("Can only compare lists and integers")
- };
- }
-}
-
-public class ListElement : PacketElement, IEquatable, IComparable
-{
- public override bool Equals(object? obj)
- {
- if (ReferenceEquals(null, obj)) return false;
- if (ReferenceEquals(this, obj)) return true;
- return obj.GetType() == GetType() && Equals((ListElement) obj);
- }
-
- public override int GetHashCode()
- {
- return HashCode.Combine(base.GetHashCode(), Elements);
- }
-
- public IList Elements { get; }
- public int Count => Elements.Count;
-
- public ListElement(IList elements)
- {
- Elements = elements;
- }
-
- public static bool operator ==(ListElement left, ListElement right)
- {
- return left.Equals(right);
- }
-
- public static bool operator !=(ListElement left, ListElement right)
- {
- return !(left == right);
- }
-
- public static bool operator <(ListElement left, ListElement right)
- {
- return left.CompareTo(right) < 0;
- }
-
- public static bool operator >(ListElement left, ListElement right)
- {
- return left.CompareTo(right) > 0;
- }
-
- public bool Equals(ListElement? other)
- {
- return other is not null && Count == other.Count && Elements.Zip(other.Elements).All(t => t.First == t.Second);
- }
-
- public int CompareTo(ListElement? other)
- {
- if (other is null)
- {
- throw new ArgumentException("Other can't be null");
- }
-
- // Compare elements by elements
- for (int i = 0; i < other.Count; i++)
- {
- // If there's no element in this list anymore, it's that it's lower
- if (i >= Count)
- {
- return -1;
- }
-
- // If the two next values aren't equal, return the result, else continue
- var compare = Elements[i].CompareTo(other.Elements[i]);
-
- if (compare != 0)
- {
- return compare;
- }
- }
-
- // If there's still more elements in this list, it means that it's bigger, else they are equal
- return other.Count != Count ? 1 : 0;
- }
-}
-
-public class IntegerElement : PacketElement
-{
- public int Value { get; }
-
- public IntegerElement(int value)
- {
- Value = value;
- }
-}
-
-public class Day13 : Day
-{
- public override int Number => 13;
- public override string Name => "Distress Signal";
- public override void RunPart1(bool display = true)
- {
- var pairs = ParsePacketPairs();
-
- var sum = 0;
-
- for (int i = 0; i < pairs.Count; i++)
- {
- var pair = pairs[i];
-
- if (pair.left < pair.right)
- {
- sum += i + 1;
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- var packets = ParsePackets();
-
- // Add divider packets
- var firstDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(2) }) });
- var lastDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(6) }) });
- packets.Add(firstDivider);
- packets.Add(lastDivider);
-
- var orderedPackets = packets.Order().ToList();
-
- var firstDividerIndex = orderedPackets.IndexOf(firstDivider) + 1;
- var lastDividerIndex = orderedPackets.IndexOf(lastDivider) + 1;
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Decoder key is: [yellow]{firstDividerIndex * lastDividerIndex}[/][/]");
- }
- }
- private static PacketElement ReadElement(ref ReadOnlySpan packet)
- {
- // This is an integer
- if (packet[0] != '[')
- {
- return ReadInteger(ref packet);
- }
-
- // This is a list packet
- return ReadList(ref packet);
- }
-
- private static ListElement ReadList(ref ReadOnlySpan packet)
- {
- var list = new List();
-
- while (packet[0] != ']')
- {
- // Skip delimiter
- packet = packet[1..];
-
- // If it's an empty list
- if (packet[0] == ']')
- {
- break;
- }
-
- list.Add(ReadElement(ref packet));
- }
-
- // Skip closing bracket
- packet = packet[1..];
-
- return new ListElement(list);
- }
-
- private static IntegerElement ReadInteger(ref ReadOnlySpan packet)
- {
- var intEnd = packet.IndexOfAny(',', ']');
- var element = new IntegerElement(int.Parse(packet[..intEnd]));
-
- packet = packet[intEnd..];
-
- return element;
- }
-
- private static IList<(PacketElement left, PacketElement right)> ParsePacketPairs()
- {
-
- var pairs = new List<(PacketElement, PacketElement)>();
- foreach (var pair in Input.ReplaceLineEndings("\n").Split("\n\n"))
- {
- var split = pair.Split('\n');
-
- var leftSpan = split[0].AsSpan();
- var rightSpan = split[1].AsSpan();
-
- pairs.Add((ReadElement(ref leftSpan), ReadElement(ref rightSpan)));
- }
-
- return pairs;
- }
-
- private static IList ParsePackets()
- {
- var packets = new List();
-
- foreach (var packet in Input.ReadAllLines().Where(l => !string.IsNullOrWhiteSpace(l)))
- {
- var packetSpan = packet.AsSpan();
-
- packets.Add(ReadElement(ref packetSpan));
- }
-
- return packets;
- }
-
- #region Input
-
- public const string Input =
- """
- [[5,[[3,0]],[0,[8,6,9],2,9],[5,6,[2,8,3],[0]],[6,2,[2,6,8],10]]]
- [[6,4,[2,[2,2],8,[3,7,0,6,2]]],[4,10]]
-
- [[[6,[10,9,7]],9,[9,[9,0,8,3],[0],3],[8,1]],[2,10,9],[[0,6,[4]],2,[2,3,[6,7,0],[1,4,2]],[[3,7,2],[],0],9],[],[[]]]
- [[1,[1,10]]]
-
- [[2,3,[]],[7,[[6,9,9,1,6],[0,3],10,3,[5]],[[]],[9,[],[1,0,0,1,1]]],[7,[1,[3,0],[7,10,8,5,0],2,1],4,7,3],[[5],6,4],[9,3,[4,[0,7,9,9],5,[2,0],[]],[6,[],[4,9]]]]
- [[2,[[3,4,7],[7,2,2,6],[8,9,7,7,6],[7,8,1,6,1],[]],[],8]]
-
- [[4,[[9,8,1],2],10,6,[[],[],7]]]
- [[9,4,10],[0,[1,[10,4,6],[1],8],[[6,2,7,2,4],[9,3,5,6],[0,3,7],10],3],[[[5,4],2,10],2,9,4,[[6,7,2,3],[6]]],[],[]]
-
- [[0,1],[[7,[10,0,8,1],1,4]],[]]
- [[1,3,2,3],[1,[[],7,[6,5,8,7,9],[0,2]],[8],5,[]],[[7,8,[],[8,9,4]],[2]]]
-
- [[7,[[6]],[4,9]]]
- [[10],[],[[10,[10,10,5,2,1],[10],5],[4,4],[[2,1],[9]],6],[6,8]]
-
- [[[[],[2,3,7],4],0],[[[6,5,10,2,6],10,[2,7],5,5],7,8,[0]],[[10,1,3,3,[7]],0],[]]
- [[[[6,2,2,8],[7,4,9,4],3,[0]],7,10]]
-
- [[6,5,5,1],[8],[]]
- [[1,[]],[10],[10,[8,[4]],6,1],[5]]
-
- [[[[1,1,2,4],[7,8,8,7],5,[9,1,7,0,8],[2,10,10,4]],10,[7,[6,10],[6,10,6,9],[0,8,10],7]],[8,[[],[],[1,3,0,5,10],[7,0,7]],1],[]]
- [[6,3,[],5],[]]
-
- [[[3],[2,[],[1,10,5,5],[1,0,3,3,1]]]]
- [[[6,5,[4]]],[5,10,5,3],[6],[10]]
-
- [[[[],[5,0,8,5,4],[2],0,[]],7,6,10,[7,1,10,9]],[]]
- [[[8,[1,2,3]]],[8],[6,9,[3,1,1,[10,10,3,10,0]],3,0],[[[8,7]]]]
-
- [[0,[[0],5,[6,3,3],[10,3,10,9]],4]]
- [[],[5],[8],[[[10,8,10,5,3],[3,7,10,9,8],0],[[],[]]]]
-
- [[],[10,[7,3,[6],7],[9,[3],[8],7,[1]],10],[6,9,[9,3],[[4,8,1],[10,1,4,7],7],10],[[],[3]]]
- [[[6],5,6,10,6],[[]],[1,[6,10],8,3],[1]]
-
- [[1,3],[10,[2],8,1,[6,6,[5],5,[2]]],[[4]],[],[]]
- [[[],[1,0,[8],8,[0,3,6]],1],[[[6,1],8,3,1],1,[6,[6,9,3,8,7]],10,[5,[4]]]]
-
- [[9,[6,2,[],[3,0,2,7]],0],[[[5,4,0],0,[2],[7,3,2,5,1]],9,3]]
- [[2,[7,[5,2,4],8,5,[3,0,4,5,4]],0,8]]
-
- [[8,6,3,[[10,1,1,7]],8]]
- [[[9,2,5],10,5]]
-
- [[],[6],[[[3,6,3,9]],[[2,0],7,1,[10,10,4,4,10]]]]
- [[4,[[6,8,4,9,2],[],5,[10,1]],1,6],[[[4,2,5],4]],[[3,6]],[7,8,[[5,8,9,10],1,[6,8],1,7]]]
-
- [[[[],10,7],[],[1,[]],8,[9,0]],[0,[[6],3,1,[0,7,5]],[[7,6,3,9,3],4,4],[],0],[],[9,2,[9,1,[0,9,4,6],[9,2],10],9]]
- [[],[2,5,6,5,8]]
-
- [[[[4,4],5,[7],3,[8,8,4]],2],[]]
- [[[[6,5,4,7,1],[0,9,9]],[[7,3,7,6,10],3,[6,4,9,4]],[1,[],[]]],[[7,5,[2,4,1,1]],2,4],[],[[[4,7],[1,7,9],5,[]],4,[[7,5,1,9,10],2,5,[1,2,0,9,9]]],[9,[]]]
-
- [[7,[[8,10,9,4,5],[1,3]],1],[[[1,1],2],[[3]],[[7,9,6,6,8],4,[5]],7],[3],[[9,[3,9],[3,1,0,9,2]],4,5,9,[[1]]]]
- [[[4,[9],5],[[2],8,[5,7,0,0],0,9],[[2,1],[],7,[7,1],2],4,7],[[[4,7,0,10,2],[5,5,0,3,6],[10,6,3,3],4,8],2,[[1]],9,9]]
-
- [[[[6,2,4,0]],[],[[8,3,1,5,5],1,7,4,2],5,1]]
- [[[],0],[],[4,[[1,6],2,[8,4,1,3,10]],[5,0,[10,1,0]],8,[2,[10,8,4],[6,2,7,10,10],[8,2,4,4],[]]],[[],6],[[4,5,[2],[10,2,2,1],[4,6,5,10]],[5,[],9,[1]],[]]]
-
- [[9]]
- [[[],8],[7,[6,4]],[5]]
-
- [[],[[3,5,[1],3,[3]],[5],6,[[7,2,6,9],[1,0,0,1]]],[[[5,5,2,0,10],10,7,8,7],5,7,7,[[],1,[6]]],[[]]]
- [[[5,8,10,[9,1,3,2,4],[6,7,0,7,6]],3,[[7],3,9,4,[9]]]]
-
- [[3,1,4,[[6]],[[4,6],1,[4]]],[0],[3,[],7]]
- [[7]]
-
- [[4,[[5]],[10,8,5,0]],[4]]
- [[7,6,10,[[1],8,0,[10,5,1]]],[[[2,1,6],9,9,[4],9]],[]]
-
- [[7,0,5,3,1],[],[[0,9,[8,4,9]],[7,[10,9,4,1,7],2,6],10,[],10],[]]
- [[1,[],[],6,[[],10,3]]]
-
- [[[[1,6]]],[[[5,3,7],[],[10,9,7,3,3],0,[]],3,10,5],[],[10,[2]]]
- [[[[1,5],5],[[6],[3,2],9,[2,0,8]],[9,[6,9,4],8,0,6]],[[[8],8,10],0,[],6,[[2,7,8],0,9]],[7,1],[[[0],[9,5,9]],[[2,10]],[]]]
-
- [[1,7,[[9],8,[1,1,8]]],[[[9,10,2,0,1],10],0,[7,[10,10],10],5],[7,1],[9,[[],[7,10]]],[[2,9,8,[0,0],[10,9,4,1]],[5],[[8,6]]]]
- [[[[4,7,4],[],6,[5,4]],[],[7,[],[],3],[[9,3,5,1,10],[],[7,2]]],[[6,1],3,[[],[3,2],[],[3],[8,7,3,9]]]]
-
- [[[2],0],[2,[6,1],6,5],[0,[],[[9],[],[],[10,8,6]],[[9,6,8,2,3],8,1,5,1],[[4],2,[]]],[[10,1,0,6,1],6],[4]]
- [[1,[[4,10,2],10],[4],6,[[1,0,7],[8,1,9,5,2],6]]]
-
- [[],[9],[[],[[4,4,1,8],3,5]]]
- [[[[10,7],6,[]],[[1,3],[8,9,4],8,[],[2,9]],[8,3],10],[7],[8,9,10]]
-
- [[3,[10,[],4],[[8,3],4,6,[0,6,9,3,6],[8,9,5,9]],[10,[7,1,0,1],[7,1,2,1],[],[]]]]
- [[7,2]]
-
- [[8,[],2,0],[[1,[10,7],[0],2,0]],[4,0,[10,[0,5,1],[1],[]],6,[9]]]
- [[],[6,[[5,1,6,0,5],4],[7,7,[6],8,[2,1]],1,[[3,0]]],[4,10,[[5,10],[4,9,2,1,5],[7,1,5,6]]],[],[1,9,[]]]
-
- [[[[5,7,1,2],[8],[7,0,9,7,3],[4,2,1],1],8,[4,1,[8,6,1,10],[6,8,3,2,0]],[[3],1,[2]]],[[8,[7,10,1,5,2],[1,1],[1,2]],[[0,4],2,1,[4,6,8]],1,0,3],[10,1,[[0,0,7,8,7],3]],[[4,[4],3,7,[]],3,[10,1,5,[9,6,3]],[[3],[2]],[[],1,10,[2,7]]],[[[9],7,3],8,10]]
- [[[3]],[[10],2,3]]
-
- [[[10,4],1,[[4,2,5,8],3,6,[6,10,5,5],5],6],[[7,3,4,5],3,[],[]]]
- [[[[0,5,8,4],[2,3,9,1],5],[[9,7,1,5,3],6,[4],[9,2]],[]],[10,[4,1,3,2,7]],[2,9,[4,[],8,[8,10,6,10,10]],[5,8,[]]],[10,4,3,3],[]]
-
- [[],[[[0,9,10,9],9]],[3,[[],[10],4,[4,2,7,8]],0,[[9,10,1,2],9,0],[5]]]
- [[[[8,2,9,9],9,4,2],[[9,9],0],[9,[4,1],2,[2,5],2]],[]]
-
- [[],[[0,[4,9]],[4,7,[9],7],[[1,8,9,7,5],[1,4],3,[9,1],4],[4,10,[1],[],[]]],[[5,4,2,10,[9,7,0,4]]],[[[0,10],4],1,5,[[10,7,0,8,9],[6,10,6]],1],[[[5,7],7,5,[]],10,[[6,10,1],[0,8,0]],[],6]]
- [[7,[[0,5,8,1],[10,10,0,2],[3]],10],[[[0,1,2,7],4],[1,6]],[[[3],[2],[]],6],[[1],[]]]
-
- [[2],[[],2],[3,9],[],[7,[],1,[[4],8,6,[9,4]],9]]
- [[7,[[],[2,10,5,10],1,0,[9,2,1]]],[8,[[],0],4,9],[4,[6,3,5],7]]
-
- [[[[5,5,6,3],[2],8,[]],[[10,1,4,7]],8,6],[[9]]]
- [[[[8,9],4]],[[[6,0,6],[0,4,2,8,5],2,[5,6,0,9],1],10,4],[]]
-
- [[[[0],10],[[6,2,10,8]]],[],[[[2],10,3],[],2,10,[10,[]]]]
- [[[],1,[]],[[],8]]
-
- [[[2,[10,8,8],[7,1,7,1]],7,1,[]],[6,[[5,10,5,6],2],2,[2,2,[6],10,8]],[[[5,1],[7],1],2,2,10]]
- [[5,[3,[8,2,10],[3,10,10,10]],2,7]]
-
- [[],[9,1,4,[1]],[10,[[8,9,2,1],8,6,[],6],8,5],[]]
- [[[8,5],[[],2,7,[5,0],[10,5,6,8]]]]
-
- [[[]],[[1,1,5,10,[4,0,10,6,1]],[10,[2,4,7,7],[6,0,8,7]],9,0]]
- [[[[4,9,6,4,9],2,[5,1,0,1,5]]],[[1,[4,7,5],8,5],[7,[9,4,8,3,7],8,8,[6,8,3,10,2]],[[6],[8],[2,5,8,3],0]],[]]
-
- [[[4,6,[8,2,10],9],[6],5],[[],0,[1,[4,5,9,1],2]]]
- [[[],9,[8,6,[4]]]]
-
- [[6,[]],[4,[],[3,[6,8],[1,6,7,6,6]],6],[],[2,5,5]]
- [[8,[[5,3],2,2,6,6]],[]]
-
- [[2,[]],[],[[3,9,10],9]]
- [[[]]]
-
- [[[9,[8,6,1,5,0],7,[5,0],[5]],[[]]]]
- [[7,4,[[6,4,6,5]],[[9,1],[3,0]],4],[0,[[10,4,8]]],[],[],[[6,7],0,[],[]]]
-
- [[9,3,[8],[10,[10],[7,4]]],[1,[[10,9,4],[7,6],[]],10,5,[]],[[5,7,0],[[3,6,2,8,7]],[[2,6],[],[1,3,9,8,8],10,5],6],[10],[[0,3,7],[[7,1,1,2,1],9]]]
- [[1,[3,[],[5,3,9,2],[10,5,4,1,7],[1,5,7]]],[[4,[4,0],9,0]],[[1,[9,8,0,6,9]],2,[[7],7,[1],[10]],7],[[0,[],[6],[]]]]
-
- [[6,1,[10,[4,1,3],1,9]],[]]
- [[],[],[],[10]]
-
- [[8,[[10],0,1]]]
- [[7,2,7,8],[],[6,0,6,4],[[[5,4,5],7],6,[],[]]]
-
- [[],[[[8,2],7,9],4,2],[7,0],[]]
- [[0,1,9,7,5],[[[4,1,10]],8,6],[[[8,9,9,10],[6,5],[8,5,3,5]]],[[],8]]
-
- [[[4,5,6,8],[[5,0,7,10,8],0,[],[7,4,9,9,3]],[]],[],[0,5,[6,8]],[4,[2,[0],[10,1,9,7]],8,3],[]]
- [[],[]]
-
- [[[4],4,9],[],[[[3,1],[4,2,5,10,1]],3,[[5,1,0,1,2]],10,[7,[10,5,9,9,9],[2,3,4,10],[2,1],9]]]
- [[6,[10,[10]],[7,[4,0,4]],[[0,3,10],7]],[[[9,7,2],7,9,[7,4,8,4,9]],2]]
-
- [[7],[[3,[],[5],[0,6]],[[3,10,5]]]]
- [[3,[4,7,[9,0,1,1,7]],0],[[8]]]
-
- [[9,4]]
- [[9,[[5],2]],[3,3,[4,[9,3,8],0,5],3,7],[9,5,6],[10,9,2,5,1]]
-
- [[[],[6],8],[[[8],9,[5],1],[6],4,6],[[[]],6],[],[5,[8,8,[10],[5,1,5,9],4],[5,7]]]
- [[6,[[],2,9,3],7],[4,[[5,9],3,[3,5,5]],7,7],[[],[[2,0,2,9,3],6],[],[[9,6]],2],[5,9,[[],2,[9,10,10],[7,0,4,1],9],9,[[8,2,2]]]]
-
- [[[7,5,[5,10,1,9],[2,9,9,3]],1,[6,9,[7,9,6]],9,[[5,1,9,10,0]]],[6,8,[]],[],[[2,[2,5,4,9,10],[3,3,3],1],7,[2,9],[4,7,7,[5],[1,2,5,9,8]]],[4,[[],[7]],8,2,1]]
- [[4,9,3],[6,[],[6,[7,7,9,1,5],[10,4],10],10,3]]
-
- [[[2,3,[7,5,1,0],5,[10,2,0]]],[7,6],[[[1,0,8,10,2],1]],[0],[6]]
- [[10,6],[7,10],[[4],[]],[8,[],[[],10,2,10],[[9,3],[6,9,8],[10,2,4,1],8],2]]
-
- [[[],4],[10,8,[3,9,[]],9],[8,5,[],2],[[8,[10,5,7,2,10],[4,10,7,9],[4,4,5]],[[5,4,6]],[],4]]
- [[],[0,8,[5,[6,3,0,7],1,9,6],[3,8,[10,3,8,10],4],[8,[10,6,10],10,[],4]]]
-
- [[[[],6,[5,5],8,[0,5,1]],[7,4,4,[4,1,3,0],8],3,[5,6],8],[9,[4]],[[0,[6,5],1],2,[],[],[2,[8,0,2,10,6],1,[5,8,9,9,4]]],[9,9,[],0]]
- [[2,[[7,9,8,8,10],[],[4,5]],[[1,10],7,[1,9,1,0]]],[[4,[6,10,1,5],5,6],[],[[4,9,2,3,2],6,[3,0,2,2]],9,[]],[5,[[10,0,10,6,4],1]],[9,[0,[8,2,2],8,[5],4],[]]]
-
- [[[8],[7,6,10]],[2,5,[[9,9,1,2],[],[],2,4],1],[],[[[7,3,8],1,1,0],[[4,8,7,10,3]],6]]
- [[],[[9,9,[4,2]],[7,[],9,[3]],[[1,5,0],[9,3,6,1,2]],[[9,9],4,10,1],1]]
-
- [[],[[0,[9,6],[2,4],9,3],[]],[5],[],[6,[[4,1,0,7,7],[]]]]
- [[8,10,6,[],4],[[9,7,2,8]],[0,[5,10,[3],[6,5,9],[4,4]],[],6],[[[],2],8,[9,[3],5,[10,1],8],0],[[3]]]
-
- [[[4,5,[],6,[]],[0,6,[2,4]],10],[[1,[10,6,4,10],[10,4]],1,7,10,7],[],[[],[4,10,[9,0]]],[[6,[10,7,0,7,10]]]]
- [[3,[3,[4,1,1,10,10],[8,4]],4],[]]
-
- [[10,[10,4,7]],[7,[1,2,[0,8,6,7]]],[4,6,4]]
- [[10,10],[[[2,4,4],0],4]]
-
- [[[[10,4],[1,4,7,1]],2],[[[]]],[3]]
- [[[[],[5,4,5,9],8,5],[[],0,4,[1,0],6]],[[3],[[],6,7,0,[7,1]],8,7,8]]
-
- [[[[6,6,5,8],[10,2],[4,10,0]]],[[[1],[4],[0,3,5],[0,1]],[6,[0]],8,1],[1,10,8]]
- [[[10,3],[6,[2,2],5]],[[10],[],[[7]],[[],3,[0,0,1,8,0],3,[]],2],[],[]]
-
- [[6],[[],7,[[1,2,0,1]]],[[7]]]
- [[[[],[],3]],[]]
-
- [[1,[[5,2,1,10]]]]
- [[],[6,1,[]],[1,10,5,6,[[1],[10],2,[2],[4,6,10]]],[]]
-
- [[10,[2,[6,9,4,10,7],[5,8],0],8,10,6],[[[4,10,1]],[[7],[7,4,10,0],[7]],10],[],[[2,[0,2,10,10,1],7,8],[9],[1,[0],[2]],[8,7,[]]],[[]]]
- [[1,2,3,[3],[]]]
-
- [[[],1,10,3],[],[5,2,0]]
- [[10],[5,1,[8,[9,0,9,10]]],[],[[0],[10,10],4,1]]
-
- [[0,[[0,5],5,2,3]]]
- [[],[[],5],[],[0]]
-
- [[3,[9,1,3,[0,9,1,4]]],[],[3,6,[3,10,6]]]
- [[9,[[],[7,6],[9],1,10],7,[[4,0],[7],[1]],[1,1,3,[4,5,3,10],1]],[7,4,[[2,9,1,9,3],5,[4]],[8],8]]
-
- [[[[4,5,7],[0],6,[6,7]],8,4]]
- [[4,3,[[7,4,6],0,2]],[3,3,8,[[5,5,1,8],[8,2,3],7,3,10],7]]
-
- [[[[7],3,7],0,7,2],[7,[[4,6,8,2,4]],[[6,6,5],[4,4,5,6,6]],[],5],[10,9],[]]
- [[2,[[6,2,7,5,7],5,1,3],8],[5,[8,[5,9,8],[],[7,5,3],[4,9,0,2]]]]
-
- [[[2]],[3,[0]],[9,10,2,[],[[7,0,8],4]]]
- [[[6,[],7],6,5,9,7],[9,[5,[10,1]],[6],3],[0],[4,4,9,7,[3,6,3,8]]]
-
- [[6,0]]
- [[4],[[[4,6],[4,10,3],2,[]],3]]
-
- [[6,8],[[],[5,8,7,3,[]],2,[5,10,[0,5]]],[10,[3,7,[0,5,6,3],1,[9,4,5,1]],5],[[],[7,0,0],[7,6],[7,[7,3,1,1,1],0],[[],8,[]]]]
- []
-
- [[[1,[6]]]]
- [[[8,[],[6,9,0,9,7],3,0],4,5,5,[[],8]],[0,5,7,[10,9,[]]],[],[[],[10],[5,8,7]],[6,[[6,10,1],0,[4,9,8,4,7],6,[0,4,9,2]],[5,[1,5,7,1]],3]]
-
- [[10,[0,1,[10],[]],[]],[[8,6],4,9,8,0],[5,[[3,0,6,7],1],4,8],[5,[8,[3]],9,3,[[10,5]]]]
- [[[[1,10],[5],[6,2,2],5],[8,5,8,[6,0,0],3]],[]]
-
- [[1,[9,[3,6,3,9]],[[10,4,2],4,4],[[5,10,4]]],[2,[[10],3],[6,[],[2,10],1,[2,4,6,8]],[8,[8,8,9,2],[],7,[2]],[[10,5,5,10],[3,0,10,2,6],[2,2,7,8]]],[[[6,7,1],[8,7],[4,4,4,4],[],9],3,9,0],[[4,2,[2,3],0],[[10],8,1,5]]]
- [[[],[10,[2,10,8]]],[]]
-
- [[2,9,4,2,[[2,6,4,9],[10,4,4],[],0,[]]],[[[9,0,9,5],[0,1,0,6,10],[10,2,0,6],10]]]
- [[[],7,[3,9,[],2,[2]],10],[],[7,1,[[4,1],[],[5,3,1,8,2]],4,4]]
-
- [[10,[[6],[10,8,1,5],[2,3],3],[[6],8],[5,[4,6],[5,2]],[[8,8,2]]],[2],[[[],[5,3,7],5,[8,2,6]]],[[[2]]]]
- [[10,8,9,4,[8,[],8]],[5,7],[]]
-
- [[5],[],[[[1,8,0,8],[1,7,4],5,[]],[],[[]],[2,8,[6],10,10]],[[[0],9,[],[1,0]],10,7,3]]
- [[3,[],5,[[10],[9],5],[[10,3,6,9],[8,7],2]],[8,9],[7,[]],[[5],[],8,0]]
-
- [[10,[[9,2,3,7],10,[3,8,4,3]],[10,[3],[4,4]],[2]],[],[3,[7,[9,8,10,10,1],10,[10],1],[7,8,6,[4,8,7],2],6],[[[10]],[[10,7,1],2],0,[[]],8],[]]
- [[3,0,1,[7,[0,7,5,2],[],[],[6,5,0]]],[],[],[10],[9,5,[]]]
-
- [[0,8,[],[[1,0],[5,8,3]],[9,8,10]]]
- [[],[8,[]]]
-
- [[[7,9],[]],[],[[[1,10,3,8,4]],[9]],[]]
- [[[],6,[4,1],2],[9,10],[6,0,1,3],[3,[],[],[7,2]]]
-
- [[[10,[],8,9,[0,1,7,3]],[[10,4,10]]],[],[[5,[5,7,6,7],5,4],3,8,[6,[],[3,2,10],[5,6,2,7]],8],[7,[[9,7,2],8,3,0,9],[5,4,4],7]]
- [[[]],[],[2,[],0],[[2,[],4,4]],[[10,[4,7],[1,3,2,4,2]],[],[6,[8,1,3,2],2],6,[5,10,[8,10,6,8,2],6,[]]]]
-
- [[[[7,6,1,3],8,[]],3,1,[0,[5,0,9,8],4,9]],[[[3,10,5,8],[2,2,4],[9,7,6],[7,7,10],0],5,[[0],[4,9,3],3,1,1],[[9],6,5],[]]]
- [[3,1,[6,[9,0,3],[2,9,1,2,7],2,[9,9,5]],[0,0,0],3],[8,4,[[2,10,9,6,2],0,[7,5]],[7,2,[9]]]]
-
- [[[10,[],[1,9,4],[0,7,10]],10,10,[[],[7,1,1,9],[4,5,7,2,0],9]],[[[8,7,7,7,10],2,9],[],[[4,10,6,6],[]]],[]]
- [[[[],8,[6,0,1],9,9],3],[],[]]
-
- [8,3,10,5]
- [8,3,10,5,4]
-
- [[[10,8,1,6],9],[4],[[8],10,[[1,3,2,10],[1,1,8,8,4],10,6]],[9,2],[[[8,9],5,9]]]
- [[[[1,5,1,8],[3,6],5],7,10,7,4],[[9,4,6,5,9],[[0],3,[2,2,10,1,1],1],[2,2,[2,10,7],5,10]],[7,6,[4],[[],3,10]]]
-
- [[4,[],[9],7],[5],[[7]],[8,[[3,9,10],10,[4,4,1,7],[7,1,0]],[[2,3,1,7,10],1],5],[9,10,9,[]]]
- [[1,1,8,1],[]]
-
- [[[[0,9,3,8],9]],[7,[[8,7,6],4,1,5,[10]],2,[5,[9,6,4,9],[6,7,5,8],10]],[[5,4],8,1,8],[]]
- [[7,10,10,[[2,6,6],2],[[]]],[],[5,7,[1,[]],[[4,8,7]],1]]
-
- [[9],[2],[],[]]
- [[[],[0,1,4,4],[],[[10,8,8,4],9,[0,2,4,6],[],[7,2,8,9]]],[6,[[2,5,5,8],6,1,[7,1,7,2],[6,9]],[[4,5,6],5,4]],[[]],[],[4,4,[[9],[],9,0,2]]]
-
- [[],[[0,[10,3,3],4,5],[6,9,4]]]
- [[9,[[],2,[1],[4,4,6]],[[9],[6,5,2],[6,3,7,4],4],[]],[2],[],[[[2,7],[1,1,10,2,9],7]],[[],[[10,6,4,3],[]],0,[4],[[4],1,10,5]]]
-
- [[[[3],5],[7,9,10]],[2,[1,7,8,[3]],[]],[]]
- [[7,6,[],0],[],[[[7,6],[10],1,2,10],1,1,[6,10],[[4,10,4]]],[0,[],[],8,[[5,6,0,1,0]]],[6]]
-
- [[3,[9],[2,[5,0,5,8],[],4],[9,[8],[2,5,4]],[2,[4,7,2],[10,0,3,8,8]]],[[10,2],7,3,9,[[4],1,[1,9,6,9],10,10]],[1],[4,4],[[[7,1],1],10]]
- [[[[4,2,1,3],7,[6,0,9,6,8],[3,0,10],8],6,[],3],[[[6],[0,10,5,4,6],7],10,[9,7,[10,3,0,4,0],2,[9,4,2,5]]],[3,[0],[[9,0,1,6,1]]],[[4,1,8,8],[[5,0,6,3,8],[7,8,7],7,[10,6,5]],5,[0],[[],9,9]],[[5]]]
-
- [[[6,[0],[0]],9,[10,7,[10,1,6,8],10],[[],3,2,9],3],[7]]
- [[[[9],[8,5,4,6]],10,[[9,6],4,5],6,4],[[10,[]],10,2],[],[[[8,10,9],7,0],[[4],[5,9,8,1,2]],[[8],[10,9,3],[2,6,3,2,6],1],[[6,8],[5,5,4],3]],[[8,1],[5,10],6,0,1]]
-
- [[8,[0,1,6,6,8]],[],[[1,9,2,[4,5,2,4]],4,[],[7,1,7],7]]
- [[[7,[7,1],4,10],5,5],[[[1,6,8,9,2],[4],[5,5,7]],1,10,[0,[10,6],3]],[],[[[6],[6,2,0,10]],[[6,6,4,1,3],1],[]],[1,[[7,2],5],[],[2,8,10,[10,1,2,2],4]]]
-
- [2,0,1,0,6]
- [2,0,1,0]
-
- [[],[5,[],3,[[1,9,3]],2],[[[],[3,2,3,2,7],[1,10,6,3,9]],1,8]]
- [[6],[[[1,0,6],[6,4]],7,1,[2,[5]],7]]
-
- [[9,0,4]]
- [[1,10,5,9,[5,5]],[[[3,8,10,8],0,[4],[8],[9,7]]],[[[1,5,4],10],9],[4,[[5,2,8,8],[10,5]],4]]
-
- [[7,6]]
- [[[],[[10],0,8],0],[1,5]]
-
- [[[[2],4,[8,7,7,0,4],[3],7],[],[[3,6,6,1]],6],[[[7,0]],1,[1]],[[0,10,[1,0,5],[0,5]],8,4,[9],[0]],[[3,0]],[9]]
- [[],[[[0,6,6]],[[8]],3,[1],9]]
-
- [[[4,[0,2,0],8],[[5,10,6,6],[2]]],[],[]]
- [[0,6,4],[8,[5,[]],[[9,3],[9],[2,5,0]]],[[10,8,2,[3,0,4,9]],[6,6,5],[4,[],5,9],9],[[[5,0,10,5],5,3],6,4]]
-
- [[0,4,[],4]]
- [[[1,[]],6,9,[[4,0],[]]]]
-
- [[0,[[1],10,[4,7],4]],[[10],1,[3],6],[[[7,2,0,7,0],9,[0,8,4],1,6],[[9,2,0]],8,6,[10,8]],[[],10,[9,[8,5,0]],[10],3],[]]
- [[1,[[],9,[7],[7,6]],[3,5,1]]]
-
- [[6],[1,6,[[2,3,2],[7,9,4,3,5],5,[6,6]],[9,5,2,0],[3,[7,1,4,1,2],4,[2,7,7,9],[8,8,4,10]]],[]]
- [[[10,7,[],[3,4],[8,1]],[5,[9],3]],[[3,[8,7,0,8,6],[0],[5,3,1,0,5]],[9,[4],10,[8,0,2,10],2]],[[[10,10],0],[]]]
-
- [[2,[[7,5,10,9]],5,5,[]],[[[1,6,5,10,6],[5,8,4,10],[2,5,3,8]]],[[],[[2,10,1],[],8],5],[]]
- [[3,[10],9,[5,[],[2,3],6,7]],[[],4,9],[],[[[1,10,4,10]],0,10]]
-
- [[],[10,[2,[0,8],[7,4],6],2,2,[[2,2,7,2,9]]],[0,[]]]
- [[[[10]]],[],[],[[[2,2],6,0,[]],[],10,3,[[4,7,1],[6,10],2]]]
-
- [[[4],[],5]]
- [[],[[],3,8,8,10],[7]]
-
- [[]]
- [[[3,5,1,[0,8,0,7,6]],[2,10,1,[]],[[8,8,3,8,2]],[[10,1],1,[0,2,6],[10]]],[[[1,2],[5,2,6,7,9],10,1],2,5,[]],[[7],[6,9,10],[2,[6,4,10,1]],3,[[10,5,8],9,[2,5,10,2]]],[[5,6,[7,7,8]],[7,[],7],[],[6,10,[7,7,5]]],[]]
-
- [[[5,[5],[],10,[3]]],[],[],[5,3,4,8,[[0,10,7,3],[5,5,6],[10,7,9,2,7],[6]]],[[],[[6,0,5,10]],[[10,1,1,5,7],[8,6],[],[5,5,5],2]]]
- [[8,[9,4,[8,0,3],[0,4],2],[[3],1,1,4]],[5,[1,[],6,5,[4,7,0,8]],3,[[3,8,10,0]]],[7,4,[],1,6],[[[7,4,9,10,8],[],10,[7,9],[2,1,3,8]],2],[[[8,5,1,6,6],[3,9,3,1],[2,10,0,3,5]],7]]
-
- [[7],[2,[10,[9],[9,10],[1,5,8,8,3]],[[3,7,0],3,[9,1,0,9,10],8,[5]],[[1,6,10,9]],3],[[9,1],[[10,1,7]],6]]
- [[9,[],4,[[],5],5],[8,[5,6,3,[5,8],[4,10,0]],[3,8]],[8,[[0,1],3,0,1],4,[[2,9,3,1]]],[[5,3,5,1,[6,5,6,3,6]]],[1,[[]],[5],[2],7]]
-
- [[10,9,9,2],[[10,6,7,6,[0,1,10,10,0]]],[2,[3,[6,9,5],9,[]]],[8,2,[]]]
- [[],[[7,[8,10,7],[7,8,10,6],3,[]]],[],[[[5,5,1,4,2],6],[],0],[2,4]]
-
- [[5,[8,0,[7,10,7],9,[1,6,9,2]],7],[[10,9,[7]],2,[4,[10,7,0,8,6],[],[4,1],5]],[]]
- [[6,2],[0,[],6,[[1,10,4,8,8]]]]
-
- [[[5,[]]]]
- [[6,[],2],[0],[[],10,[[1,8],4,[9],[5,2,0,6,9]],[]]]
-
- [[10,[[],[5,8,10]],2,[10,1],[]],[[],5,[6],[3,[2,0,4],6,4,3],[7,4,[],1,7]]]
- [[[[5,0],[10,10,3],[9,10,10,10,5],5],5,[[0,1,10,9],10,[8,8,6]],5,9]]
-
- [[4,[[]],[]],[],[[10,[7],0,[3,10,1]]],[[6,3],10,10,[2]],[3,4,[3,6,10,0],[[5],8,[3],[6,2,8,2,2]]]]
- [[2,[0,[3]]],[9]]
-
- [[[2,5,[9,10,7],[0]],[[4]]],[9,3,[3,10,9],[9,[3,9,10],[6,3,10]]]]
- [[],[8],[[[],10,[],8],5,4],[[6,10,[],5],[8]],[[8,[9,10]],[[9,0,3,4,10],[7,9,4],8]]]
-
- [[5,7,5],[1],[1,[],10],[[9],5,10,0,[]]]
- [[7,0],[[],9,4]]
-
- [[3,[]],[[]],[[0,[7],[8,2,9,0]],[[3,2],[3],[3,3,3]],[]]]
- [[[[],5],7,[[0,0,1]]],[9,[6,[10,8],[6,7],1],0,[6,0],0],[2,5,[9,3,6],[[5],8,2,5]],[[[],4],[]]]
-
- [[9,10,2,[5,[],[3,7,0,8,3]]],[[9],4],[2,[[3],[9,2,0,3,8],[9,4,2,9,10]],[[5],[4,2,0,8],9,[],[1,6,6,7,8]],10,8],[9,2]]
- [[0],[10,[[2],3,2,[9]],[0]],[9,[8]],[1,[],[2,2],8],[7,6,[8,[],5,8],[[6]],7]]
-
- [[0],[[5,7,3,8],[[1,5,2,2,5],9,3],[],[],[[0,0,5,6,1],9]],[[9]]]
- [[3,[[3,6,8,3],[]],4],[[9]],[1,[0]]]
-
- [[[1,[6,3,1,4,4],[]],10,10],[[[],[4,6,2,8],[7,3,8]],[],[8],[[9],[4],[5,8]]]]
- [[8]]
-
- [[],[8,[[0,2,0],[4],2],[8,[]],10,[]],[0],[[7,2,[6,4,10,7,8],[8,2,10],[3,10,9,5]],[],[1],3]]
- [[8,3],[[[7,2],[4]],[],[7,10,[7,7,4],[0,5]]],[10,6,8,8,[[10,9],[9,7],[0,10],[10,6,5,6,2]]],[10,7,8,[[7],3,6]]]
-
- [[[10,[7,6,5,8,7],10,4]]]
- [[[9,2,7,2],[[8]]]]
-
- [[],[[0,[8,5,1],2],[[5,9,4,1],8,2],[[3,6,1],[5,4,4,7],[6]]],[],[4,8,[[5,9,6,4],9,[10,6],[0,8,9,1,10]],[4],2]]
- [[6,2,[[7,10,2,8,5],2]]]
-
- [[3,[],0,[]],[2,8,[[5]],[2,6,[0,7,0,1]]]]
- [[2,[[3,4,9,9],[],[6,6,5,3],9],0],[],[9],[[],[8,2,2,[9,6,0,5],[0]],5,6]]
-
- [[[],8,5],[10,[[8],6]]]
- [[[8,5],2,5],[],[]]
-
- [[10,10,[0,0,[4,1,10,5,6]],0,[[7,2],5]],[],[[[10,9],[1,2],[8,1]],6,2,10],[[[10,7],8,[1,9,6,6,10],5,5]]]
- [[[[10,10,2],[6,6,6]],[5,5,[4,8,10,5,9]],5,[],[[2,6],4,7,[8,5,6],[2,3,9,2,1]]],[[5],7],[1,[2,3,[1,6,8,8,4]],9]]
-
- [[9],[3],[2,[[],7,4,4,[7,2]],[1,[4,5,6,3]],5,[[7],9,9]]]
- [[6],[[5,[8,7]],[[4,4,8,2],9]],[1,7,4,[[5],4,[2],10],10],[6,10,10,[]]]
-
- [[10,4,[[5,0],[2,0,2,4,7],[8,3,7,1],8],[],6],[[4,[10,9]],1,10],[[[1,5,6,2,7],3],[[7,0,2,3],1],[[]]],[[5,[2,1,8],[2,3,9]],[[9,1],[3,3,1,2],[10,6,3,5,2]]],[]]
- [[[1,6],[6,2,[3,8,10],[],[7]]],[],[8,[9,[9,1,2,4,10]],8,[],0],[]]
-
- [[[[0],[0,10,7,8],10,9],3]]
- [[8,1],[[[2,8,1,1],[],0]],[[],10,3,7]]
-
- [[[1]],[[5,[3,3,0,8],[8,8,5,5,8],7,6],[6,[2,10,3,9],[4],[5,6,1,8,7],[0,9]],[[0,2,2],1,1,5,8],10],[2,3,[6,[9,9,8,1],[],2],7,5],[0,0,1,[],[9]]]
- [[9,5],[8,[[10]]],[[[7]],8,2],[3,4],[9,[],[[4,4],3,[3],[9],[5]],[2,[7,3],[0,0],[10,8,2]],10]]
-
- [[[[3,1,7,9],2,[0,0,1,4]],8],[[[7,4],9],[7,9,[],2,10],10],[[[0,2,2],4,6,3,6],2,4],[[8,[4,1,9,3],8,7],[[1],[1,0,6],9,9,5],4],[]]
- [[7,2,[[6,5],[6,1],[3,5,5,3,3],9],[[0,7,2],[5,0,2,10,4],[8,3],[],10],0],[]]
-
- [[2,9,1,10]]
- [[],[9,10],[8,[[10,10,7,0],[10,2,1,9,3],1,[6,8,8]]],[],[[[10,2]],[[6,0,9,6,4],7],7]]
-
- [[5,4,8,4]]
- [[],[[6]],[[8,2,0,[]],[],2],[6,1,[10,2,5],[[],[10],[8,0]]],[[6,2],7,[8,[1]],[]]]
-
- [[[5,6,[1,8],10],[9,[2,3,5,6,10],0,[4,3,5]],2],[],[1,9,1,9,[[],[1],4,10,[2,1,9,5,5]]],[3,2,[],6],[[],[],3,6,2]]
- [[1,[[3],10,2,6]],[],[[10,7],2,[],[[],5,6,[2,10]]],[[[9,2],9],[[],4,[10,4,3],10,1],[[4,1,10],[0,3],7],[2,5,7,[0,9,8,5]]]]
-
- [[[],8,[],3],[8,[4,[3,0],[6,6],7,[0,3,5,6]],10,[[10,8,1,1,1]],[]],[4],[4,7],[10,[],1,[9,[0,2],4,2,2],[[5],[1,2,3,7],0,7]]]
- [[[10,4,[10,2]]],[[[7,5,8],4,[2,1]],4,9]]
-
- [[0],[],[2,[[1,6,3,5,4],7],4,9]]
- [[[2,[6,10,2,10],1,8,[]],10,[7,[],2],[[],5,1,[],4],1],[3,[[10,5,7],[1,5,8,3,9],[7,10,0,5,8]],[[0,4,7,2,1],[6,2,1],[3],0]],[0,2,3]]
-
- [[9,10,3],[[3,[2,8,3],6,2,8],[0,[7]],0],[1,8,[[5,2]],[[7,6,6,5]]]]
- [[[]],[10,10,9],[[[2],8],10,[]],[[],[7,[7,9,0],[],0],[2]],[[],[[10],[9,9,2,1,4]],7,4]]
-
- [[2,4],[[1,7,3,5],8]]
- [[],[5],[5,9],[2,3,[8,3,[0],2,6]]]
-
- [[[[0,3],[9,2,5,9,4],[5,2,9,8],[5],9],[9,7,[2,4,8]],8,3,[[6],[2]]]]
- [[7],[[],10,1,[[8,5,8],[8],[5],[1,2],6]],[9,[[2,2],10,[],4],[],[[3],9,[0,10,8,9]],5]]
-
- [[[[]]],[8,6],[[]],[],[[6,2,5]]]
- [[[2,10,[7,6,2]],[10,2],0,10],[[0,6],1,5,7],[10,[]]]
-
- [[],[7,1,[]],[9,3,9],[6],[0,4]]
- [[],[[[4,1,3],[10,9,8,7,9],7,[1,2],[8,0,2,5]],[6],6],[]]
-
- [[],[[],[8],[[0,4],8,[7,8,3,9,9]],[],[[],[6,6,10],0]],[[1,1,[],[10,2,8,7]],[[9,6],[9,6,2,10],2,10,10]],[[8,[5,5,7]],[3,8],3],[[[6,0,2,2],[],8],[0,[7,5,4],4,[4],[1]],[8,6],5,3]]
- [[[10,3],[[1,0,7,3],6,[1,1,2,10],5,[6,7,4]],[],[5]],[],[],[3,4,[[3,7,9,3,0],6,4]],[0,3,0]]
-
- [[],[],[4,[10,7,[2,9,5]],[],[9,1],10]]
- [[[],[2,[1,9],[]]],[],[],[],[6,9,[[6,8],5,2,[4,3,4,6,6]],[[5,2,3,8]],[[3,8],4,5,[4,2,4,1]]]]
-
- [[7,[5,[4],4],1,[[2,5,8,2],0,[9,4]],1],[[9,4,8,[0],5]],[],[8,[5,[2,5,8,6,8],3,1]],[]]
- [[[0,[9,6,2,7,9]],[8,[1,1,8]],4,[3],8],[[5,[8,6],3,1,5],4,8,[],[[1,1]]]]
-
- [[],[[3,3],[[8,8],10,2],9,4],[0],[3]]
- [[3],[],[8],[]]
-
- [[[5,[8,5]],[9,2]],[[[4,9],[3,1],[2,7,5],[2,9,2]],0],[[2,10,2,[],[4,4,4]]],[[7,[1,2,5],[],9],[8,3,[3,8,0,1,10],0,5],1,7],[[[8,0,6,2],[],4,[10]],3,[],4,8]]
- [[[[9,8,4,2,4],[0,2,0],5],[7,[4,7,10],[]],[[4,0],2],[8,[2,0,10,4],[7,6]]],[],[1,[[1,4,9,8,6],4]]]
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day14.cs b/Days/Day14.cs
deleted file mode 100644
index 9e64f84..0000000
--- a/Days/Day14.cs
+++ /dev/null
@@ -1,582 +0,0 @@
-using System.Drawing;
-using Spectre.Console;
-using Color = Spectre.Console.Color;
-
-namespace AdventOfCode.Days;
-
-public enum CellType
-{
- Air = 0,
- Rock,
- Sand
-}
-
-public class MapPath
-{
- public IEnumerable Points => _points;
-
- private readonly IList _points;
-
- public MapPath()
- {
- _points = new List();
- }
-
- public MapPath(IEnumerable points)
- {
- _points = new List(points);
- }
-
- public void AddPoint(Point point)
- {
- _points.Add(point);
- }
-
- public void DrawPath(CellType[,] map, int xOffset, int yOffset)
- {
- if (!_points.Any())
- {
- return;
- }
-
- // Draw each point
- var previousPoint = _points.First();
-
- foreach (var point in _points.Skip(1))
- {
- // Draw horizontally
- if (previousPoint.X != point.X)
- {
- var xStart = Math.Min(previousPoint.X, point.X);
- var xEnd = Math.Max(previousPoint.X, point.X);
-
- for (int x = xStart; x <= xEnd; x++)
- {
- map[x + xOffset, point.Y + yOffset] = CellType.Rock;
- }
- }
- // Draw vertically
- else
- {
- var yStart = Math.Min(previousPoint.Y, point.Y);
- var yEnd = Math.Max(previousPoint.Y, point.Y);
-
- for (int y = yStart; y <= yEnd; y++)
- {
- map[point.X + xOffset, y + yOffset] = CellType.Rock;
- }
- }
-
- // Use current point for next point drawing
- previousPoint = point;
- }
- }
-
- public void DrawPath(IDictionary map)
- {
- if (!_points.Any())
- {
- return;
- }
-
- // Draw each point
- var previousPoint = _points.First();
-
- foreach (var point in _points.Skip(1))
- {
- // Draw horizontally
- if (previousPoint.X != point.X)
- {
- var xStart = Math.Min(previousPoint.X, point.X);
- var xEnd = Math.Max(previousPoint.X, point.X);
-
- for (int x = xStart; x <= xEnd; x++)
- {
- map[point with { X = x }] = CellType.Rock;
- }
- }
- // Draw vertically
- else
- {
- var yStart = Math.Min(previousPoint.Y, point.Y);
- var yEnd = Math.Max(previousPoint.Y, point.Y);
-
- for (int y = yStart; y <= yEnd; y++)
- {
- map[point with { Y = y }] = CellType.Rock;
- }
- }
-
- // Use current point for next point drawing
- previousPoint = point;
- }
- }
-}
-
-public class Day14 : Day
-{
- public override int Number => 14;
- public override string Name => "Regolith Reservoir";
-
- private readonly Point _sandSource = new(500, 0);
- private Point _offsetSandSource;
-
- public override void RunPart1(bool display = true)
- {
- var map = GenerateMap();
-
- // Draw canvas
- var canvas = GenerateCanvas(map);
- canvas.SetPixel(_offsetSandSource.X, _offsetSandSource.Y, Color.IndianRed1);
-
- // Simulate sand fall
- int sandBlocksCount = 0;
- while (GenerateSand(map, canvas, _offsetSandSource))
- {
- sandBlocksCount++;
- }
-
- if (display)
- {
- AnsiConsole.Write(canvas);
-
- AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- var map = GenerateDictionaryMap();
-
- // Compute ground level
- var yMax = map.Keys.Max(p => p.Y);
- var groundLevel = yMax + 2;
-
- // Simulate sand fall
- int sandBlocksCount = 0;
- while (GenerateSand(map, _sandSource, groundLevel))
- {
- 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)
- {
- // Stop if source is blocked
- if (map[sandSource.X, sandSource.Y] == CellType.Sand)
- {
- return false;
- }
-
- var width = map.GetLength(0);
- var height = map.GetLength(1);
-
- var sandPosition = new Point(sandSource.X, sandSource.Y);
-
- // Make sand fall till we don't go outbound
- while (sandPosition.X >= 0 && sandPosition.X < width && sandPosition.Y >= 0 && sandPosition.Y < height)
- {
- // Fall outbound below
- if (sandPosition.Y + 1 >= height)
- {
- return false;
- }
-
- // Try below
- if (map[sandPosition.X, sandPosition.Y + 1] == CellType.Air)
- {
- sandPosition.Y += 1;
- continue;
- }
-
- // Fall outbound on the left
- if (sandPosition.X - 1 < 0)
- {
- return false;
- }
-
- // Try on the left
- if (map[sandPosition.X - 1, sandPosition.Y + 1] == CellType.Air)
- {
- sandPosition.X -= 1;
- sandPosition.Y += 1;
-
- continue;
- }
-
- // Fall outbound on the right
- if (sandPosition.X + 1 >= width)
- {
- return false;
- }
-
- // Lastly try on the right
- if (map[sandPosition.X + 1, sandPosition.Y + 1] == CellType.Air)
- {
- sandPosition.X += 1;
- sandPosition.Y += 1;
-
- continue;
- }
-
- // Can't go anywhere, stop
- break;
- }
-
- map[sandPosition.X, sandPosition.Y] = CellType.Sand;
- canvas.SetPixel(sandPosition.X, sandPosition.Y, Color.SandyBrown);
-
- return true;
- }
-
- private static bool GenerateSand(IDictionary map, in Point sandSource, int groundY)
- {
- // Stop if source is blocked
- if (map.GetValueOrDefault(sandSource, CellType.Air) == CellType.Sand)
- {
- return false;
- }
-
- var sandPosition = new Point(sandSource.X, sandSource.Y);
-
- // Make sand fall till we don't go outbound
- while (true)
- {
- // Sand is touching ground, stop here
- if (sandPosition.Y + 1 >= groundY)
- {
- break;
- }
-
- // Try below
- var below = sandPosition with { Y = sandPosition.Y + 1 };
- if (map.GetValueOrDefault(below, CellType.Air) == CellType.Air)
- {
- sandPosition = below;
- continue;
- }
-
- // Try on the left
- var left = new Point(sandPosition.X - 1, sandPosition.Y + 1);
- if (map.GetValueOrDefault(left, CellType.Air) == CellType.Air)
- {
- sandPosition = left;
- continue;
- }
-
- // Lastly try on the right
- var right = new Point(sandPosition.X + 1, sandPosition.Y + 1);
- if (map.GetValueOrDefault(right, CellType.Air) == CellType.Air)
- {
- sandPosition = right;
- continue;
- }
-
- // Can't go anywhere, stop
- break;
- }
-
- map[sandPosition] = CellType.Sand;
-
- return true;
- }
-
- private static Canvas GenerateCanvas(CellType[,] map)
- {
- var width = map.GetLength(0);
- var height = map.GetLength(1);
-
- var canvas = new Canvas(width, height);
-
- for (int x = 0; x < width; x++)
- {
- for (int y = 0; y < height; y++)
- {
- canvas.SetPixel(x, y, ColorCellType(map[x, y]));
- }
- }
-
- return canvas;
- }
-
- private static Canvas GenerateCanvas(IDictionary map, in Point sandSource)
- {
- // Compute dimensions
- var xMin = map.Keys.Min(p => p.X);
- var xMax = map.Keys.Max(p => p.X);
-
- var yMin = map.Keys.Min(p => p.Y);
- var yMax = map.Keys.Max(p => p.Y);
-
- var width = xMax - xMin + 1;
- var height = yMax - yMin + 1;
-
- var canvas = new Canvas(width, height);
-
- // Fill background
- for (int x = xMin; x <= xMax; x++)
- {
- for (int y = yMin; y <= yMax; y++)
- {
- canvas.SetPixel(x - xMin, y - yMin, Color.Grey23);
- }
- }
-
- // Fill canvas
- foreach (var (point, cellType) in map)
- {
- canvas.SetPixel(point.X - xMin, point.Y - yMin, ColorCellType(cellType));
- }
-
- canvas.SetPixel(sandSource.X - xMin, sandSource.Y - yMin, Color.IndianRed1);
-
- return canvas;
- }
-
- private CellType[,] GenerateMap()
- {
- var paths = Input.ReadAllLines()
- .Select(line => new MapPath(line.Split(" -> ")
- .Select(p => p.Split(','))
- .Select(s => new Point(int.Parse(s[0]), int.Parse(s[1])))))
- .ToList();
-
- // Compute xMin, xMax, yMin, yMax
- int xMin = paths.SelectMany(p => p.Points).Min(p => p.X);
- int xMax = paths.SelectMany(p => p.Points).Max(p => p.X);
-
- int yMax = paths.SelectMany(p => p.Points).Max(p => p.Y);
-
- // Construct 2D map
- var width = xMax - xMin + 1;
- var height = yMax + 1;
- var map = new CellType[width, height];
-
- // Fill rocks
- paths.ForEach(p => p.DrawPath(map, -xMin, 0));
-
- // Compute new sand source
- _offsetSandSource = _sandSource;
- _offsetSandSource.Offset(-xMin, 0);
-
- return map;
- }
-
- private static Color ColorCellType(CellType cellType)
- {
- return cellType switch
- {
- CellType.Air => Color.Grey23,
- CellType.Rock => Color.LightSlateGrey,
- CellType.Sand => Color.SandyBrown,
- _ => throw new Exception("Invalid CellType")
- };
- }
-
- private static IDictionary GenerateDictionaryMap()
- {
- var paths = Input.ReadAllLines()
- .Select(line => new MapPath(line.Split(" -> ")
- .Select(p => p.Split(','))
- .Select(s => new Point(int.Parse(s[0]), int.Parse(s[1])))))
- .ToList();
-
- // Construct 2D map
- var map = new Dictionary();
-
- // Fill rocks
- paths.ForEach(p => p.DrawPath(map));
-
- return map;
- }
-
- #region Input
-
- public const string Input =
- """
- 521,171 -> 525,171
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 503,109 -> 507,109
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 488,38 -> 493,38
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 482,93 -> 496,93 -> 496,92
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 497,29 -> 502,29
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 501,32 -> 506,32
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 503,115 -> 507,115
- 524,173 -> 528,173
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 486,47 -> 490,47
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 495,50 -> 499,50
- 492,41 -> 496,41
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 522,177 -> 522,178 -> 536,178 -> 536,177
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 503,121 -> 507,121
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 515,121 -> 519,121
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 498,35 -> 503,35
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 503,171 -> 507,171
- 509,121 -> 513,121
- 494,12 -> 494,13 -> 507,13 -> 507,12
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 500,112 -> 504,112
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 512,173 -> 516,173
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 502,38 -> 507,38
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 506,169 -> 510,169
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 491,121 -> 495,121
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 518,173 -> 522,173
- 501,50 -> 505,50
- 497,115 -> 501,115
- 498,47 -> 502,47
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 518,169 -> 522,169
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 489,44 -> 493,44
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 509,167 -> 513,167
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 487,133 -> 487,134 -> 501,134
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 512,118 -> 516,118
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 512,165 -> 516,165
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 491,35 -> 496,35
- 500,173 -> 504,173
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 483,50 -> 487,50
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 500,118 -> 504,118
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 492,47 -> 496,47
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 495,38 -> 500,38
- 494,12 -> 494,13 -> 507,13 -> 507,12
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 494,118 -> 498,118
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 509,115 -> 513,115
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 506,173 -> 510,173
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 505,35 -> 510,35
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 506,118 -> 510,118
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 509,171 -> 513,171
- 494,12 -> 494,13 -> 507,13 -> 507,12
- 509,38 -> 514,38
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 495,44 -> 499,44
- 482,93 -> 496,93 -> 496,92
- 515,171 -> 519,171
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
- 522,177 -> 522,178 -> 536,178 -> 536,177
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
- 515,167 -> 519,167
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 506,112 -> 510,112
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 522,177 -> 522,178 -> 536,178 -> 536,177
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
- 487,133 -> 487,134 -> 501,134
- 497,121 -> 501,121
- 476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- 489,50 -> 493,50
- 465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
- 512,169 -> 516,169
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 494,32 -> 499,32
- 490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
- 488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day15.cs b/Days/Day15.cs
deleted file mode 100644
index 5257161..0000000
--- a/Days/Day15.cs
+++ /dev/null
@@ -1,292 +0,0 @@
-using System.Collections.Concurrent;
-using System.Drawing;
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class SensorBeaconPair
-{
- public Point SensorPosition { get; }
- public Point BeaconPosition { get; }
-
- public int SensorRange =>
- Math.Abs(SensorPosition.X - BeaconPosition.X) + Math.Abs(SensorPosition.Y - BeaconPosition.Y);
-
- public SensorBeaconPair(in Point sensorPosition, in Point beaconPosition)
- {
- SensorPosition = sensorPosition;
- BeaconPosition = beaconPosition;
- }
-}
-
-public class CoverRange
-{
- public int Start { get; }
- public int End { get; }
- public int Covered => End - Start + 1;
-
- public CoverRange(int start, int end)
- {
- Start = start;
- End = end;
- }
-
- public CoverRange(CoverRange coverRange)
- {
- Start = coverRange.Start;
- End = coverRange.End;
- }
-
- public CoverRange Subtract(CoverRange other)
- {
- // Overlap on left
- int newStart;
- if (other.Start <= Start && other.End >= Start)
- {
- newStart = other.End + 1;
- }
- else
- {
- newStart = Start;
- }
-
- // Overlap on right
- int newEnd;
- if (other.Start <= End && other.End >= End)
- {
- newEnd = other.Start - 1;
- }
- else
- {
- newEnd = End;
- }
-
- return new CoverRange(newStart, newEnd);
- }
-
- public static CoverRange operator -(CoverRange left, CoverRange right)
- {
- return left.Subtract(right);
- }
-}
-
-public class Day15 : Day
-{
- public override int Number => 15;
- public override string Name => "Beacon Exclusion Zone";
- public override void RunPart1(bool display = true)
- {
- const int targetY = 2_000_000;
-
- // Parse pairs
- var pairs = ParsePairs();
-
- var ranges = new List(pairs.Count);
-
- // Get which columns are included on line targetY, remove the ones which already contains a beacon
- var beaconsOnTargetY = new HashSet();
- foreach (var sensorBeaconPair in pairs)
- {
- // Get covered columns on y line
- var xCenter = sensorBeaconPair.SensorPosition.X;
- var coveredColumns = sensorBeaconPair.SensorRange - Math.Abs(sensorBeaconPair.SensorPosition.Y - targetY);
-
- if (coveredColumns > 0)
- {
- ranges.Add(new CoverRange(xCenter - coveredColumns, xCenter + coveredColumns));
-
- // Check if the beacon is on targetY
- if (sensorBeaconPair.BeaconPosition.Y == targetY)
- {
- beaconsOnTargetY.Add(sensorBeaconPair.BeaconPosition.X);
- }
- }
- }
-
- // Remove overlapped ranges => inner.Start >= outer.Start && inner.End <= outer.End));
- ranges.RemoveAll(inner =>
- ranges.Where(outer => outer != inner).Any(outer => inner.Start >= outer.Start && inner.End <= outer.End));
-
- // Compute unique number of x columns
- long totalCovered = 0;
- for (int i = 0; i < ranges.Count; i++)
- {
- var range = ranges[i];
- var coverRange = range;
-
- // Add number of covered columns and then subtract common ones
- for (int j = i + 1; j < ranges.Count; j++)
- {
- var exclude = ranges[j];
-
- coverRange -= exclude;
- }
-
- totalCovered += coverRange.Covered;
- }
-
- // Remove lines which contains a beacon
- totalCovered -= beaconsOnTargetY.Count;
-
- // Print total covered columns on line Y
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Number of positions that cannot contain a beacon: [yellow]{totalCovered}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- const int xMin = 0;
- const int xMax = 4_000_000;
- const int yMin = 0;
- const int yMax = 4_000_000;
-
- bool IsOutbound(Point point) => point.X is < xMin or > xMax || point.Y is < yMin or > yMax;
-
- // Parse pairs
- var pairs = ParsePairs();
-
- // Find all points that are just outside a sensor range
- var possiblePoints = new ConcurrentBag();
-
- Parallel.For(0, pairs.Count, i =>
- {
- var pair = pairs[i];
-
- var sensor = pair.SensorPosition;
- var distance = pair.SensorRange + 1;
-
- for (int x = -distance; x <= distance; x++)
- {
- var y = distance - Math.Abs(x);
- var positivePoint = new Point(sensor.X + x, sensor.Y + y);
- var negativePoint = new Point(sensor.X + x, sensor.Y - y);
-
- // If both points are outbound, just skip
- var positiveIsOutbound = IsOutbound(positivePoint);
- var negativeIsOutbound = IsOutbound(negativePoint);
-
- if (positiveIsOutbound && negativeIsOutbound)
- {
- continue;
- }
-
- // Check if this point is just outside at least one other sensor range
- for (int otherIndex = 0; otherIndex < pairs.Count; otherIndex++)
- {
- if (otherIndex == i)
- {
- continue;
- }
-
- var otherPair = pairs[otherIndex];
-
- var otherSensor = otherPair.SensorPosition;
- var otherDistance = otherPair.SensorRange + 1;
-
- if (!positiveIsOutbound)
- {
- var distancePositive = Math.Abs(positivePoint.X - otherSensor.X) +
- Math.Abs(positivePoint.Y - otherSensor.Y);
-
- if (distancePositive == otherDistance)
- {
- possiblePoints.Add(positivePoint);
- }
- }
-
- if (!negativeIsOutbound)
- {
- var distanceNegative = Math.Abs(negativePoint.X - negativePoint.X) +
- Math.Abs(negativePoint.Y - negativePoint.Y);
-
- if (distanceNegative == otherDistance)
- {
- possiblePoints.Add(negativePoint);
- }
- }
- }
- }
- });
-
- // Keep the only outside detection point
- var finalPoint = possiblePoints.First(f =>
- pairs.All(p => Math.Abs(f.X - p.SensorPosition.X) + Math.Abs(f.Y - p.SensorPosition.Y) > p.SensorRange));
-
- var tuningFrequency = finalPoint.X * (long) 4_000_000 + finalPoint.Y;
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Tuning frequency: [yellow]{tuningFrequency}[/][/]");
- }
- }
-
- private static IList ParsePairs()
- {
- var pairs = new List();
-
- foreach (var line in Input.ReadAllLines())
- {
- var span = line.AsSpan();
-
- // Parse sensor position
- int sensorXStart = span.IndexOf('=') + 1;
- int sensorXEnd = span.IndexOf(',');
-
- var sensorX = int.Parse(span[sensorXStart..sensorXEnd]);
- span = span[sensorXEnd..];
-
- int sensorYStart = span.IndexOf('=') + 1;
- int sensorYEnd = span.IndexOf(':');
-
- var sensorY = int.Parse(span[sensorYStart..sensorYEnd]);
- span = span[sensorYEnd..];
-
- // Parse beacon
- int beaconXStart = span.IndexOf('=') + 1;
- int beaconXEnd = span.IndexOf(',');
-
- var beaconX = int.Parse(span[beaconXStart..beaconXEnd]);
- span = span[beaconXEnd..];
-
- int beaconYStart = span.IndexOf('=') + 1;
-
- var beaconY = int.Parse(span[beaconYStart..]);
-
- pairs.Add(new SensorBeaconPair(new Point(sensorX, sensorY), new Point(beaconX, beaconY)));
- }
-
- return pairs;
- }
-
- #region Input
-
- public const string Input =
- """
- Sensor at x=1384790, y=3850432: closest beacon is at x=2674241, y=4192888
- Sensor at x=2825953, y=288046: closest beacon is at x=2154954, y=-342775
- Sensor at x=3553843, y=2822363: closest beacon is at x=3444765, y=2347460
- Sensor at x=2495377, y=3130491: closest beacon is at x=2761496, y=2831113
- Sensor at x=1329263, y=1778185: closest beacon is at x=2729595, y=2000000
- Sensor at x=2882039, y=2206085: closest beacon is at x=2729595, y=2000000
- Sensor at x=3903141, y=2510440: closest beacon is at x=4006219, y=3011198
- Sensor at x=3403454, y=3996578: closest beacon is at x=3754119, y=4475047
- Sensor at x=3630476, y=1048796: closest beacon is at x=3444765, y=2347460
- Sensor at x=16252, y=2089672: closest beacon is at x=-276514, y=2995794
- Sensor at x=428672, y=1150723: closest beacon is at x=-281319, y=668868
- Sensor at x=2939101, y=3624676: closest beacon is at x=2674241, y=4192888
- Sensor at x=3166958, y=2890076: closest beacon is at x=2761496, y=2831113
- Sensor at x=3758241, y=3546895: closest beacon is at x=4006219, y=3011198
- Sensor at x=218942, y=3011070: closest beacon is at x=-276514, y=2995794
- Sensor at x=52656, y=3484635: closest beacon is at x=-276514, y=2995794
- Sensor at x=2057106, y=405314: closest beacon is at x=2154954, y=-342775
- Sensor at x=1966905, y=2495701: closest beacon is at x=2761496, y=2831113
- Sensor at x=511976, y=2696731: closest beacon is at x=-276514, y=2995794
- Sensor at x=3094465, y=2478570: closest beacon is at x=3444765, y=2347460
- Sensor at x=806671, y=228252: closest beacon is at x=-281319, y=668868
- Sensor at x=3011731, y=1976307: closest beacon is at x=2729595, y=2000000
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day2.cs b/Days/Day2.cs
deleted file mode 100644
index 255f74f..0000000
--- a/Days/Day2.cs
+++ /dev/null
@@ -1,2616 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public enum Choice : long
-{
- Rock = 1,
- Paper = 2,
- Scissors = 3
-}
-
-public enum Outcome : long
-{
- Lose = 0,
- Draw = 3,
- Win = 6
-}
-
-public class Day2 : Day
-{
- public override int Number => 2;
- public override string Name => "Rock Paper Scissors";
-
- public override void RunPart1(bool display = true)
- {
- long score = 0;
-
- foreach (var line in Input.ReadAllLines())
- {
- var adversaryChoice = AdversaryInputToChoice(line[0]);
- var selfChoice = SelfInputToChoice(line[2]);
-
- score += (long) selfChoice;
- score += (long) ComputeOutcome(adversaryChoice, selfChoice);
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- long score = 0;
-
- foreach (var line in Input.ReadAllLines())
- {
- var adversaryChoice = AdversaryInputToChoice(line[0]);
- var desiredOutcome = InputToOutcome(line[2]);
- var selfChoice = ComputeChoiceFromDesiredOutcome(adversaryChoice, desiredOutcome);
-
- score += (long) selfChoice;
- score += (long) desiredOutcome;
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Total score: [yellow]{score}[/][/]");
- }
- }
-
- private Outcome ComputeOutcome(Choice adversary, Choice self) => (adversary, self) switch
- {
- var (x, y) when x == y => Outcome.Draw,
- (Choice.Rock, Choice.Paper) => Outcome.Win,
- (Choice.Paper, Choice.Scissors) => Outcome.Win,
- (Choice.Scissors, Choice.Rock) => Outcome.Win,
- _ => Outcome.Lose
- };
-
- private Choice ComputeChoiceFromDesiredOutcome(Choice adversaryChoice, Outcome desiredOutcome) =>
- (adversaryChoice, desiredOutcome) switch
- {
- (var x, Outcome.Draw) => x,
- (Choice.Rock, Outcome.Win) => Choice.Paper,
- (Choice.Paper, Outcome.Win) => Choice.Scissors,
- (Choice.Scissors, Outcome.Win) => Choice.Rock,
- (Choice.Rock, Outcome.Lose) => Choice.Scissors,
- (Choice.Paper, Outcome.Lose) => Choice.Rock,
- (Choice.Scissors, Outcome.Lose) => Choice.Paper,
- _ => throw new ArgumentOutOfRangeException()
- };
-
- private Choice AdversaryInputToChoice(char input) => input switch
- {
- 'A' => Choice.Rock,
- 'B' => Choice.Paper,
- 'C' => Choice.Scissors,
- _ => throw new ArgumentException("Invalid input")
- };
-
- private Choice SelfInputToChoice(char input) => input switch
- {
- 'X' => Choice.Rock,
- 'Y' => Choice.Paper,
- 'Z' => Choice.Scissors,
- _ => throw new ArgumentException("Invalid input")
- };
-
- private Outcome InputToOutcome(char input) => input switch
- {
- 'X' => Outcome.Lose,
- 'Y' => Outcome.Draw,
- 'Z' => Outcome.Win,
- _ => throw new ArgumentOutOfRangeException(nameof(input), input, null)
- };
-
- #region Input
-
- public const string Input =
- """
- B Z
- B X
- C Y
- B Y
- B Y
- A X
- A X
- B Z
- A Z
- B Z
- B Y
- B X
- C X
- B Y
- A Z
- B Y
- A X
- B X
- C Y
- B Y
- B Y
- C Y
- B X
- B X
- C X
- B Y
- B Y
- B Y
- C Y
- C X
- B Y
- C X
- C X
- B Y
- B Z
- C Y
- B Y
- B Z
- B X
- B Y
- B Y
- C Y
- B Y
- C Y
- C Y
- A Z
- B X
- C X
- B Y
- B X
- C X
- A X
- B Y
- C Y
- B X
- C X
- C Y
- B X
- B Z
- B Y
- B X
- C Y
- B X
- B Y
- B Y
- B Y
- B Y
- A X
- A Z
- B Z
- B Y
- C X
- B Y
- B Y
- C Y
- C Z
- C Z
- C X
- B X
- C Z
- B Y
- B Y
- C X
- C Z
- C X
- A Z
- C Y
- B Y
- B Y
- B Y
- C Y
- C Y
- C X
- C X
- C Z
- A X
- B Y
- C X
- B Z
- B Y
- C X
- B X
- B Z
- A Z
- C Y
- B Z
- C X
- C X
- B Y
- B Y
- B Y
- C Y
- C X
- B X
- B Y
- A Z
- A Z
- C Y
- B Y
- C Y
- C Y
- C Y
- B X
- A Z
- C Y
- C Y
- A Z
- A Z
- B X
- B Y
- B Z
- A Z
- B X
- B Y
- C Z
- C Z
- B Z
- B Y
- B X
- A Y
- C Z
- C X
- A Z
- A Z
- B Y
- B Y
- C Y
- C Y
- B Y
- B Y
- B Y
- A Z
- C Y
- C Z
- C X
- A Z
- B X
- B Y
- A Y
- A Y
- B Y
- B Y
- C X
- B Y
- B Y
- C Z
- B Y
- B Y
- A Z
- C Y
- B X
- C X
- A X
- C X
- B Y
- B X
- A Z
- C X
- C Y
- A Z
- B Y
- A Z
- B X
- B X
- A Z
- B Y
- C X
- C X
- A Z
- A X
- C X
- C X
- C X
- B Y
- C Z
- C Y
- C X
- B Y
- B Y
- B Y
- A X
- A Z
- C Y
- B Y
- B Y
- A X
- C Y
- C Z
- C Y
- C X
- B Y
- B Y
- B Y
- B Y
- A Z
- B Y
- A Z
- B X
- B Y
- B Y
- B X
- C Y
- A X
- A Z
- B Y
- C Y
- C Y
- B Y
- B Y
- C X
- B Y
- B X
- A Z
- B Y
- B Y
- C Y
- B Y
- B Y
- B Y
- A X
- B X
- B Z
- C Y
- B Z
- C X
- C X
- B Z
- B Y
- A Z
- A Z
- B Y
- C X
- A X
- C Y
- B Y
- B Y
- A X
- B Y
- A Y
- C Y
- B Y
- C X
- B Y
- A Z
- B Z
- C Y
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- C Z
- A X
- B Y
- B X
- C X
- C Z
- C Z
- C Y
- C Y
- A X
- C Y
- B Y
- A X
- C X
- A Z
- C X
- B Y
- C Z
- C Z
- A Z
- A X
- C Y
- C X
- B Y
- C Z
- B Y
- C Y
- C X
- C Y
- B Y
- B Y
- B Y
- A X
- A Z
- B Y
- B X
- B X
- B Y
- B Y
- B Y
- A Z
- B Y
- B Y
- A X
- A X
- A Z
- A Z
- B X
- C Y
- A Z
- B Y
- B Y
- C Z
- C X
- C Y
- A Z
- C Y
- C Y
- C Y
- C Y
- C X
- A Z
- C Z
- A Z
- C Y
- C X
- B Y
- B Y
- C Z
- B X
- B Z
- C X
- A Y
- C Y
- B X
- B X
- B Y
- C Y
- A Z
- A Z
- B X
- B Z
- B X
- C Y
- A X
- A X
- C Z
- B Y
- C Y
- C X
- B Y
- A Z
- B Y
- C Y
- B Z
- C Z
- C X
- B Z
- C Z
- B Z
- A X
- C Y
- A Z
- B Y
- B Y
- B Y
- B Y
- B Y
- B Y
- A Z
- C Z
- B X
- C X
- C Y
- C Y
- B Y
- C X
- C X
- A Y
- C Y
- C Y
- A Z
- C Z
- B Y
- B X
- C X
- B Y
- C X
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- A Z
- C Y
- B Z
- B Y
- C X
- B Y
- C X
- A Y
- A Z
- B Y
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- B Y
- B Z
- C Y
- B Z
- B Z
- A Z
- B Y
- B Y
- C X
- A X
- B Y
- A Z
- C X
- C X
- B Y
- B Y
- A X
- B Y
- B Y
- C X
- B Y
- C X
- B Y
- B Y
- B Y
- B Y
- A X
- B Y
- B Z
- B Y
- A Z
- C X
- C X
- C Y
- A Z
- C Y
- B Y
- B X
- A X
- B Y
- A Z
- B Y
- C Y
- B Y
- B Y
- C Y
- C X
- A Z
- A X
- A Z
- C Z
- B Y
- B Y
- C Y
- B X
- C X
- B Y
- A Z
- B Y
- C X
- A X
- C X
- C Y
- C Y
- B X
- B Y
- B Y
- C Z
- B Y
- C X
- A Z
- C Z
- C Y
- A Z
- C X
- C Y
- C Y
- C X
- B Y
- B Y
- C Z
- A Z
- B Y
- A X
- B Y
- A X
- A X
- C Y
- C X
- A Z
- B Y
- C Y
- C X
- B Y
- B Y
- B Y
- B X
- B X
- A X
- C X
- B Y
- C Y
- A Z
- A Z
- A Z
- B Y
- A Z
- B Y
- C X
- B Y
- C X
- C Y
- A Z
- B Y
- B Z
- A Z
- B Y
- A Z
- B Y
- B Y
- C Z
- B Y
- B Y
- A Z
- A X
- C Z
- C Z
- B Z
- B Y
- A Z
- B Y
- B Y
- B Y
- B Y
- C Z
- A Z
- C X
- B X
- B Y
- A X
- A X
- B Y
- A Z
- A X
- C Y
- B Y
- C X
- A Z
- B Y
- C Z
- C Y
- B Y
- A X
- C Y
- B Y
- B Z
- A Y
- B Y
- B Y
- A Z
- B Y
- C Z
- C X
- B Y
- A Y
- C Z
- B X
- A X
- B Y
- B Y
- B Z
- B Z
- C Y
- B Y
- B Y
- A Z
- A Z
- B Y
- B X
- C Y
- C Y
- B Y
- B Y
- B Z
- B Z
- B Y
- C Y
- A Z
- B Y
- A Z
- B Y
- B Y
- A Z
- A Z
- C X
- C Z
- B Y
- C X
- B X
- A Z
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- B Y
- B X
- B Y
- A X
- B Z
- A Z
- C Z
- B X
- A Z
- C Y
- C Y
- A Z
- B Y
- C Z
- C Z
- C Y
- B Y
- B Y
- B Y
- A Z
- B Y
- B X
- C X
- B Y
- B Y
- B Y
- B Y
- C Y
- B Y
- C Y
- B Y
- C Y
- C X
- A Z
- C Y
- C Z
- C Z
- B X
- C Y
- B Y
- B X
- C Y
- B Y
- B Y
- C Y
- C X
- C X
- A Z
- B Y
- C X
- A Z
- C Z
- B Y
- B Y
- C X
- C X
- B Y
- B X
- C Y
- B Y
- B Y
- A Z
- A Z
- C Z
- A Z
- B Y
- C X
- C X
- B X
- B Y
- B Y
- B Z
- B Y
- B Y
- B Y
- B Y
- B Z
- B Y
- C Y
- C Z
- B Y
- C Y
- C Y
- C Y
- C Y
- A Z
- A Z
- C Y
- C Y
- A X
- B Y
- C Y
- A X
- C X
- C Y
- A Z
- B Y
- B Z
- A X
- B Y
- B Z
- B Y
- B Y
- B Z
- C X
- C Y
- B Y
- B Z
- B X
- A Z
- B Y
- C Y
- B Y
- B Y
- A X
- C X
- B Y
- C X
- B Y
- C Y
- A X
- A X
- A Z
- C Y
- B Y
- C Y
- C X
- B X
- C X
- C X
- A X
- A Z
- B Y
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- B Y
- B Y
- B Y
- B X
- B Y
- C Y
- B Y
- A Z
- B Y
- C X
- C Y
- B Z
- C Z
- B Y
- A Y
- C X
- B Y
- B Y
- B Y
- C X
- A Y
- C Z
- B Y
- C X
- C Y
- C Y
- C Y
- C X
- C Y
- B Z
- B Y
- C Y
- C X
- B Y
- B Y
- B X
- C Y
- B X
- C Z
- B Y
- C X
- B Z
- C X
- B Y
- C X
- B Y
- C Y
- C Y
- A Z
- C Y
- C X
- B Y
- C X
- B X
- A Z
- B Y
- A Z
- A Z
- A Z
- C Y
- B X
- A Y
- C Y
- B Y
- B Y
- C Y
- C Y
- C X
- B X
- A X
- A Z
- C X
- A Y
- B X
- C Z
- B Y
- B Y
- B X
- C X
- B Y
- B Y
- B Y
- B X
- B Y
- C X
- B Y
- B Y
- C Z
- C Y
- B Y
- C Y
- B Y
- A Z
- C Z
- A Y
- B Y
- B Y
- B Y
- C Y
- C Y
- C Y
- B Y
- C Z
- B Y
- C Z
- A Z
- A Z
- C Z
- C Y
- C Z
- C Y
- A Z
- C X
- B X
- B Y
- C Y
- B Z
- C Z
- C X
- B Y
- A Z
- B Y
- C X
- B Z
- A X
- B Y
- A Z
- C Z
- C X
- C X
- C Y
- B Y
- B Y
- A Z
- A Z
- B Y
- B X
- A Z
- B Y
- C Y
- A X
- C Z
- B Y
- B X
- B Y
- C Y
- C Z
- B Z
- A Z
- B Y
- A X
- C X
- B Y
- A Z
- C X
- B Z
- C Y
- C Y
- C X
- C X
- C Y
- B Y
- B Y
- B Z
- B X
- C X
- B Z
- C X
- B X
- C Z
- C Z
- C X
- B Y
- C Y
- C X
- B Y
- A Z
- C Y
- C Z
- C Z
- C Y
- B Y
- A X
- C Z
- C X
- B Y
- C X
- C Z
- B Y
- C Y
- B Y
- C Y
- A Z
- B Z
- C Z
- C X
- B Z
- B Z
- B Y
- A Y
- C Y
- C Y
- B X
- B X
- B Y
- B Y
- B Y
- C X
- B Z
- B Y
- B Y
- B Y
- C X
- A X
- C Y
- A X
- B Y
- B Y
- B Y
- B Y
- B Y
- C Y
- C Y
- B Y
- B Y
- B Y
- B Y
- C Y
- B Y
- C X
- B Y
- B Y
- C X
- A Z
- A X
- C Y
- C Z
- B Y
- C X
- B Y
- B X
- A Z
- B X
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- B Z
- A Z
- A X
- B Y
- A Z
- C Y
- B Y
- C X
- B Y
- C Y
- B Y
- B Y
- C X
- C Y
- A Y
- C X
- C Y
- B Y
- A Y
- A Z
- C Z
- A Y
- A Z
- B Y
- C Y
- C Y
- B Y
- B Y
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- C X
- C X
- B Y
- C X
- B Y
- A Z
- B Y
- B X
- C Z
- C Y
- A Y
- B Y
- C Y
- B Y
- C Y
- C Y
- C Y
- C X
- C Y
- B Y
- B Y
- C Y
- B Y
- C Y
- A Z
- A X
- B Y
- A Z
- B Y
- C X
- C X
- B Y
- C Z
- B Y
- B Y
- C Y
- B Y
- C Z
- A Y
- B Y
- C Y
- B Y
- A Z
- C Y
- B Z
- C Y
- C Y
- C Z
- B Y
- C X
- B Z
- B Y
- B Y
- B Y
- C Z
- B Y
- B Y
- B Y
- A Z
- C X
- B Z
- B Y
- B Y
- C Y
- B Y
- C X
- B Y
- B Y
- C Y
- C X
- C Y
- B Y
- B Y
- C Y
- B Y
- A Y
- B Y
- A Z
- B Y
- B Y
- B X
- A Z
- B Y
- B Y
- C Y
- C X
- C Z
- A Z
- A Z
- C X
- B Y
- C Y
- B Y
- C X
- B Y
- B Y
- C Y
- C X
- B Y
- B Y
- B Y
- B Y
- B Y
- C X
- B Z
- B Z
- A Z
- B Z
- B Y
- B Z
- B Y
- C Y
- A Z
- A X
- B Y
- C Z
- B X
- A X
- C Y
- B Y
- B Y
- C Y
- B Y
- C Y
- B Y
- A Z
- B Y
- B Y
- A Z
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- B Y
- C Y
- B Y
- A X
- A X
- B Y
- B Y
- A Y
- C Z
- A Z
- A Z
- B Y
- A Z
- C Y
- B Y
- B Y
- B Y
- B Y
- C Y
- B Y
- A X
- B X
- B Y
- B Y
- B Y
- B Y
- B X
- C Y
- B Y
- B Y
- B X
- C Y
- A Y
- B Y
- B Y
- B Y
- A X
- B Z
- C X
- A X
- C Z
- B Y
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- B Y
- C Y
- B Z
- B Z
- B Y
- B Z
- B Y
- B Y
- C Z
- C Y
- B Y
- C Z
- C Z
- B Y
- C X
- A Y
- B Y
- B Z
- A Z
- B Y
- C X
- B Y
- B Y
- C Z
- A Z
- B Y
- B X
- B Y
- C Y
- B Y
- B Z
- B Y
- B Y
- C X
- C X
- C Z
- B Y
- B Y
- B Y
- A Z
- A X
- B Y
- A Z
- B Y
- B Y
- B Y
- B Z
- C X
- C Z
- B Y
- B Y
- B Y
- C Z
- B X
- C Z
- A X
- B Y
- C Y
- B Y
- A Z
- A X
- C X
- B X
- A Z
- C X
- B Y
- C Y
- B X
- A Z
- C Y
- C Y
- B Z
- C X
- B Y
- C X
- C Z
- C Y
- B Y
- C Z
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- B Y
- B Y
- B Y
- C X
- B Y
- B Y
- B Y
- A Z
- B Y
- B Y
- C Z
- B Y
- B Y
- B Y
- C X
- A Z
- B Z
- C Y
- C Y
- B Y
- A X
- C Y
- B Y
- C Z
- B Z
- B Y
- B Y
- C Y
- B Y
- B Y
- B Y
- C Z
- A X
- B Y
- C Y
- A X
- B Y
- B Y
- A X
- B Y
- A Y
- C X
- A Z
- A Z
- C Y
- B Y
- C Z
- C Y
- C Y
- C Z
- A Z
- A X
- C Z
- B Y
- C X
- A Z
- C X
- B Y
- B Y
- B Y
- C Z
- C Y
- C X
- C Y
- A Y
- C X
- A Z
- A Z
- B Z
- C X
- B Y
- B Y
- C X
- A Z
- C Z
- C Z
- B Y
- B Y
- A Y
- C X
- B Z
- B Y
- B Y
- C X
- C X
- C Z
- C Z
- B Y
- B Y
- B X
- B Y
- B Y
- C Z
- C Y
- C Z
- B Y
- B Y
- B Y
- C Y
- B X
- C X
- A Z
- C X
- C X
- C Y
- B Y
- B Y
- C Y
- B Z
- B Z
- C X
- C Y
- B Y
- B Z
- B Y
- B X
- A Z
- C X
- B Z
- A Z
- C X
- B Y
- C Y
- C Y
- B Y
- B Y
- B Y
- B X
- A X
- B Y
- A X
- A Z
- C Y
- B Y
- B Y
- B Y
- B Y
- B Y
- C Z
- B X
- B Y
- C X
- A Z
- B Y
- B Y
- A Z
- B Y
- C Y
- C Z
- C X
- C Y
- B Y
- B Y
- B Z
- B Y
- A X
- C Y
- B Y
- A X
- B Y
- C X
- A Z
- B Y
- C X
- A Z
- B Y
- C X
- C Y
- C X
- B Z
- C Z
- B Y
- C Y
- C X
- C Y
- B Z
- B X
- A X
- C Z
- B Y
- B Y
- C Y
- B Z
- C X
- C X
- B Y
- B Y
- C Y
- B X
- B Y
- C Y
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- A X
- A Z
- B Z
- B Z
- B Y
- A Z
- B Y
- C Y
- B Y
- C X
- B X
- B Y
- B Y
- B X
- C Z
- B Y
- C Z
- C X
- B Y
- C Z
- B Y
- C Y
- B Z
- C Y
- C Y
- C Z
- C Z
- A X
- B Y
- A Z
- B Y
- B X
- A X
- B Y
- B Y
- B Y
- C Y
- B Y
- B X
- B Z
- C Z
- B X
- B Z
- B Y
- C Y
- B Y
- B Z
- C X
- A Z
- B X
- B Z
- C X
- C Z
- B Y
- A Z
- C X
- C Y
- B Z
- B Y
- C Y
- B Y
- C Y
- B Y
- B Y
- B Y
- C Y
- B Y
- C Y
- C X
- C Z
- B Y
- B Y
- B X
- C Z
- B X
- A Z
- C Y
- A Z
- C X
- C Y
- B Y
- C Z
- B Z
- C Z
- C Y
- C X
- B Y
- C Z
- C X
- B Y
- B Y
- B Y
- B X
- B Y
- B Y
- C X
- A X
- B Z
- C X
- C Z
- B Y
- C Y
- B Z
- C Z
- B Y
- C X
- B Y
- B Y
- A Z
- C Z
- B Y
- C Z
- C X
- B Y
- B Y
- C X
- C X
- C Y
- B Y
- A X
- A Z
- B Y
- C X
- B Y
- B Y
- C Y
- B Y
- A Z
- A Z
- C X
- C Z
- C X
- C X
- A X
- B Y
- B Y
- C Y
- C Z
- C Y
- B Z
- C Y
- B Y
- B Y
- B Y
- C Y
- B Z
- B Y
- B Y
- B X
- C Y
- C Y
- B Y
- A X
- C X
- A X
- C Z
- C Y
- A Y
- B Y
- B Y
- B Z
- C X
- C X
- B Y
- A X
- B Y
- A Z
- B Y
- A Z
- C X
- C X
- B Y
- B Y
- B Y
- B Y
- A X
- B Y
- B Z
- C Y
- C X
- C Z
- C Z
- B Y
- C Z
- B Y
- B Y
- C X
- B Y
- A X
- A Z
- B Y
- A Z
- C X
- B Y
- C Y
- B Z
- C Z
- B Y
- B Y
- B Y
- B Y
- C Y
- C Z
- B X
- B Y
- A Y
- C Y
- B Z
- B Y
- C Y
- A Z
- B Y
- B Y
- C Y
- C Y
- A Y
- C Y
- A Z
- C Y
- B X
- B Y
- B Y
- C Y
- A Z
- C Y
- A Z
- B Y
- B Y
- B Y
- B Y
- A X
- C Y
- A Z
- B Y
- B Y
- B Y
- B Y
- B Z
- C Z
- C Y
- C X
- B Y
- C X
- B Y
- B Y
- B Y
- B Y
- A Z
- B Y
- C Y
- C Y
- A Z
- A X
- B Y
- C Y
- C Y
- B Y
- C Y
- C Y
- C Y
- C Z
- A Z
- C X
- C Y
- C X
- B Y
- B Y
- C X
- C Z
- C X
- C Z
- B X
- B Y
- C Z
- B Z
- A Z
- C Y
- B Z
- C Y
- B Y
- A X
- B Y
- A Z
- B Y
- A X
- B Y
- B X
- B Z
- B X
- B Y
- B Y
- B Y
- C X
- B Y
- B X
- C X
- B Y
- B Z
- B Y
- C Y
- B Y
- B Y
- C X
- A Z
- C X
- B Y
- C Y
- C Z
- B Y
- C Z
- B Y
- B Y
- B Y
- B Y
- C Z
- C X
- C Y
- C Z
- B X
- A Z
- A Z
- B Y
- B Z
- C Y
- A X
- B Y
- B Y
- A Z
- B Y
- B Y
- B Y
- B Y
- A Z
- C Z
- B Z
- C Y
- A Z
- C Y
- B Y
- B Y
- B Y
- B Z
- B Y
- C X
- C Z
- B X
- C X
- B Y
- C Z
- C X
- B Y
- A Z
- A Z
- B Y
- B Y
- B Y
- C X
- A Y
- B Y
- B Y
- A Z
- A Z
- C Z
- C Y
- B Y
- B Y
- A X
- B Z
- A X
- B Y
- A Z
- B Y
- C X
- B Y
- A Y
- B Y
- B Z
- B Y
- B Z
- B Y
- B Y
- C Y
- C Y
- B Y
- C X
- C Z
- B Y
- B Y
- B Y
- C Z
- A Z
- C X
- B Y
- B Z
- B Y
- C Y
- B Y
- C X
- B Y
- B Y
- C Y
- B Y
- B Y
- B Y
- B Y
- B Y
- B Y
- B X
- B Y
- B Y
- C X
- B Y
- B Z
- A Z
- A Z
- C X
- B X
- B X
- C Y
- C Z
- B Y
- C X
- A X
- B Y
- C X
- C Z
- C X
- B Y
- B Y
- C Y
- B Y
- B Y
- B Y
- A Z
- C Z
- C X
- B Y
- B Y
- A X
- B Y
- C Y
- B Y
- B Y
- C Y
- B X
- B X
- A X
- C Y
- C Z
- C Y
- B Y
- B Y
- C X
- A X
- A X
- C X
- B Y
- C X
- B Y
- B Y
- B Y
- C Y
- A Z
- B Z
- A Z
- B Y
- B X
- C Y
- B Z
- B Y
- A Z
- B Y
- C Y
- B Y
- C Y
- A X
- B Y
- B Y
- B Y
- C X
- A Z
- C Y
- B Y
- B Y
- B Y
- C X
- B Y
- C Y
- B Y
- B X
- C X
- B Y
- B Y
- C Y
- C X
- C Z
- C Z
- B Y
- B Y
- B Y
- B X
- C X
- B X
- A Y
- A Z
- C Y
- A X
- B Y
- B Y
- B Y
- A Z
- C Y
- C X
- C Y
- C Z
- A Z
- B Y
- B Y
- B Y
- B Y
- A Z
- B Y
- A Z
- B Y
- B Y
- C Y
- C Z
- C Y
- A Z
- C Y
- B Y
- C Y
- B X
- B Y
- A X
- C Z
- C Z
- A X
- C X
- C Z
- C X
- C X
- B Y
- A X
- A Z
- C Y
- B Y
- C X
- B Y
- B Y
- B X
- C Y
- C Z
- B Y
- B Z
- A Z
- C Y
- B Y
- A Z
- B Y
- C X
- C X
- B Z
- C Y
- B X
- B Y
- C Y
- B Z
- A Z
- C X
- C Y
- C X
- C Z
- B Z
- C Z
- B Y
- B X
- B Y
- B X
- B Y
- B Y
- B Y
- B Y
- C X
- C X
- C Y
- B Z
- C X
- B Y
- B Y
- B Z
- C Z
- C Y
- B Y
- B Y
- B Y
- C X
- B Z
- B Y
- B X
- B Y
- C Y
- C X
- C Z
- C X
- C Y
- B Y
- B Y
- B X
- B Y
- C X
- B X
- A X
- B Y
- C Y
- B Y
- A X
- C Y
- B Z
- B Z
- C X
- C Z
- C X
- B Y
- C Y
- C Y
- B Y
- C Z
- B Y
- C Y
- B Y
- C Y
- A Z
- B Z
- C X
- C X
- B Y
- B Y
- B Z
- B Y
- B Z
- A X
- C X
- C X
- B Y
- C X
- A Z
- C Y
- B Y
- A Z
- C Z
- B X
- C Y
- C X
- C X
- A Z
- B Y
- B Y
- C Z
- B Y
- A Y
- C Y
- B Y
- B X
- B Z
- C X
- B Y
- B X
- C Z
- B Y
- B X
- B Y
- B Y
- B Y
- A Z
- A Z
- B Z
- A Z
- C Y
- C Z
- B X
- C X
- A Z
- C X
- B Y
- B Y
- A X
- B X
- B Y
- B X
- B X
- A Y
- A Z
- C X
- B Z
- B Z
- C Y
- C Y
- B Y
- B Y
- B Y
- A Z
- A Z
- B Y
- B Y
- C Y
- C Y
- C Y
- C Z
- C X
- C Y
- B Y
- B X
- B Y
- A Y
- A X
- C Y
- B Y
- A Z
- B Y
- B Y
- C X
- C X
- B Y
- B Y
- C Y
- A Z
- B Y
- C Y
- C Z
- C Z
- C Y
- A Y
- B Y
- B Y
- C Y
- B X
- C Z
- C Z
- C Z
- B Y
- B Y
- B Y
- C Y
- A Z
- B Y
- A Z
- B Y
- A Z
- C X
- C Z
- C Y
- B Y
- A Z
- B Y
- B Y
- C Z
- B Y
- C X
- B Y
- C Y
- C Y
- B Y
- B Y
- A X
- C Z
- B Y
- C Y
- C X
- B Y
- B Y
- B Y
- B Z
- A Z
- B Y
- B Y
- B Y
- A Z
- B Y
- A X
- B Y
- B Y
- B Y
- C Y
- C X
- C Y
- A Z
- B Y
- C Y
- B Y
- C Y
- C Y
- C Y
- A X
- C Z
- B Y
- B Y
- C Z
- B Y
- B Y
- C Z
- B Z
- B Y
- C Y
- B Y
- B Y
- B Y
- B Y
- B X
- C X
- C Y
- B Y
- A Z
- B Y
- A X
- B Y
- B Y
- B Y
- B Y
- C Z
- C Z
- B Y
- A Z
- B Y
- C X
- C X
- C Y
- B X
- A X
- B X
- B Y
- C X
- C Z
- C Y
- C Y
- B Y
- C Z
- B Y
- B Y
- C Z
- A X
- B Y
- C Z
- B Z
- B Y
- C X
- C X
- B Y
- B Y
- B X
- C Z
- A Z
- A X
- B Y
- C X
- B Y
- B Y
- C Z
- B Z
- C Y
- B Y
- B X
- C X
- C Z
- B Z
- B Z
- C Y
- B Y
- A X
- B Y
- B Y
- C X
- B X
- A Z
- B Y
- A Z
- B Y
- B Y
- A Z
- C X
- C X
- B Y
- B X
- B Y
- A Z
- C Y
- C Z
- B Y
- B Y
- A X
- B Y
- C Y
- C Y
- B Y
- A X
- B Y
- B Y
- A Z
- C X
- C X
- C Y
- B Y
- A X
- B Y
- B Y
- C Y
- B Y
- B Y
- B Y
- B Z
- B Y
- C Y
- C Y
- B Y
- C X
- C X
- B Y
- C Y
- B Y
- C X
- B Y
- B Z
- B Y
- A Z
- A Z
- C X
- A Z
- A Z
- B Y
- B X
- C Z
- B Y
- B Y
- B Y
- B Y
- B Y
- C X
- C Y
- B Y
- A X
- C X
- C X
- C Y
- B Y
- C X
- C X
- C Z
- B Z
- C Y
- C X
- B Y
- B Y
- C X
- B X
- C Z
- B Y
- B Y
- C Y
- A Z
- C Y
- C X
- C Y
- B Y
- B Y
- C X
- C Y
- C Y
- C X
- B Z
- B Z
- B Y
- B Y
- C Y
- B Y
- C X
- A Z
- A X
- C Z
- B Y
- C Y
- C Y
- B Y
- B Y
- C Y
- B Y
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day3.cs b/Days/Day3.cs
deleted file mode 100644
index 6789900..0000000
--- a/Days/Day3.cs
+++ /dev/null
@@ -1,369 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day3 : Day
-{
- public override int Number => 3;
- public override string Name => "Rucksack Reorganization";
-
- public override void RunPart1(bool display = true)
- {
- long sum = 0;
-
- foreach (var line in Input.ReadAllLines())
- {
- var middle = line.Length / 2;
- var firstCompartment = line[..middle];
- var secondCompartment = line[middle..];
-
- var common = firstCompartment.Intersect(secondCompartment).First();
-
- sum += CharToPriority(common);
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- long sum = 0;
-
- foreach (var group in Input.ReadAllLines().Chunk(3))
- {
- var firstBag = group[0];
- var secondBag = group[1];
- var thirdBag = group[2];
-
- var common = firstBag.Intersect(secondBag).Intersect(thirdBag).First();
-
- sum += CharToPriority(common);
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
- }
- }
-
- private static int CharToPriority(char c)
- {
- if (char.IsLower(c))
- {
- return c - 'a' + 1;
- }
-
- return c - 'A' + 27;
- }
-
- #region Input
-
- public const string Input =
- """
- DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb
- rNJMNNbrHrtjHLHjvwtg
- fNbNzZdrZnMnMPnQShFPDmnqFm
- QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq
- mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp
- MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW
- gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL
- CdgpzdgpgnfThHfFRwhfRf
- SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ
- JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd
- tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw
- CTGGRftfSGtGTGDLbFchSgSWWWcM
- QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC
- SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn
- LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr
- jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ
- ZnJHRncHHgnrsrZffTdMdMBfmMvfvR
- NWWPnZrVHrZPCDDQtzDCPLCq
- jpFjvBZhDFHZdwcmslcslBLLNl
- dVtTVVCzzfrrMPNLLcnVcPLRns
- CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp
- JjJqMctnhtDZDQtf
- TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB
- HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv
- cMfFcMFcrqgJLFZdrTDdthPGsGmtGs
- WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld
- bWHBjWVzpbRzbmScqgZMFcqf
- RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb
- ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf
- QQpzFrHHQnzHvfTcNshcLRNFJhcR
- QrPQDrppBQmCmFQm
- TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC
- TVHTfzWsfftsZstnbvrbWbrbppPbrmmP
- BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV
- TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd
- jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw
- SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB
- PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf
- pnnhhvphGVpvRPnJlSFRNNJHZHSdSR
- hbmDDmwnnVGbhmjNrrWwLNLsWBrw
- dMrgvcQqdjlBLlfW
- HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ
- RwtvdPRvSlTQmHHBQBRL
- FjVSjrsFVnFQnTHmnT
- VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv
- fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ
- sWtGCWtpcqqpNnQjjzhVTTVQczhj
- tWBGntsCNlqrWswDRfFrbFrPDbPf
- dmzmjcbQjjQztFNqsqBcMJqNPF
- nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq
- wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz
- RWZdHvRdBRGbbvCjJnbn
- pqqpSwzpSSbCwPwjlwjl
- gDzzqSVzqrThpDBtRtCZdQRQLrQQ
- GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW
- LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD
- QznFnLZFvVvHRgsddG
- BBHBfBHFdSltmWJvqtNtHq
- TQDrrVMzVDnWnNZDJc
- gWzprTCrCMQzGGjjhwFwdffjfl
- LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm
- DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq
- gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF
- sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb
- nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq
- hFvvgFcFVzphpTrrwZDp
- qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ
- jWHPZWWjZsCmCWRDmQ
- PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV
- RnRsFFdSzmgwvQsqwc
- lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ
- GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj
- VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr
- ncnNbGMcPpvHFrssdBHM
- cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR
- pFWmSSFGQlvTbwWTwH
- jdBgNhRgMftNBhPbhHnZHlTTZcwZ
- lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG
- GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm
- pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr
- psSsBptpCBdjtcjNVcGG
- sssppsmchwspFLtvHhQJMtFb
- rRLDqRVLNSMvFSSV
- WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc
- MtPbwvzzVtzfsqGGVpdSjsLd
- DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj
- CFRFRFHgDRnRgMtfFvvwzwvwvzWv
- PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD
- trHSrdTtslWrSWmfzgmMnfBzmn
- JsrQsJHHlsVqTjjpbbNnQNNpGG
- sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW
- DMSfSbHLHbSDBBzLNvccWRcddvPjNj
- FSwHfTFdFsmJlnTTmV
- FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN
- jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ
- lRMpBlPmSFRTcvZv
- TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL
- jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL
- SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz
- BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR
- JtSsSzJssQJJWjRZzgLnDgqLPZgzbg
- dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp
- zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR
- VPVsZMNTLsMvPsmBJhllFpFBTJFQpl
- sZtsNsZtdZgjbwggjnbvqr
- QpTvrphmDvvddfcJJHTTncMlMG
- bRZZPRwjgzzlSSjGlnlSJS
- BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF
- FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg
- WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR
- JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP
- NfjFNNZPDQVJVWpCbQpJ
- lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS
- mBTRRmGccRtBwDbrGPbrMMrF
- VVQqlsGrVsMWBNFNMQHF
- TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd
- jzjDgZzjntGJZzCnhrrSlPVsJslpslPq
- dVhpjGPdjHhqHgtHJJ
- sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT
- nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd
- wqJCjqChmwMLmMmprNgG
- DNTtdsdWcHdNspGQggnrgLnQpc
- SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj
- VstwZCwslBZQDBjfDDBDfS
- rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD
- rPFLRLmFvvLvHvTCtqsVVwldGZGPGV
- SNZDJGfvwgMgfgmLmLcmBqgWgQWr
- hPnPTnVGsPRqLWpTmQqQ
- tsbnFhhjhSdGJNCjSf
- QSbGgBjfTCMWFNPFFtDghPrP
- JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF
- zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ
- gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv
- GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv
- sZGPgssMqHZpPptmCcpCrP
- CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp
- SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl
- tVgSvqVbnqDdgQzMQMGMmzthCw
- mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF
- WnhZsrJhTnWrgZdZgHNLcLtt
- hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ
- BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh
- fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ
- WbLnCZnvprpmZrGd
- gjMzTGBjWFBCCSSrBC
- bddJJndbdJfwPPthrrSSSsFSSg
- NJHbZbbvvWGgjWgT
- dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn
- CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm
- TCrTNSScPlplpHrQrQ
- lqrCvhWFvMGWgfHPgLfjfdgG
- zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf
- mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF
- mpfNshshflNthWfJCBBdmnQbQBZQdn
- VFVRccgGTqTrHTbWBFjJBCFFJCCQ
- PvTDHqHqPPGVqqhwfNlWlDhMltlh
- HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq
- TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts
- bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV
- sPJFDsSsVLgHjLHPbj
- vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL
- ChhCCCWTWnnmvmGtztStzScwrcVcFW
- NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt
- McpmWccMWHZPcLstbt
- MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg
- hsnnhhLljLPTmZwvdZdZjmmz
- RQNNDpNMSZwvsmqstN
- QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ
- TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR
- HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj
- VMJJdnMPrMGVrzvCZwZWCzCt
- CcQnBBCfBvRzDlsS
- PdbPPCbhGGpDSDlDDhvDJl
- HmHWPWdbHnCwCHCr
- JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw
- zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT
- bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ
- QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf
- SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj
- WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt
- tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC
- FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr
- SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl
- sjzPjLphMSrlppSp
- fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm
- MVcFGTFtqjsJLjjtCd
- jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg
- LSLBMBWsbBBCgfdrFd
- ShbbzdzQRNNNVhDN
- JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh
- ZPfQPjZZrffQZszhzTnVGBvntsNz
- rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc
- cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP
- bQwsMTswwVjdZMVRJM
- vGWCTDCTQvvtlvQQ
- mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB
- VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB
- FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp
- rWWppSStfRBLfHPdHHDzlldZ
- QrTnQmmVCqvrvJvzJZPHvzHsDs
- qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW
- SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg
- ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL
- rpJJdHZJdZHQSRJbSfVhww
- jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb
- VmrqszVmgCWWggbPGclPlZbcZCbf
- JdrTmVTVsqsRJHvQnnhwhBLH
- vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf
- tJDGbZHbjRHNrrBj
- DnMnzGJJwtzVSzzBzTBSTF
- hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq
- HjjzcRTnpGVSGGFWHH
- pssmjctLzpsRRnhlQbPfPrgDbZls
- FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv
- pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz
- njtpHZnLLQGhTtTWSSSh
- NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf
- mqRqLFZRVFbtgBSCbGWWHp
- LZZRmQhVLLFzZdTQPndPNTTnQW
- CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG
- DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt
- TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr
- ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD
- LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr
- WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT
- tGWqthqGVdzBWwdd
- BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg
- JnNmrHHNrCGBPPnGGc
- wvFvZBmppBdSLcvshcLrgl
- bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL
- TqHHjQnbHTbbmZBBcFMpmBwn
- ZFCqSlCPdCRTLWWTQQLLQS
- GjggHcvsggHVTVBLnlcpBQ
- hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf
- cgRwVfVzrgqqwZctTztFMFMTCdPmmF
- bWJsSJHpTDRDTWMC
- sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr
- ttgVBtMbttngmHJVpzlzZlppzw
- cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT
- sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd
- gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB
- RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq
- NFMRRpHPgzszGppG
- WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt
- ppDMpdMfSfSSNtlwqbqwwq
- dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ
- jrqRqfNNhrVvcTVdpTscpd
- tGWBlLggWGddTspZZd
- JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH
- GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF
- nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj
- SQQHSttRqggmlVsNcvWdRvbWPN
- WLNLCWLsSJgHFrSHrM
- gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR
- dmmzzqZdDqqTLLwjgZgNljws
- TCqsDHssmDsDGVGlVcMccGDV
- FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN
- PpbLLmpgbRzqpCHwChQqwh
- lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ
- ScCLzdCZdbLSbFdFqvDDdGMQGQ
- bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV
- GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ
- STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR
- DzSvzstnszMnjQcqggjPqQBcqq
- BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp
- mnrJVmRhhvJVcHtsGHMCnZCPZM
- bvSmVbRhbgmmSJflzNLrzqzfWfqBWr
- qsZLqqFNhfrGnJFv
- DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM
- lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL
- ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj
- qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt
- vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV
- PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW
- hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc
- dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP
- pcphpdrWDmTgHWMtRWqHRVVH
- SbGcGGQnvNQGvsjBtVHBLjvqVPVB
- lzbQCzbZllSzQslpCJpJJDggcggfDT
- ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq
- QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc
- ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC
- NBnrNHQHBscvhfBM
- bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS
- WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr
- lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd
- pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd
- mDTZvTqtDDHttRPcqhQlwgGlghbqBh
- DTspTqssqTbdmCMwVmnmlfCD
- PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll
- RFztFjjqjQFQTbdTbQ
- hTFSVSdhMMVMFjjgbthcbzczcg
- DvwCJVJWWJDRnfmbDmccfmmgfb
- QrJvPGWWnpVMqdZsZpqM
- gRLcHbgnfpgpJjlqqp
- SFwrTHFBqlZtBPZq
- HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL
- PpMgDMDnsWSnjBQnrjbn
- LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR
- FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day4.cs b/Days/Day4.cs
deleted file mode 100644
index 5c891f1..0000000
--- a/Days/Day4.cs
+++ /dev/null
@@ -1,1073 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day4 : Day
-{
- public override int Number => 4;
- public override string Name => "Camp Cleanup";
- public override void RunPart1(bool display = true)
- {
- int overlaps = 0;
- foreach (var line in Input.ReadAllLines())
- {
- var sections = line.Split(',')
- .Select(p => p.Split('-'))
- .Select(p => new { Start = int.Parse(p[0]), End = int.Parse(p[1]) })
- .ToArray();
-
- var firstSection = sections[0];
- var secondSection = sections[1];
-
- // Check if first section contains second section
- if (firstSection.Start <= secondSection.Start && firstSection.End >= secondSection.End)
- {
- overlaps++;
- }
- // Check if second section contains first section
- else if (secondSection.Start <= firstSection.Start && secondSection.End >= firstSection.End)
- {
- overlaps++;
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- int overlaps = 0;
- foreach (var line in Input.ReadAllLines())
- {
- var sections = line.Split(',')
- .Select(p => p.Split('-'))
- .Select(p => new { Start = int.Parse(p[0]), End = int.Parse(p[1]) })
- .ToArray();
-
- var firstSection = sections[0];
- var secondSection = sections[1];
-
- // Check if first section overlaps second
- if (firstSection.Start <= secondSection.End && firstSection.End >= secondSection.Start)
- {
- overlaps++;
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Overlapping sections: [yellow]{overlaps}[/][/]");
- }
- }
-
- #region Input
-
- public const string Input =
- """
- 8-18,10-19
- 12-69,8-15
- 62-77,36-50
- 26-27,26-91
- 16-23,24-63
- 17-43,18-44
- 29-68,29-70
- 15-90,28-91
- 8-39,10-40
- 47-64,27-63
- 8-77,78-95
- 3-65,66-71
- 20-22,21-98
- 52-53,53-98
- 29-30,29-44
- 86-90,38-87
- 33-99,31-31
- 62-80,82-90
- 45-55,33-54
- 57-62,58-63
- 8-59,8-98
- 7-23,1-22
- 12-36,22-37
- 1-31,32-80
- 94-96,46-95
- 5-90,4-40
- 5-5,6-52
- 74-86,7-87
- 1-4,6-38
- 49-65,49-64
- 21-21,22-99
- 48-61,11-88
- 46-51,46-50
- 13-87,88-88
- 5-6,6-99
- 9-40,52-96
- 4-93,5-92
- 78-88,77-86
- 39-72,71-73
- 31-90,19-91
- 52-53,53-94
- 2-4,3-62
- 92-95,46-91
- 41-42,41-94
- 96-98,8-97
- 9-75,9-74
- 75-85,67-76
- 27-32,29-32
- 69-93,70-94
- 17-80,18-80
- 68-68,12-69
- 36-80,35-60
- 41-86,41-42
- 18-82,83-83
- 48-97,90-92
- 1-57,16-58
- 39-89,39-88
- 17-17,16-53
- 98-99,8-97
- 24-71,9-48
- 37-38,37-52
- 9-80,10-80
- 1-18,19-57
- 55-67,58-73
- 82-84,85-85
- 23-92,22-87
- 9-97,92-96
- 11-93,94-98
- 16-93,17-17
- 81-97,63-80
- 67-92,67-92
- 63-67,62-64
- 15-66,67-81
- 13-20,13-13
- 83-83,4-82
- 10-54,6-6
- 13-69,8-11
- 18-19,18-94
- 9-46,8-19
- 31-97,62-96
- 35-94,95-95
- 21-56,57-57
- 3-44,3-39
- 24-95,79-89
- 33-59,34-34
- 23-25,21-26
- 71-97,38-98
- 37-76,38-77
- 77-86,64-87
- 2-12,1-70
- 34-96,15-97
- 16-75,74-76
- 4-99,4-99
- 12-89,11-12
- 6-24,5-7
- 10-43,11-88
- 11-44,45-83
- 24-95,2-96
- 10-73,2-11
- 3-82,16-31
- 20-21,20-30
- 22-87,86-89
- 44-44,43-47
- 56-84,56-57
- 8-80,9-86
- 1-50,5-51
- 9-30,8-9
- 50-87,27-70
- 37-96,96-96
- 9-79,46-81
- 3-98,3-97
- 65-83,27-38
- 51-56,1-56
- 7-97,8-97
- 33-91,32-90
- 38-86,87-87
- 8-91,4-92
- 8-89,25-88
- 88-99,48-98
- 70-80,24-69
- 28-55,43-50
- 46-70,7-47
- 66-94,67-93
- 18-43,93-99
- 29-61,29-49
- 19-71,18-71
- 21-36,21-36
- 61-63,62-81
- 4-5,5-95
- 90-93,63-89
- 1-23,4-22
- 66-83,50-82
- 63-92,81-98
- 29-99,29-99
- 4-8,8-99
- 30-47,31-36
- 3-94,93-99
- 52-52,51-87
- 76-76,77-80
- 2-95,6-96
- 8-97,9-48
- 12-79,11-78
- 25-95,14-94
- 76-96,3-33
- 1-96,76-99
- 3-3,2-90
- 76-91,75-76
- 12-83,11-11
- 3-33,19-48
- 12-98,12-13
- 15-94,16-98
- 1-2,4-90
- 25-59,26-50
- 27-85,84-85
- 22-75,22-22
- 30-39,30-38
- 4-95,4-95
- 24-49,10-48
- 33-34,34-79
- 3-62,33-61
- 4-17,3-5
- 27-58,59-59
- 72-98,73-98
- 28-86,87-95
- 27-57,28-56
- 49-98,40-92
- 30-85,84-92
- 76-78,75-75
- 33-84,83-83
- 56-64,42-63
- 69-90,27-90
- 67-70,66-67
- 52-66,56-79
- 3-81,2-82
- 9-92,93-96
- 42-93,94-94
- 20-32,33-96
- 41-42,42-94
- 7-37,6-17
- 17-44,18-28
- 79-83,66-78
- 2-29,1-86
- 25-29,20-29
- 38-77,38-38
- 59-59,59-99
- 71-96,11-96
- 48-96,17-85
- 71-75,67-75
- 75-82,76-81
- 8-58,8-58
- 45-91,35-46
- 10-14,15-80
- 87-88,3-99
- 1-3,7-57
- 24-37,24-38
- 10-74,75-81
- 5-92,5-5
- 73-96,96-97
- 22-84,84-85
- 91-91,3-90
- 18-20,19-20
- 4-4,3-91
- 29-30,30-65
- 57-64,22-50
- 25-88,24-68
- 30-94,94-96
- 15-42,16-90
- 17-96,71-87
- 36-89,35-37
- 18-71,70-70
- 13-36,12-94
- 47-96,46-48
- 2-94,55-95
- 82-82,3-82
- 3-84,1-48
- 34-85,34-85
- 9-95,8-95
- 1-28,1-29
- 98-98,52-85
- 55-56,30-55
- 20-59,19-89
- 55-56,50-57
- 96-96,20-95
- 44-50,15-67
- 73-74,56-75
- 54-98,38-55
- 54-93,54-86
- 6-94,7-95
- 23-24,23-34
- 52-83,9-80
- 2-95,1-13
- 52-90,29-91
- 66-89,66-66
- 10-10,11-94
- 65-73,64-97
- 8-93,62-92
- 71-72,72-85
- 2-58,59-59
- 46-46,47-61
- 8-8,8-84
- 6-75,76-76
- 47-97,24-48
- 19-19,20-71
- 13-94,4-87
- 47-78,48-78
- 20-74,21-35
- 11-46,11-46
- 11-78,77-79
- 13-74,14-73
- 2-98,1-97
- 30-30,31-35
- 1-14,2-99
- 11-93,10-11
- 3-77,7-78
- 41-56,40-55
- 26-92,97-97
- 96-98,17-83
- 95-99,8-94
- 62-92,47-61
- 4-93,3-61
- 3-86,2-16
- 80-99,21-96
- 6-90,47-91
- 6-6,7-91
- 13-91,13-13
- 53-91,52-94
- 1-86,4-86
- 53-90,54-90
- 7-62,7-62
- 11-89,11-90
- 17-18,18-92
- 14-35,11-34
- 6-99,19-98
- 35-59,34-59
- 65-82,68-83
- 2-95,3-38
- 2-92,3-92
- 51-52,43-52
- 9-41,9-49
- 8-97,8-31
- 20-67,66-97
- 4-87,37-86
- 20-21,20-89
- 16-87,15-88
- 59-68,60-68
- 46-83,86-90
- 15-55,9-16
- 3-8,7-79
- 96-98,41-92
- 16-75,62-82
- 79-99,62-78
- 1-96,97-97
- 46-60,45-45
- 68-68,41-67
- 22-87,21-86
- 80-81,80-84
- 1-30,31-50
- 49-91,49-90
- 8-74,73-78
- 32-32,31-40
- 3-89,4-89
- 50-61,51-61
- 36-81,35-37
- 4-97,4-98
- 39-87,38-87
- 8-98,98-99
- 4-96,95-97
- 1-53,3-87
- 19-20,19-90
- 13-78,12-79
- 1-2,2-75
- 2-42,2-90
- 3-16,3-23
- 32-72,87-98
- 57-88,60-88
- 15-28,29-29
- 3-4,4-99
- 48-48,46-50
- 91-94,87-95
- 16-97,98-99
- 38-38,48-94
- 30-63,7-62
- 7-98,8-8
- 4-50,49-50
- 17-49,18-18
- 7-75,6-6
- 70-88,73-87
- 3-45,3-44
- 87-94,36-48
- 66-73,13-65
- 34-75,8-73
- 2-53,2-82
- 1-85,71-86
- 2-7,6-88
- 2-4,4-93
- 20-20,13-19
- 38-71,26-71
- 14-88,20-88
- 57-81,56-82
- 13-85,6-56
- 34-74,34-34
- 64-64,25-63
- 34-35,34-35
- 18-29,13-29
- 39-40,15-41
- 44-71,43-70
- 39-75,37-37
- 18-78,18-90
- 49-50,49-94
- 17-96,1-16
- 45-56,48-55
- 48-79,48-80
- 6-93,5-93
- 12-34,11-99
- 19-22,18-19
- 3-76,2-65
- 8-99,94-97
- 37-42,37-42
- 20-88,17-92
- 15-49,15-45
- 11-35,11-34
- 7-98,3-8
- 61-92,4-58
- 6-99,42-95
- 5-86,45-87
- 67-77,67-77
- 80-99,38-98
- 58-99,22-89
- 26-88,26-88
- 29-89,8-28
- 47-96,40-96
- 57-95,34-83
- 9-99,98-99
- 19-73,18-73
- 5-5,5-82
- 46-46,25-45
- 17-18,17-50
- 56-61,56-62
- 1-71,71-71
- 25-39,24-25
- 9-55,54-54
- 6-96,95-95
- 22-85,21-80
- 6-86,4-6
- 15-81,78-81
- 4-96,5-95
- 56-65,56-56
- 43-96,42-43
- 18-79,80-95
- 54-80,21-79
- 32-32,31-92
- 75-75,76-95
- 30-96,29-69
- 55-56,55-97
- 14-96,13-95
- 25-99,27-99
- 40-96,41-96
- 20-20,19-71
- 10-44,11-44
- 53-53,51-58
- 9-82,10-10
- 48-79,47-79
- 28-88,9-60
- 94-95,46-95
- 66-98,8-97
- 34-91,33-91
- 36-92,11-88
- 20-59,49-86
- 3-86,4-76
- 25-73,36-72
- 19-19,18-93
- 7-88,4-5
- 77-91,90-90
- 45-86,45-45
- 8-31,30-40
- 35-43,44-61
- 44-45,44-74
- 40-96,56-59
- 56-71,57-80
- 42-75,41-77
- 18-18,19-22
- 25-25,26-26
- 19-20,20-68
- 72-98,64-73
- 24-76,73-77
- 39-83,38-39
- 87-94,84-88
- 3-98,1-2
- 43-63,44-62
- 52-54,53-57
- 16-29,53-76
- 4-63,79-86
- 30-86,75-96
- 42-42,36-41
- 6-6,5-67
- 3-4,6-80
- 20-32,38-74
- 28-53,28-29
- 24-91,95-99
- 78-85,79-79
- 30-69,14-69
- 15-83,11-84
- 2-89,1-3
- 93-98,72-80
- 3-65,2-65
- 26-79,25-78
- 57-91,57-58
- 19-19,18-19
- 18-96,17-19
- 41-71,1-72
- 13-41,10-21
- 18-24,20-24
- 83-83,84-95
- 57-89,52-94
- 1-97,1-97
- 28-92,27-27
- 6-73,18-71
- 5-99,4-23
- 39-76,96-99
- 29-57,29-58
- 85-85,15-86
- 90-93,90-96
- 41-78,42-78
- 23-97,24-96
- 27-84,26-84
- 4-69,78-84
- 59-88,59-89
- 8-75,8-90
- 56-56,50-56
- 32-72,54-71
- 64-92,63-89
- 40-66,66-66
- 4-41,14-40
- 98-99,3-99
- 2-3,10-65
- 65-81,42-64
- 15-77,71-75
- 33-59,24-32
- 50-76,31-49
- 31-50,30-51
- 36-89,12-88
- 38-87,37-88
- 64-89,64-88
- 13-89,7-13
- 44-77,43-78
- 67-83,3-53
- 7-46,7-8
- 1-52,28-53
- 7-7,8-75
- 54-66,53-53
- 73-73,35-74
- 80-84,80-82
- 1-99,2-99
- 22-97,52-96
- 75-78,62-87
- 45-98,23-82
- 61-66,61-69
- 6-7,7-99
- 69-75,75-76
- 1-76,3-77
- 2-99,3-11
- 77-99,77-83
- 5-42,25-76
- 60-89,35-88
- 7-98,5-97
- 77-86,67-85
- 85-96,23-47
- 16-23,15-20
- 26-91,26-90
- 12-15,12-29
- 45-95,32-48
- 38-42,37-42
- 6-95,2-7
- 3-90,4-90
- 78-86,86-86
- 7-88,7-79
- 2-94,3-94
- 34-99,8-97
- 2-3,2-53
- 33-65,34-34
- 9-9,10-10
- 27-29,28-65
- 8-95,94-96
- 44-46,45-74
- 17-82,63-82
- 17-73,74-74
- 2-3,1-3
- 24-25,25-72
- 95-95,10-95
- 13-21,13-18
- 96-96,94-97
- 64-91,65-92
- 11-13,1-12
- 19-74,99-99
- 97-97,5-96
- 49-80,50-80
- 20-68,21-87
- 14-91,13-13
- 8-94,1-5
- 64-91,61-63
- 1-2,2-89
- 39-80,38-73
- 31-56,15-75
- 90-90,90-97
- 11-11,15-43
- 28-81,52-81
- 29-99,29-99
- 31-36,32-92
- 1-99,28-99
- 6-10,6-21
- 64-90,54-89
- 88-95,2-93
- 87-88,47-88
- 92-92,79-91
- 11-91,3-96
- 18-19,18-65
- 12-79,1-78
- 39-66,65-65
- 53-54,54-62
- 23-57,23-78
- 16-94,17-93
- 17-98,99-99
- 32-34,33-96
- 68-72,73-73
- 1-2,1-95
- 8-93,9-92
- 56-61,57-61
- 3-94,3-94
- 2-4,6-74
- 2-94,94-94
- 5-75,3-5
- 88-90,64-92
- 70-97,63-97
- 5-99,4-99
- 91-97,3-96
- 5-46,2-2
- 2-2,5-91
- 23-60,23-60
- 9-39,10-39
- 9-25,10-54
- 4-47,3-47
- 43-52,49-69
- 27-27,27-27
- 6-94,5-94
- 8-9,8-68
- 53-78,52-53
- 16-73,15-73
- 65-77,5-76
- 60-96,60-92
- 49-55,39-56
- 33-59,15-60
- 6-79,6-94
- 3-3,4-99
- 17-88,18-59
- 98-99,97-97
- 5-36,35-97
- 97-98,31-35
- 23-23,22-76
- 8-94,9-93
- 38-38,37-86
- 1-24,4-47
- 7-97,8-98
- 22-70,71-71
- 2-49,3-3
- 70-86,76-98
- 91-98,46-97
- 37-65,61-69
- 39-39,25-38
- 1-76,1-2
- 71-87,89-98
- 46-47,38-42
- 12-13,20-95
- 4-58,13-59
- 48-80,45-99
- 91-93,33-90
- 6-57,6-6
- 16-19,15-18
- 70-72,1-73
- 3-82,3-83
- 76-89,76-89
- 57-96,58-95
- 35-64,36-65
- 2-92,93-93
- 95-98,10-83
- 3-5,17-63
- 37-69,36-63
- 5-49,37-49
- 75-82,20-74
- 2-65,1-3
- 4-5,4-31
- 72-73,71-74
- 4-75,74-95
- 30-31,30-99
- 36-60,36-59
- 4-6,13-95
- 8-54,5-6
- 57-94,58-97
- 5-6,6-99
- 88-88,70-87
- 16-17,17-56
- 3-94,2-94
- 24-58,23-25
- 22-48,23-91
- 18-59,19-92
- 9-10,8-88
- 33-82,6-66
- 42-61,42-85
- 2-3,4-58
- 13-15,12-20
- 31-94,31-31
- 63-93,31-93
- 4-76,17-76
- 45-76,45-60
- 13-89,9-88
- 75-77,51-76
- 26-26,26-92
- 1-27,21-69
- 4-89,1-94
- 32-95,36-94
- 38-83,89-89
- 15-16,16-80
- 73-84,98-98
- 28-75,27-28
- 25-27,9-26
- 16-98,17-99
- 10-72,91-92
- 40-91,51-92
- 29-29,7-30
- 30-45,22-46
- 13-95,4-4
- 43-59,29-59
- 12-41,40-55
- 4-92,91-98
- 25-25,24-35
- 8-16,7-13
- 9-99,9-98
- 28-87,27-28
- 14-53,13-54
- 67-81,6-42
- 29-99,30-95
- 5-37,5-6
- 95-95,10-94
- 12-95,13-96
- 16-21,17-17
- 17-25,18-48
- 81-81,27-80
- 78-84,77-91
- 24-33,23-32
- 1-99,1-98
- 16-83,17-83
- 85-91,86-86
- 59-88,89-99
- 40-99,98-98
- 42-90,23-42
- 20-64,55-65
- 9-89,90-90
- 99-99,8-97
- 92-95,4-88
- 32-81,10-82
- 4-4,4-63
- 1-10,4-93
- 58-59,8-59
- 51-54,51-69
- 10-82,4-9
- 82-96,69-76
- 63-81,62-82
- 72-73,70-74
- 69-88,69-88
- 31-73,3-98
- 39-57,46-54
- 29-29,30-57
- 94-99,10-95
- 4-96,3-4
- 11-96,12-96
- 59-61,58-58
- 58-58,58-68
- 2-95,2-38
- 9-13,10-31
- 7-54,53-91
- 16-33,36-75
- 53-77,53-76
- 33-34,33-90
- 6-61,69-94
- 5-81,5-82
- 2-93,92-93
- 1-29,8-97
- 5-5,5-89
- 42-80,41-80
- 2-96,33-99
- 17-57,17-56
- 11-74,11-75
- 39-60,39-40
- 33-34,33-56
- 36-75,35-37
- 68-77,68-77
- 22-95,21-96
- 61-62,58-61
- 33-92,64-98
- 5-95,5-96
- 10-75,11-40
- 5-70,6-70
- 10-86,9-10
- 5-93,5-6
- 70-98,21-95
- 76-99,46-75
- 20-21,21-54
- 24-47,65-98
- 32-62,32-44
- 46-92,45-73
- 52-59,51-57
- 2-92,3-3
- 46-56,47-57
- 90-90,24-89
- 23-69,75-89
- 6-73,73-77
- 16-17,17-80
- 89-89,26-88
- 36-56,38-83
- 55-70,13-54
- 14-50,77-89
- 22-27,34-81
- 69-77,73-76
- 4-83,5-5
- 13-54,13-55
- 61-61,60-98
- 98-98,23-97
- 21-44,20-44
- 62-75,32-71
- 51-93,49-80
- 53-64,43-65
- 52-91,52-67
- 5-89,2-88
- 4-86,3-98
- 32-72,32-64
- 52-78,79-86
- 28-94,21-50
- 43-61,46-59
- 75-76,75-83
- 12-43,11-12
- 72-73,1-58
- 8-94,7-8
- 5-92,4-93
- 54-62,41-62
- 43-43,43-75
- 34-81,38-82
- 9-99,10-98
- 15-89,91-91
- 12-59,13-60
- 21-76,21-76
- 25-63,24-62
- 17-82,92-95
- 22-49,33-49
- 8-34,4-9
- 21-43,22-40
- 4-99,1-3
- 7-41,41-68
- 3-74,74-75
- 6-80,1-5
- 35-85,36-70
- 7-99,12-17
- 8-95,7-94
- 12-80,12-80
- 3-96,4-97
- 22-69,69-70
- 24-35,25-51
- 22-51,23-51
- 36-63,10-37
- 1-99,34-98
- 23-89,37-88
- 73-73,72-76
- 35-91,35-36
- 6-24,3-12
- 6-6,7-91
- 28-52,55-77
- 51-78,50-77
- 2-3,3-96
- 30-97,30-98
- 32-70,9-70
- 95-96,1-94
- 20-99,20-21
- 68-79,6-68
- 17-64,39-51
- 21-58,56-57
- 14-25,13-14
- 16-96,97-99
- 98-99,70-97
- 1-35,10-66
- 12-56,9-13
- 47-84,19-63
- 73-89,72-90
- 52-95,12-95
- 3-95,1-3
- 78-92,93-93
- 99-99,4-97
- 46-86,29-45
- 79-95,78-96
- 87-92,93-95
- 22-81,22-80
- 32-33,33-71
- 53-99,53-83
- 21-98,20-97
- 93-94,6-93
- 78-96,10-77
- 1-91,56-69
- 60-98,51-60
- 20-20,21-32
- 95-96,96-96
- 4-26,5-27
- 85-92,42-84
- 86-86,72-85
- 20-25,24-30
- 11-28,12-70
- 23-70,8-8
- 7-7,7-74
- 48-93,49-92
- 4-72,71-72
- 15-28,14-32
- 25-73,47-74
- 67-77,67-68
- 10-84,66-84
- 7-96,7-96
- 2-29,29-38
- 52-52,52-97
- 72-73,72-95
- 20-50,51-51
- 1-86,46-87
- 13-36,14-20
- 60-98,53-98
- 6-40,7-41
- 62-76,41-75
- 8-38,37-51
- 14-90,13-91
- 1-54,18-53
- 19-94,94-96
- 77-95,76-85
- 3-98,2-3
- 24-93,48-92
- 10-98,97-99
- 1-5,3-4
- 15-15,16-86
- 26-93,23-79
- 8-48,9-9
- 38-98,32-55
- 30-60,31-48
- 15-69,16-70
- 9-79,9-10
- 53-90,52-72
- 9-28,27-97
- 3-91,2-3
- 10-42,42-50
- 2-79,8-79
- 4-44,73-94
- 4-89,1-88
- 51-53,52-92
- 22-36,35-81
- 72-96,71-96
- 69-69,70-89
- 20-97,19-20
- 33-99,34-34
- 31-33,32-94
- 7-22,23-80
- 2-4,3-41
- 73-79,24-80
- 95-97,99-99
- 6-21,2-7
- 3-94,4-95
- 7-87,86-86
- 9-80,8-80
- 4-20,3-7
- 54-89,54-88
- 22-90,32-90
- 91-98,61-91
- 18-69,32-52
- 7-17,8-66
- 35-58,12-57
- 4-87,85-86
- 2-99,94-99
- 33-95,32-33
- 42-42,2-41
- 28-43,28-29
- 23-72,23-71
- 6-92,6-91
- 32-56,33-97
- 83-96,83-86
- 32-67,33-33
- 26-40,26-39
- 11-96,10-11
- 7-89,6-90
- 12-46,19-47
- 39-95,40-99
- 89-89,79-88
- 19-71,6-18
- 47-93,46-94
- 39-77,28-32
- 7-70,8-69
- 72-73,73-94
- 51-63,48-61
- 7-88,29-87
- 67-85,35-86
- 1-82,17-83
- 68-86,87-87
- 42-43,43-44
- 46-72,68-73
- 35-37,23-78
- 1-39,35-40
- 12-96,13-33
- 21-94,20-93
- 36-53,8-99
- 35-83,28-36
- 99-99,35-89
- 16-40,15-25
- 28-39,39-40
- 56-88,55-75
- 5-86,87-94
- 67-70,46-69
- 25-67,66-68
- 73-73,13-72
- 30-41,66-81
- 32-90,31-91
- 9-33,4-7
- 25-48,12-59
- 21-96,16-22
- 5-35,29-41
- 50-50,44-76
- 19-86,18-87
- 9-49,9-47
- 7-70,9-95
- 23-93,94-97
- 24-72,38-71
- 7-83,4-8
- 72-90,42-73
- 7-93,92-92
- 91-91,7-92
- 72-73,71-72
- 4-96,1-1
- 7-76,76-90
- 29-92,27-30
- 1-97,2-99
- 29-72,59-73
- 6-18,1-4
- 74-93,74-74
- 12-97,11-66
- 23-27,10-25
- 64-95,63-64
- 34-41,42-47
- 24-71,70-72
- 23-37,24-38
- 22-95,94-99
- 40-63,48-64
- 35-65,36-66
- 14-15,14-41
- 1-71,1-47
- 5-28,14-29
- 92-92,90-91
- 34-35,34-42
- 58-61,54-60
- 60-73,61-94
- 11-15,14-49
- 3-8,13-98
- 3-50,4-49
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day5.cs b/Days/Day5.cs
deleted file mode 100644
index 335a010..0000000
--- a/Days/Day5.cs
+++ /dev/null
@@ -1,596 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day5 : Day
-{
- public override int Number => 5;
- public override string Name => "Supply Stacks";
-
- private IDictionary>? _stacks;
-
- public override void RunPart1(bool display = true)
- {
- _stacks = InitStacks();
-
- foreach (var line in Input.ReadAllLines())
- {
- var split = line.Split(' ');
- var moveCount = int.Parse(split[1]);
- var fromStack = _stacks[int.Parse(split[3])];
- var toStack = _stacks[int.Parse(split[5])];
-
- for (int i = 0; i < moveCount; i++)
- {
- toStack.Push(fromStack.Pop());
- }
- }
-
- if (display)
- {
- for (int i = 1; i <= 9; i++)
- {
- AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
- }
- AnsiConsole.WriteLine();
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- _stacks = InitStacks();
-
- foreach (var line in Input.ReadAllLines())
- {
- var split = line.Split(' ');
- var moveCount = int.Parse(split[1]);
- var fromStack = _stacks[int.Parse(split[3])];
- var toStack = _stacks[int.Parse(split[5])];
-
- // Push items in reverse order and remove them from the other stack
- var items = fromStack.Take(moveCount).Reverse().ToArray();
- foreach (var item in items)
- {
- toStack.Push(item);
- fromStack.Pop();
- }
- }
-
- if (display)
- {
- for (int i = 1; i <= 9; i++)
- {
- AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
- }
- AnsiConsole.WriteLine();
- }
- }
-
- #region Input
-
- private static IDictionary> InitStacks()
- {
- var stacks = new Dictionary>
- {
- [1] = new("SLFZDBRH".Reverse()),
- [2] = new("RZMBT".Reverse()),
- [3] = new("SNHCLZ".Reverse()),
- [4] = new("JFCS".Reverse()),
- [5] = new("BZRWHGP".Reverse()),
- [6] = new("TMNDGZJV".Reverse()),
- [7] = new("QPSFWNLG".Reverse()),
- [8] = new("RZM".Reverse()),
- [9] = new("TRVGLCM".Reverse())
- };
-
- return stacks;
- }
-
- public const string Input =
- """
- move 6 from 1 to 7
- move 2 from 2 to 4
- move 2 from 7 to 4
- move 6 from 4 to 3
- move 1 from 5 to 1
- move 3 from 8 to 3
- move 15 from 3 to 4
- move 6 from 5 to 9
- move 14 from 4 to 2
- move 3 from 2 to 7
- move 1 from 2 to 7
- move 9 from 9 to 1
- move 3 from 2 to 1
- move 7 from 6 to 7
- move 1 from 6 to 8
- move 2 from 9 to 1
- move 9 from 2 to 3
- move 8 from 3 to 9
- move 1 from 1 to 4
- move 1 from 8 to 6
- move 1 from 6 to 2
- move 5 from 9 to 8
- move 2 from 9 to 1
- move 1 from 4 to 2
- move 17 from 1 to 9
- move 1 from 3 to 1
- move 3 from 2 to 3
- move 2 from 4 to 5
- move 12 from 7 to 3
- move 16 from 9 to 2
- move 5 from 7 to 5
- move 2 from 1 to 2
- move 1 from 3 to 6
- move 1 from 4 to 6
- move 1 from 7 to 3
- move 1 from 6 to 3
- move 7 from 3 to 4
- move 5 from 8 to 3
- move 1 from 6 to 7
- move 7 from 3 to 4
- move 6 from 3 to 1
- move 2 from 4 to 8
- move 1 from 5 to 2
- move 10 from 4 to 5
- move 3 from 5 to 2
- move 2 from 8 to 9
- move 5 from 2 to 8
- move 1 from 3 to 5
- move 2 from 5 to 8
- move 12 from 5 to 7
- move 1 from 4 to 2
- move 5 from 9 to 4
- move 1 from 2 to 5
- move 6 from 1 to 3
- move 6 from 3 to 5
- move 10 from 7 to 4
- move 2 from 7 to 3
- move 4 from 7 to 6
- move 1 from 9 to 5
- move 12 from 2 to 1
- move 1 from 8 to 7
- move 3 from 7 to 4
- move 4 from 4 to 8
- move 7 from 5 to 3
- move 1 from 2 to 4
- move 10 from 1 to 5
- move 2 from 1 to 2
- move 4 from 6 to 7
- move 8 from 8 to 3
- move 5 from 4 to 9
- move 12 from 3 to 8
- move 4 from 3 to 8
- move 2 from 9 to 2
- move 3 from 5 to 4
- move 1 from 3 to 5
- move 1 from 7 to 6
- move 14 from 4 to 6
- move 6 from 5 to 9
- move 8 from 2 to 8
- move 3 from 5 to 7
- move 21 from 8 to 4
- move 16 from 4 to 9
- move 8 from 6 to 2
- move 4 from 6 to 1
- move 1 from 4 to 6
- move 2 from 4 to 8
- move 3 from 1 to 8
- move 2 from 4 to 6
- move 1 from 6 to 2
- move 3 from 8 to 4
- move 2 from 2 to 5
- move 2 from 5 to 7
- move 1 from 8 to 9
- move 1 from 4 to 9
- move 1 from 1 to 6
- move 3 from 6 to 3
- move 3 from 2 to 3
- move 1 from 4 to 6
- move 3 from 6 to 7
- move 10 from 9 to 7
- move 1 from 4 to 7
- move 6 from 8 to 3
- move 1 from 6 to 8
- move 2 from 2 to 5
- move 1 from 2 to 1
- move 1 from 8 to 9
- move 1 from 2 to 8
- move 1 from 1 to 9
- move 7 from 9 to 1
- move 1 from 8 to 5
- move 7 from 1 to 7
- move 3 from 5 to 8
- move 3 from 7 to 2
- move 1 from 8 to 4
- move 1 from 2 to 4
- move 2 from 4 to 6
- move 5 from 3 to 1
- move 9 from 7 to 2
- move 6 from 3 to 8
- move 8 from 2 to 7
- move 2 from 6 to 4
- move 2 from 1 to 7
- move 2 from 1 to 4
- move 24 from 7 to 4
- move 4 from 8 to 9
- move 2 from 7 to 5
- move 1 from 5 to 2
- move 1 from 3 to 8
- move 4 from 2 to 8
- move 13 from 9 to 2
- move 2 from 8 to 6
- move 3 from 9 to 6
- move 26 from 4 to 2
- move 1 from 5 to 7
- move 2 from 6 to 2
- move 2 from 4 to 1
- move 7 from 2 to 1
- move 15 from 2 to 6
- move 8 from 2 to 8
- move 4 from 6 to 8
- move 9 from 2 to 9
- move 13 from 6 to 7
- move 6 from 1 to 9
- move 2 from 2 to 4
- move 4 from 1 to 6
- move 3 from 8 to 3
- move 1 from 4 to 9
- move 2 from 6 to 7
- move 1 from 4 to 3
- move 3 from 3 to 2
- move 14 from 7 to 4
- move 5 from 9 to 5
- move 9 from 8 to 5
- move 7 from 9 to 6
- move 2 from 5 to 6
- move 2 from 9 to 2
- move 10 from 5 to 1
- move 1 from 3 to 1
- move 2 from 8 to 1
- move 1 from 9 to 2
- move 1 from 7 to 5
- move 4 from 2 to 1
- move 1 from 9 to 8
- move 3 from 4 to 1
- move 1 from 8 to 6
- move 12 from 1 to 5
- move 1 from 1 to 6
- move 1 from 7 to 5
- move 4 from 6 to 9
- move 2 from 2 to 4
- move 1 from 9 to 6
- move 1 from 1 to 5
- move 2 from 9 to 7
- move 10 from 6 to 5
- move 1 from 6 to 7
- move 20 from 5 to 1
- move 1 from 7 to 9
- move 2 from 9 to 1
- move 3 from 5 to 1
- move 2 from 8 to 4
- move 2 from 8 to 7
- move 1 from 5 to 9
- move 1 from 8 to 4
- move 22 from 1 to 7
- move 5 from 4 to 8
- move 1 from 5 to 9
- move 19 from 7 to 4
- move 2 from 9 to 1
- move 1 from 5 to 9
- move 10 from 1 to 8
- move 1 from 9 to 1
- move 1 from 8 to 3
- move 8 from 4 to 7
- move 1 from 5 to 6
- move 3 from 4 to 5
- move 1 from 5 to 9
- move 11 from 7 to 4
- move 4 from 4 to 9
- move 1 from 6 to 2
- move 1 from 3 to 9
- move 5 from 9 to 4
- move 5 from 7 to 9
- move 23 from 4 to 2
- move 17 from 2 to 7
- move 2 from 2 to 8
- move 4 from 4 to 7
- move 1 from 4 to 5
- move 2 from 5 to 2
- move 5 from 8 to 9
- move 5 from 2 to 7
- move 9 from 7 to 5
- move 11 from 9 to 2
- move 1 from 4 to 3
- move 5 from 8 to 7
- move 3 from 8 to 5
- move 2 from 1 to 3
- move 2 from 3 to 9
- move 1 from 5 to 8
- move 5 from 7 to 5
- move 15 from 5 to 4
- move 2 from 8 to 1
- move 2 from 5 to 1
- move 4 from 4 to 1
- move 1 from 8 to 7
- move 8 from 2 to 1
- move 4 from 2 to 8
- move 2 from 7 to 4
- move 5 from 8 to 6
- move 5 from 7 to 9
- move 4 from 6 to 5
- move 7 from 4 to 8
- move 1 from 6 to 1
- move 1 from 3 to 1
- move 2 from 5 to 1
- move 7 from 1 to 5
- move 5 from 1 to 3
- move 4 from 7 to 9
- move 4 from 3 to 9
- move 2 from 9 to 7
- move 6 from 9 to 2
- move 1 from 4 to 1
- move 1 from 3 to 5
- move 1 from 2 to 5
- move 5 from 9 to 4
- move 4 from 4 to 6
- move 1 from 8 to 9
- move 8 from 4 to 3
- move 7 from 7 to 3
- move 5 from 1 to 3
- move 11 from 5 to 9
- move 1 from 7 to 6
- move 2 from 3 to 5
- move 1 from 3 to 1
- move 3 from 6 to 2
- move 2 from 5 to 1
- move 2 from 1 to 2
- move 3 from 1 to 5
- move 5 from 9 to 2
- move 2 from 6 to 8
- move 2 from 3 to 8
- move 4 from 9 to 7
- move 3 from 5 to 2
- move 2 from 1 to 8
- move 1 from 9 to 8
- move 1 from 9 to 2
- move 4 from 7 to 9
- move 11 from 8 to 7
- move 1 from 8 to 2
- move 6 from 9 to 7
- move 3 from 7 to 1
- move 13 from 2 to 7
- move 24 from 7 to 1
- move 2 from 2 to 6
- move 1 from 8 to 3
- move 1 from 9 to 3
- move 5 from 2 to 4
- move 1 from 2 to 5
- move 1 from 6 to 2
- move 1 from 6 to 3
- move 1 from 2 to 4
- move 3 from 7 to 3
- move 2 from 1 to 7
- move 2 from 3 to 8
- move 2 from 7 to 8
- move 9 from 3 to 2
- move 3 from 4 to 8
- move 1 from 5 to 1
- move 9 from 2 to 1
- move 3 from 4 to 9
- move 1 from 7 to 8
- move 6 from 3 to 9
- move 2 from 1 to 5
- move 15 from 1 to 3
- move 13 from 3 to 9
- move 11 from 1 to 4
- move 5 from 4 to 1
- move 6 from 3 to 6
- move 4 from 4 to 8
- move 6 from 1 to 4
- move 1 from 5 to 2
- move 1 from 2 to 1
- move 3 from 4 to 2
- move 2 from 8 to 5
- move 2 from 4 to 2
- move 9 from 9 to 3
- move 9 from 3 to 5
- move 2 from 9 to 4
- move 5 from 2 to 6
- move 1 from 1 to 8
- move 1 from 4 to 1
- move 10 from 9 to 2
- move 9 from 2 to 4
- move 10 from 4 to 1
- move 3 from 1 to 3
- move 4 from 1 to 2
- move 5 from 2 to 4
- move 2 from 5 to 2
- move 4 from 1 to 7
- move 10 from 5 to 4
- move 2 from 2 to 4
- move 1 from 9 to 2
- move 2 from 3 to 5
- move 1 from 3 to 5
- move 3 from 6 to 7
- move 8 from 4 to 9
- move 6 from 6 to 1
- move 4 from 9 to 5
- move 2 from 9 to 1
- move 1 from 2 to 6
- move 6 from 5 to 2
- move 3 from 7 to 9
- move 4 from 8 to 2
- move 1 from 7 to 9
- move 1 from 5 to 3
- move 2 from 7 to 4
- move 1 from 7 to 1
- move 14 from 1 to 9
- move 1 from 1 to 9
- move 1 from 3 to 8
- move 3 from 2 to 5
- move 2 from 4 to 2
- move 6 from 8 to 1
- move 1 from 2 to 1
- move 5 from 1 to 9
- move 1 from 1 to 7
- move 2 from 8 to 5
- move 1 from 5 to 4
- move 1 from 6 to 1
- move 8 from 2 to 7
- move 2 from 6 to 1
- move 9 from 9 to 5
- move 11 from 4 to 8
- move 4 from 7 to 4
- move 6 from 4 to 6
- move 1 from 7 to 4
- move 6 from 6 to 7
- move 1 from 5 to 9
- move 6 from 8 to 9
- move 8 from 9 to 5
- move 1 from 4 to 5
- move 15 from 9 to 3
- move 3 from 1 to 4
- move 6 from 7 to 2
- move 3 from 4 to 9
- move 2 from 7 to 3
- move 1 from 7 to 3
- move 1 from 7 to 2
- move 2 from 8 to 1
- move 3 from 8 to 5
- move 2 from 1 to 7
- move 8 from 3 to 6
- move 3 from 6 to 5
- move 1 from 6 to 1
- move 10 from 5 to 7
- move 6 from 5 to 4
- move 4 from 2 to 4
- move 6 from 5 to 1
- move 6 from 1 to 8
- move 2 from 9 to 2
- move 2 from 9 to 7
- move 6 from 3 to 7
- move 1 from 3 to 5
- move 1 from 1 to 9
- move 2 from 8 to 1
- move 2 from 5 to 4
- move 3 from 3 to 7
- move 10 from 4 to 6
- move 1 from 9 to 7
- move 12 from 7 to 3
- move 12 from 3 to 8
- move 2 from 1 to 5
- move 1 from 1 to 3
- move 13 from 8 to 1
- move 7 from 7 to 1
- move 13 from 6 to 9
- move 1 from 7 to 4
- move 6 from 5 to 3
- move 3 from 4 to 3
- move 6 from 3 to 1
- move 10 from 9 to 4
- move 2 from 7 to 6
- move 8 from 1 to 9
- move 3 from 2 to 9
- move 1 from 3 to 5
- move 1 from 3 to 5
- move 1 from 1 to 4
- move 6 from 9 to 3
- move 2 from 6 to 7
- move 4 from 9 to 5
- move 4 from 1 to 6
- move 1 from 2 to 4
- move 6 from 1 to 4
- move 3 from 9 to 3
- move 3 from 6 to 8
- move 3 from 8 to 7
- move 5 from 5 to 1
- move 1 from 3 to 9
- move 1 from 9 to 5
- move 1 from 3 to 2
- move 2 from 5 to 1
- move 1 from 6 to 9
- move 1 from 6 to 3
- move 2 from 9 to 7
- move 2 from 8 to 1
- move 1 from 3 to 2
- move 1 from 2 to 5
- move 1 from 7 to 1
- move 7 from 7 to 9
- move 12 from 1 to 9
- move 1 from 5 to 2
- move 1 from 7 to 1
- move 13 from 4 to 7
- move 1 from 9 to 4
- move 5 from 7 to 3
- move 4 from 9 to 1
- move 8 from 7 to 9
- move 3 from 2 to 3
- move 4 from 3 to 7
- move 5 from 4 to 6
- move 3 from 9 to 4
- move 10 from 1 to 5
- move 3 from 4 to 7
- move 16 from 9 to 2
- move 3 from 9 to 2
- move 6 from 5 to 3
- move 4 from 6 to 2
- move 1 from 4 to 6
- move 2 from 6 to 8
- move 1 from 5 to 2
- move 1 from 5 to 8
- move 7 from 7 to 2
- move 16 from 2 to 1
- move 1 from 5 to 1
- move 10 from 2 to 8
- move 14 from 8 to 5
- move 2 from 2 to 6
- move 1 from 2 to 5
- move 2 from 2 to 1
- move 8 from 1 to 7
- move 4 from 1 to 7
- move 2 from 1 to 7
- move 5 from 3 to 2
- move 1 from 1 to 6
- move 2 from 2 to 5
- move 4 from 1 to 7
- move 1 from 2 to 8
- move 1 from 2 to 8
- move 3 from 6 to 7
- move 10 from 7 to 5
- move 1 from 2 to 8
- move 27 from 5 to 9
- move 1 from 5 to 6
- move 1 from 6 to 4
- move 1 from 4 to 3
- move 3 from 3 to 7
- move 4 from 3 to 6
- move 2 from 6 to 4
- move 3 from 8 to 1
- move 2 from 6 to 1
- move 12 from 7 to 8
- move 2 from 3 to 9
- move 1 from 9 to 2
- move 1 from 2 to 8
- move 2 from 1 to 2
- move 6 from 3 to 8
- move 1 from 7 to 4
- move 15 from 9 to 5
- move 7 from 9 to 4
- move 1 from 2 to 1
- move 16 from 8 to 2
- move 8 from 5 to 2
- move 24 from 2 to 9
- move 3 from 1 to 2
- move 24 from 9 to 1
- move 5 from 5 to 9
- move 3 from 4 to 1
- move 1 from 7 to 6
- move 1 from 6 to 3
- move 1 from 3 to 2
- move 3 from 2 to 3
- move 1 from 5 to 6
- move 1 from 2 to 7
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day6.cs b/Days/Day6.cs
deleted file mode 100644
index 534a5b4..0000000
--- a/Days/Day6.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day6 : Day
-{
- public override int Number => 6;
- public override string Name => "Tuning Trouble";
- public override void RunPart1(bool display = true)
- {
- int position = 0;
-
- // Store the last 4 characters in a stream (kind of like a sliding window)
- var charStream = new Queue();
- charStream.Enqueue(Input[0]);
- charStream.Enqueue(Input[1]);
- charStream.Enqueue(Input[2]);
-
- for (int i = 3; i < Input.Length; i++)
- {
- charStream.Enqueue(Input[i]);
-
- // Check if all 4 chars are different
- if (charStream.ToHashSet().Count == charStream.Count)
- {
- position = i + 1;
- break;
- }
-
- charStream.Dequeue();
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Position of start-of-packet marker is: [yellow]{position}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- const int length = 14;
- int position = 0;
-
- // Store the last 14 characters in a stream (kind of like a sliding window)
- var charStream = new Queue();
- for (int i = 0; i < length - 1; i++)
- {
- charStream.Enqueue(Input[i]);
- }
-
- 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)
- {
- position = i + 1;
- break;
- }
-
- charStream.Dequeue();
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Position of start-of-message marker is: [yellow]{position}[/][/]");
- }
- }
-
- #region Input
-
- public const string Input =
- """
- rgffbnnqvqhhmtmzzmmpmllcggsdswwvvwzzpptbppgngsnncwcnwcwnwgwrwrrnqnlqlccwggrcgrccjgcgwghgffjgjgrgmmsrrhchfcfdccjwwzdzcdcbcjjtfjjltlvvtstvttszsvsmmfccwcjwwzmzhhjvjpvjpppcwppdtdvtdvtvztzvzffdfqqgbgffrgrpgphhbcctssncsnncfcppvnpvnvfnfvnnfggtpplggwsggldllzvzrznncbbjpplbbrrnsrssmrsrhhmqmnqqhpqqnrqnrrtrnnrwrwhhpjhphlhvvgbgzztqtvvmssdshhqnhnjjvhjhqqbrqrrmrlrdllvrlvlccfvcffhfssgvsswhwqqfwfwhhcffjmmjrrbgrgjgrrvsrvvwmwsmmszzvmzvmmwmtthvvfbfllpjpwpwjpwpnpjpqqwtqtwwqpwqqrsqqcpqqssrgsrrjwwqmwmgwgrggmvmgmfgmffjfhjfjttcztccmtmmccnznhhcgcffmnfmmqjjhwwtccbzbhhwnhnsnmsnmnqqchhhnggbzbjzjzszsfsjfjvffnlffvrvddbhhqccdnnzwnznjnpnmppthhqddjhddqjqlqplqqjpjwppqttswsvwvfwflfplffnbfbwfwhhlhtlhtltzzmlmslmlwwgzwzrrwhhlnnrfnnmpppjpgpbbhpbhppbrppbhhzgzczqcqvqggwppcnnhnznvznzhhcpctptpjtppdhhprhrcrpcprpplrprzrnrfnrnlrlvrrfqqnnsqsqrssnrnvvvghvvbzzqppjsjnnrprwrrmqqtfqfwwrdrsddprddbdzbdbndbdjdljjrtjrrnzrzjrzzpssftfmfbflbbcpcsppwrppntnhthlthtbbsmsbmsmggpssnhnjjtsjjwssdjdwwppcbpcclmccwzzrggmgmnnwjnnqppjttvllmhhvcctptbpbdpdhdqqgggbnnqcchlhssltstllvqlvqvdvjdvvqvsvfvhfhlfftqffztzdttfvvzmvzznvnsnjjvqjvjljplpvvzlzhzghgddbbzbmbnztgthrnpsqhhdvprtpdftmqfvgjzgdvqwmvgwbczvbschqfhdvqcfnmbgmtqmlmsqcbfhshrzzbrtpgnwwtzgnjghzrlwhntprqhvshjcfvlnchccbtnswfnmpccdppqrqrhngvlwrpplbnpgzbzwtzwrsptmsmlndcfmbnqgvnqvzwpvrtfsrwfvfwdvplrfdddwcnwhzchmwfjsfvbtbrjchmgqwfvvmpzhqcbzhrcmjrzmgrtnzrcqdqdqnpwjctlhrjcphbbcvhvqnhtwjrvrbzfzfzzplshvrcchvtgtjcnhlzsttwdhcmdvrdlgsngvtzqsjrcptwwbgvfbsvgnmfhmvgqtfzbhhmdznjlsghhnlwzhvplfvlqzbrsjhdvrshjbnfqgpscbpzmnmmcsdbtwbwmsvfjwdvtctslcqfssrhczdptlrjbfzjctqrcbppcfcbqqzhhftdjchtscwgwcnpvrrjvnnwrqtrqmbgdfcpqhddnvdnmlmqcgsndwbcfvfrzsrflsnqrpmszqrdlshlcsfrmnsqmtrvjwqcllftscwrtmvcjsmrlqvdfjzgfdtswqzldqgjvhczpqrfbclnbwcjprjncvhgfmjhgfgnvfzfnvbbstgsgtspdhtfsncttlwmllbbvqftjtshfjlqtjwlvrbwmzfhdmcbhtqdzqtzmdljqprwhqwcvbtfqbpjwztgqrvlrqdwmqrqzvptsgjdqnqdfwfpjdglwgpdrcfrrzmpjmtbwwrqqcsnmphcqtthlnlzlfftrjmtjwwqrldcfjjclzrsqvltsfchfggcwbzbtpqcjfvgpwnwwqrdbdvjplgsgctdhqvttmtpmmjfcqdslhjgtdppbmzbrfbrrjncfdhlmjgdwjrmbgpcgctghbvphpgfvvfvtplqrhnjjhqntjvbsggvrvjgrwptcgqgrmjtprvhnvjsdsfqrqrrltlhvfsjsqpbwndbsnjzplcfqtfbdqdzdvnljcsmjnrmwwjzqwsjbdlclsmccbqwnlpltqhqhmthhrdjwlqwrbltghsvblqntvjqzpmmpqwrrwvhmtfqzhrmjfglwfpthhgbhdmrtprtqgqbdcfqlbbvmzmchzglmpzdvhpqchhclbcvrcmhtzqfzrplbvmdhghsttzgdjbgmmtvlqjsstgwlwchhwmflwbgljgszghvfdsngbtbcnhzmmdmsjqfbcsmgpjwjqgwqdlrgznnmhphbrzcgnqczpcbljjmhnnrmzlpqbswwcjpjqcrtdmgprpmmbprwlmpzcmwlnbzqjsgftrncvmjmjwvqgszsrmrczhjnwlghgndhbthwlhfbncrwqfgnshrmdfhwmfvllhvbmmllwfbgrnrttpzffzvcfjfbrmdqfcfrdqsltpbbttnqnbncfhwghfbgwrltbhwmmlpczsvvdnwhchgfplnjsttsqvsznwvlwzgfnhfrrgplsfwrwnbfhblwtjpldjmzrglhppgsjsgzssbbgrrbdmpwhgjjmlfnpdbvtntcwrvltgfnrgwttvvjhqljjvvnmztwgzcclgbjnjspzwnpgtgvhhhqbzrnvmdcljcdncvpnpdhrhqwvlhllbsrmjbzlgczwjsrvqrqfqmtjrnpbtdhsrfbhrgtgnrmlgcwcmrvrdfcqbfcqczjchgrjpzqfqqmcpvnvbrssfrfsrjmlngplqqsnclgvpfhjbzdppjftlgbmcgdbrvqrclvtdnzhhcmzlrdrgbrqrlvfcnvznnqwswvhdpbbjmsqzcrmjngzmdftjzsjvgfdtcvdwhnwwjlcgcmflzzpzpgzrvmptbjgrdjbzscrglhcjppdjdshnvvbsnnddtbwsdrpnbnlrtppcrzbbjrfzhbwgmjqtmgjvmrjgfdndlmqvhgwprsjnhcmrnfdfdzggjjzcccnsnwwbjzmsfjjfhclptfcwqjhnphpwzszjmsrtnbqpqsvcfcvrrgclwlbrqngdcdlzrdfpvbgtznjzdvjngrgswhjnrpgswtqflpgvnpbsvcrtgtzcbhdjpbjwnpdzcmprtzlppbqvpzrrlbssmwhhvqqpmwggnzwcfdnzccjrrncnvjqgbpstctwpqvhdsbcsjrpbzbdlwwvjngtbnvpthppglgsnrbwnvpzldhsgwqhclgwrdsvcfdclvdsbrhcfnbgrtqswstnjfmfrdgphpvgjfqzcwnpcghdhtflgdnhhnnnwrpnmppszgqdcqjqpnccfsqjsmwtqvzwfqvtwtthwswmcqqcqjwcgwgzgmnpzbfpzrqbvqhbhtsvvbppbmqzfnsmwppzvsctgcncztsqdfhnlwjjtvwcchvnphwpnpzqsjhlrcmnbthtqlfclnsfdtpwfzljdpfszvhgzdpzhbjtphbfbmwgfrfplntfqhgpbjzghmblzzhdcbptngqwrtfmvtbhphpvdwpswbscrwzhnvqfwlbwwqqgstgmbqlllspbhbpjmmrfhmjwzdnsdwmpvlrspgzmdjwqwcjpbgwspsghjdvrbbsbtgwptqdvvdhbhqbdhpbzdsdwsjdbjnztdqqrdhwhtpvcbblbmjgmbpqghdsfthzjffrdvldfsnpcsmnzwzcqlnvcrcbqnfcdrfbffrvhqsbqjnnbzsqvqqdqwmsvbqvtgmnnlthpngfsljqnrdhhzpmwsnqvrgdnvlbgnndfcpjfgmzqssvnnrwbmslcqpnhnnwzggsjvqcsqpfzjcmcppntmsdtfggzdncqbfjsqvbzgnnlsdbgjqffsmvnbqlsrjwdmcjbrsrpchnnhdtlcdhfdltmlvtrwjpzphtbhzzrlrwbbhhpntgbcfmphnbrjdhrhvmvhfglrncngjdsvbfrqtqzsgvlzjqzcqnwdcfgvnpsqpphwfsdvpgnchjnnjhsqgvlqcvhzzzcrsqcvrbsbjbdbgddlbb
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day7.cs b/Days/Day7.cs
deleted file mode 100644
index 012862b..0000000
--- a/Days/Day7.cs
+++ /dev/null
@@ -1,1250 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-internal interface IFileSystemEntry
-{
- string Name { get; }
- long Size { get; }
- DirectoryEntry? ParentDirectory { get; }
-
- string FullPath => Path.Combine(ParentDirectory is IFileSystemEntry directory ? directory.FullPath : "", Name);
-}
-
-internal class DirectoryEntry : IFileSystemEntry
-{
- public string Name { get; }
- public DirectoryEntry? ParentDirectory { get; }
- public IList Entries { get; } = new List();
-
- public long Size => Entries.Sum(e => e.Size);
-
- public DirectoryEntry(string name, DirectoryEntry? parentDirectory = null)
- {
- Name = name;
- ParentDirectory = parentDirectory;
- }
-}
-
-internal record FileEntry(DirectoryEntry ParentDirectory, string Name, long Size) : IFileSystemEntry;
-
-public class Day7 : Day
-{
- public override int Number => 7;
- public override string Name => "No Space Left On Device";
- public override void RunPart1(bool display = true)
- {
- var fileSystem = ParseFileSystem();
-
- // Get the sum of sizes of directory which total size is at most 100000
- var totalSize = fileSystem
- .Flatten(f => f.Entries.OfType())
- .Where(d => d.Size < 100_000)
- .Sum(d => d.Size);
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Total size: [yellow]{totalSize}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- const long fileSystemSpace = 70_000_000;
- const long requiredSpace = 30_000_000;
-
- // Traverse filesystem
- var fileSystem = ParseFileSystem();
-
- // Get missing space
- var availableSpace = fileSystemSpace - fileSystem.Size;
- var missingSpace = requiredSpace - availableSpace;
-
- // Get smallest directory which is bigger than missingSpace
- var directoryToRemove = fileSystem
- .Flatten(f => f.Entries.OfType())
- .Where(d => d.Size > missingSpace)
- .MinBy(d => d.Size);
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Directory to remove size: [yellow]{directoryToRemove!.Size}[/][/]");
- }
- }
-
- private static DirectoryEntry ParseFileSystem()
- {
- // Root directory
- var fileSystem = new DirectoryEntry("");
-
- // Construct file structure from input
- var currentDirectory = fileSystem;
-
- foreach (var line in Input.ReadAllLines())
- {
- // Shell commands
- if (line.StartsWith('$'))
- {
- var split = line.Split(' ').Skip(1).Select(l => l.Trim()).ToArray();
- var command = split[0];
-
- switch (command)
- {
- case "cd":
- var name = split[1];
-
- // Check if we need to go up in directory hierarchy
- if (name == "..")
- {
- currentDirectory = currentDirectory.ParentDirectory!;
- break;
- }
-
- var directory = new DirectoryEntry(name, currentDirectory);
-
- currentDirectory.Entries.Add(directory);
- currentDirectory = directory;
- break;
- case "ls":
- // Do nothing, when it's not a cd we just add the entry to current directory
- break;
- }
- }
- // Add the entry to current directory
- else
- {
- if (line.StartsWith("dir"))
- {
- // We just skip directories, they will be added on cd
- }
- else
- {
- var split = line.Split(' ');
- var size = long.Parse(split[0]);
- var name = split[1];
-
- currentDirectory.Entries.Add(new FileEntry(currentDirectory, name, size));
- }
- }
- }
-
- return fileSystem;
- }
-
- #region Input
-
- public const string Input =
- """
- $ cd /
- $ ls
- dir fpljqj
- 171526 ghtzhjwf.nls
- dir gsdsbld
- dir hbmjtb
- 296801 mjfjqw.ccv
- dir nfn
- dir qmrsvfvw
- 102565 qqjnqb.chd
- dir svgbqd
- $ cd fpljqj
- $ ls
- 153563 ghtzhjwf.nls
- 243252 gsvjgj.jsm
- 154134 hghnrbqg.rzb
- $ cd ..
- $ cd gsdsbld
- $ ls
- dir npmncvhh
- dir qmrsvfvw
- dir sqtnlr
- dir vzndpc
- $ cd npmncvhh
- $ ls
- 81366 dwbgr.ztr
- 144577 fzjmcq
- dir mphhrqf
- dir rnmvggfd
- 276454 zfl.ghv
- $ cd mphhrqf
- $ ls
- dir qlcfs
- 111207 shmcrf.wlr
- dir zwsnwvnv
- $ cd qlcfs
- $ ls
- 283904 fpljqj.pdw
- 83520 hsclcqqt.pff
- dir htwl
- dir lqjhfdch
- 5842 mdjzmbc.qtv
- dir nqfdhlcg
- 120167 twgqhvft.cgw
- 186998 zclhcr
- dir zfl
- dir zlqgr
- $ cd htwl
- $ ls
- 268134 hmwnn.htq
- $ cd ..
- $ cd lqjhfdch
- $ ls
- 21479 tpdsgf.hgd
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- dir dhjfqv
- 203675 ghtzhjwf.nls
- 39527 qfwdmzfv.ggd
- $ cd dhjfqv
- $ ls
- 135074 dqs.wht
- $ cd ..
- $ cd ..
- $ cd zfl
- $ ls
- 17334 wlsd
- $ cd ..
- $ cd zlqgr
- $ ls
- dir crs
- dir whrm
- dir zfl
- $ cd crs
- $ ls
- 220281 szft.bjb
- $ cd ..
- $ cd whrm
- $ ls
- 279796 pcnl
- dir pjzpqs
- $ cd pjzpqs
- $ ls
- dir smz
- 192921 sqtst.lcz
- 21397 trst
- 154861 vtgdsnmv
- $ cd smz
- $ ls
- 249693 mjfjqw.ccv
- dir tdwqpg
- $ cd tdwqpg
- $ ls
- 157907 wjv.rth
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd zfl
- $ ls
- dir hwlhshtr
- $ cd hwlhshtr
- $ ls
- 90468 srrv.jst
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd zwsnwvnv
- $ ls
- 209371 ctmcqlz.nwh
- 154262 nqngjf
- $ cd ..
- $ cd ..
- $ cd rnmvggfd
- $ ls
- dir czzrdvc
- 203540 dnwtwzd
- dir fcsjqg
- dir fwdprwpq
- 74582 qlnqwnzp.ttz
- dir tvglfb
- $ cd czzrdvc
- $ ls
- dir blplbjpw
- $ cd blplbjpw
- $ ls
- 2835 zfl.zvw
- $ cd ..
- $ cd ..
- $ cd fcsjqg
- $ ls
- 81548 ghtzhjwf.nls
- $ cd ..
- $ cd fwdprwpq
- $ ls
- 11156 gsvjgj.jsm
- 75010 rgscvjq.zlw
- 122327 szft.bjb
- dir zfl
- 268883 zpgcwvjf
- $ cd zfl
- $ ls
- dir sphpbjt
- $ cd sphpbjt
- $ ls
- 31414 qfwdmzfv.ggd
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd tvglfb
- $ ls
- 118050 gsvjgj.jsm
- 265116 sdmldsd.hhm
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir fpljqj
- 203965 szft.bjb
- dir zcgfg
- $ cd fpljqj
- $ ls
- dir gqvmv
- $ cd gqvmv
- $ ls
- 175614 mjfjqw.ccv
- $ cd ..
- $ cd ..
- $ cd zcgfg
- $ ls
- 110104 ddzcbm.qtb
- dir fpglbth
- 148639 nqfdhlcg.fsz
- dir pfjz
- 166120 wjrmgl
- $ cd fpglbth
- $ ls
- 58850 qlggch.tng
- $ cd ..
- $ cd pfjz
- $ ls
- 197076 wplpj
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd sqtnlr
- $ ls
- 189086 gsvjgj.jsm
- dir ngr
- 210016 pmprhlg.rsg
- 277979 szft.bjb
- 282202 tfqcnn.hlf
- $ cd ngr
- $ ls
- dir fdhd
- dir hwsqqt
- dir qmrsvfvw
- $ cd fdhd
- $ ls
- 7384 fhhp
- dir fpljqj
- 91732 nqfdhlcg.gwf
- 69137 ptcrmc.wwr
- $ cd fpljqj
- $ ls
- 282109 rtfhcbc.pqj
- $ cd ..
- $ cd ..
- $ cd hwsqqt
- $ ls
- 174820 zvmgv.tcd
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 228739 qfwdmzfv.ggd
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd vzndpc
- $ ls
- 183360 fpljqj.nbh
- $ cd ..
- $ cd ..
- $ cd hbmjtb
- $ ls
- 219988 hlvjdg
- dir lndmtm
- 107247 rtpvh.srl
- dir sgt
- dir tgjszvsg
- 166122 zrshs.phz
- dir ztrvv
- $ cd lndmtm
- $ ls
- dir fpljqj
- dir hscwh
- dir wjv
- $ cd fpljqj
- $ ls
- 102717 qmrsvfvw
- $ cd ..
- $ cd hscwh
- $ ls
- dir qgz
- dir qmrsvfvw
- $ cd qgz
- $ ls
- 281901 szft.bjb
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 102781 fpljqj.gtv
- 197014 gsvjgj.jsm
- 174895 pvz
- $ cd ..
- $ cd ..
- $ cd wjv
- $ ls
- dir fpljqj
- 295195 mjfjqw.ccv
- 214886 qfwdmzfv.ggd
- dir qmrsvfvw
- 72164 vncjvfhh
- $ cd fpljqj
- $ ls
- dir fpljqj
- dir fzbppql
- dir jpqqr
- dir lzq
- dir pjjbmllm
- dir qmrsvfvw
- $ cd fpljqj
- $ ls
- 260943 ghtzhjwf.nls
- $ cd ..
- $ cd fzbppql
- $ ls
- 29399 wjv
- $ cd ..
- $ cd jpqqr
- $ ls
- 45275 zcwbrvd
- $ cd ..
- $ cd lzq
- $ ls
- 180833 szft.bjb
- $ cd ..
- $ cd pjjbmllm
- $ ls
- 64063 mjfjqw.ccv
- 183683 vrfd.wlw
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 226047 szft.bjb
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir bzcfzh
- 272794 lnzpvhj
- dir vsrgqmlt
- dir zbthlb
- $ cd bzcfzh
- $ ls
- 63095 mjfjqw.ccv
- 45335 nqfdhlcg
- 162307 vqqt.vbg
- $ cd ..
- $ cd vsrgqmlt
- $ ls
- dir nqfdhlcg
- $ cd nqfdhlcg
- $ ls
- dir wjv
- $ cd wjv
- $ ls
- 81528 cslzgjtp.qzg
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd zbthlb
- $ ls
- dir hjp
- dir twfw
- dir zfl
- $ cd hjp
- $ ls
- 20745 pvjwrzsl.pmg
- $ cd ..
- $ cd twfw
- $ ls
- dir csmmbjhp
- $ cd csmmbjhp
- $ ls
- 165998 nlsd
- 109132 vbjlnqt.lsd
- $ cd ..
- $ cd ..
- $ cd zfl
- $ ls
- 227633 jcs.vhj
- dir tvfhvbp
- $ cd tvfhvbp
- $ ls
- 116169 lgv
- 175862 qfwdmzfv.ggd
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd sgt
- $ ls
- 151135 nqfdhlcg
- 226449 nqfdhlcg.sqp
- 148179 wjv.fgc
- $ cd ..
- $ cd tgjszvsg
- $ ls
- 98354 szft.bjb
- $ cd ..
- $ cd ztrvv
- $ ls
- 163992 blmmm.gcf
- dir fghl
- dir fpljqj
- 226325 nqfdhlcg
- dir qmrsvfvw
- 284965 vhbffmcg.fwt
- $ cd fghl
- $ ls
- dir lgpwpmzp
- dir sqjqg
- $ cd lgpwpmzp
- $ ls
- dir ctr
- dir nqfdhlcg
- 279439 zfl.npd
- $ cd ctr
- $ ls
- 64805 jfflsd.gbc
- 163058 zbvpc.znm
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- 40180 jsqtwpt.qtq
- 87408 rmpbprz.lwr
- $ cd ..
- $ cd ..
- $ cd sqjqg
- $ ls
- 140444 bsglv
- 214121 crzdv.dcc
- $ cd ..
- $ cd ..
- $ cd fpljqj
- $ ls
- 56575 gqw.dzr
- 293957 gsvjgj.jsm
- 272507 jvd
- dir tgfvcpp
- 178972 vndshbth.mzw
- dir zwtz
- $ cd tgfvcpp
- $ ls
- dir bhq
- $ cd bhq
- $ ls
- 111454 gvq
- $ cd ..
- $ cd ..
- $ cd zwtz
- $ ls
- 39290 nqfdhlcg
- 140517 qfwdmzfv.ggd
- dir tcnv
- 177429 zlzsq.fph
- $ cd tcnv
- $ ls
- 286997 fpljqj.phd
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 252862 jbznh
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd nfn
- $ ls
- dir fqw
- dir mpz
- dir qmrsvfvw
- dir zfl
- $ cd fqw
- $ ls
- 144372 ghtzhjwf.nls
- 100013 mqwwjbvz.scd
- 95547 vspwhq.dwn
- $ cd ..
- $ cd mpz
- $ ls
- dir gntjg
- dir jfbhz
- 7835 nqfdhlcg
- dir vpgpz
- dir zfl
- $ cd gntjg
- $ ls
- dir hdq
- dir hvcdpzr
- dir lth
- 27002 mjfjqw.ccv
- dir qmrsvfvw
- dir scncl
- $ cd hdq
- $ ls
- dir jwhnt
- $ cd jwhnt
- $ ls
- 153428 fswqv.jpf
- $ cd ..
- $ cd ..
- $ cd hvcdpzr
- $ ls
- dir fpljqj
- 135000 fpljqj.smw
- 275125 hrqwfjjz.rdj
- dir pmcpnqrr
- 58960 qljhbczf.qfn
- 222912 szft.bjb
- dir wvvzbt
- $ cd fpljqj
- $ ls
- 282896 nqfdhlcg.bjm
- $ cd ..
- $ cd pmcpnqrr
- $ ls
- dir nwjzld
- dir tfdcg
- dir vwlbtgnh
- $ cd nwjzld
- $ ls
- 74948 wjv.psf
- $ cd ..
- $ cd tfdcg
- $ ls
- 77925 gsvjgj.jsm
- dir lcdfdmlj
- dir pthwnf
- 227063 qfwdmzfv.ggd
- 293860 qmwr.csp
- 154426 scwd.mdc
- $ cd lcdfdmlj
- $ ls
- 52503 mjfjqw.ccv
- $ cd ..
- $ cd pthwnf
- $ ls
- 176935 fgcwjjz
- $ cd ..
- $ cd ..
- $ cd vwlbtgnh
- $ ls
- dir nqfdhlcg
- $ cd nqfdhlcg
- $ ls
- dir lnwtl
- $ cd lnwtl
- $ ls
- 252540 cgj.pdg
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd wvvzbt
- $ ls
- 25603 bvhd
- 24426 qzwgj.bmb
- $ cd ..
- $ cd ..
- $ cd lth
- $ ls
- dir dmbf
- 60608 ghtzhjwf.nls
- dir ndbcrvw
- dir shsgqzn
- 27467 zfl.tdf
- $ cd dmbf
- $ ls
- dir zpggmccr
- $ cd zpggmccr
- $ ls
- 238504 hqsgz.jfh
- $ cd ..
- $ cd ..
- $ cd ndbcrvw
- $ ls
- 289441 bwbdc
- dir zfl
- 84967 zhwz
- $ cd zfl
- $ ls
- 95245 mjfjqw.ccv
- $ cd ..
- $ cd ..
- $ cd shsgqzn
- $ ls
- 184543 gqrthw.gwf
- 61456 wzbbsqrp
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir bql
- 247487 szvbjdjl
- 58312 wjv
- 241150 wjv.ltm
- $ cd bql
- $ ls
- 93199 fpljqj
- $ cd ..
- $ cd ..
- $ cd scncl
- $ ls
- 13092 clgmqlfl
- dir dcldv
- dir fsrznscl
- 21910 nqfdhlcg.lld
- dir prcgb
- $ cd dcldv
- $ ls
- 271970 nqfdhlcg.dgv
- $ cd ..
- $ cd fsrznscl
- $ ls
- dir bcdrv
- $ cd bcdrv
- $ ls
- 96252 fpljqj.cdr
- 154325 tvf.vhv
- $ cd ..
- $ cd ..
- $ cd prcgb
- $ ls
- 69766 lnsvgqq.psj
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd jfbhz
- $ ls
- 286498 ssbmgts
- $ cd ..
- $ cd vpgpz
- $ ls
- 63751 gsvjgj.jsm
- 220526 vvlvcs.dpc
- $ cd ..
- $ cd zfl
- $ ls
- dir fpljqj
- 182996 ghtzhjwf.nls
- dir jcffb
- dir jzl
- dir nzlv
- 6752 snwmlr.glp
- $ cd fpljqj
- $ ls
- dir btsdth
- dir fwdw
- dir nqfdhlcg
- dir qmrsvfvw
- 203470 svsvcgj
- $ cd btsdth
- $ ls
- 176953 szft.bjb
- $ cd ..
- $ cd fwdw
- $ ls
- 95939 crffczjt.gsq
- dir mbgzf
- dir rqdnjfdq
- 296397 zfl.fjb
- $ cd mbgzf
- $ ls
- 179220 mjfjqw.ccv
- $ cd ..
- $ cd rqdnjfdq
- $ ls
- 204152 qmrsvfvw
- $ cd ..
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- 194439 gwc.wdp
- 167934 qfwdmzfv.ggd
- 151571 sczw
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir dwc
- 103919 gfzgg
- 6816 shpch.chl
- $ cd dwc
- $ ls
- 17813 gsvjgj.jsm
- 80522 hbhlv.pqh
- dir htpt
- dir hwg
- dir nslrrrfg
- dir psgw
- 231148 sdfvzdwm.wlz
- 102460 szft.bjb
- dir wjlfgt
- $ cd htpt
- $ ls
- 162107 wjv
- $ cd ..
- $ cd hwg
- $ ls
- dir gslvrbt
- dir qmrsvfvw
- $ cd gslvrbt
- $ ls
- dir fjwn
- 107757 gsvjgj.jsm
- $ cd fjwn
- $ ls
- 268653 qptczjlq.prv
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 10557 nqfdhlcg
- $ cd ..
- $ cd ..
- $ cd nslrrrfg
- $ ls
- 112961 gsvjgj.jsm
- dir hjgbgq
- dir jctqdpq
- dir qgfb
- dir zfl
- $ cd hjgbgq
- $ ls
- 124947 mjfjqw.ccv
- $ cd ..
- $ cd jctqdpq
- $ ls
- 203489 vgfhrl
- $ cd ..
- $ cd qgfb
- $ ls
- 33980 nqfdhlcg.pqs
- $ cd ..
- $ cd zfl
- $ ls
- 193098 gsvjgj.jsm
- dir vmzghf
- 26070 zfnppjsz
- $ cd vmzghf
- $ ls
- 235035 szft.bjb
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd psgw
- $ ls
- 55808 gsvjgj.jsm
- 214300 wjv
- $ cd ..
- $ cd wjlfgt
- $ ls
- 201399 qfwdmzfv.ggd
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd jcffb
- $ ls
- 81815 szft.bjb
- $ cd ..
- $ cd jzl
- $ ls
- 155651 gsvjgj.jsm
- dir shrf
- $ cd shrf
- $ ls
- 57545 fpljqj.pcb
- $ cd ..
- $ cd ..
- $ cd nzlv
- $ ls
- 115992 bmmnj.ghw
- 100862 ghtzhjwf.nls
- dir qwjpjw
- dir rhbtbjp
- dir rlmzs
- 60695 szft.bjb
- 3260 vzgwmrnc
- dir wwnnj
- 17546 zdstndwj.lms
- $ cd qwjpjw
- $ ls
- dir dpwp
- dir fzdcjr
- 173669 gsvjgj.jsm
- dir nmnbv
- dir nqfdhlcg
- dir plzdzdnm
- 135543 qfwdmzfv.ggd
- 246217 qmrsvfvw
- dir sgpcqqm
- 141900 wvt.rfz
- $ cd dpwp
- $ ls
- 214058 wjv.zqs
- 94614 zrtbln
- $ cd ..
- $ cd fzdcjr
- $ ls
- 236058 jcn.fzn
- $ cd ..
- $ cd nmnbv
- $ ls
- 215145 lllgsbb
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- 61644 ghtzhjwf.nls
- 238094 qfwdmzfv.ggd
- 183057 szft.bjb
- 17501 wjv.pln
- $ cd ..
- $ cd plzdzdnm
- $ ls
- 243979 fpljqj.lnj
- $ cd ..
- $ cd sgpcqqm
- $ ls
- 262759 hjffwcls
- 100893 mvs.cgz
- dir nzhlcl
- 170443 szft.bjb
- dir zfl
- $ cd nzhlcl
- $ ls
- dir wcfl
- $ cd wcfl
- $ ls
- 24502 mjfjqw.ccv
- 145029 zfl.lpp
- $ cd ..
- $ cd ..
- $ cd zfl
- $ ls
- 176653 ghtzhjwf.nls
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd rhbtbjp
- $ ls
- dir nqfdhlcg
- 232788 pmj.cmm
- dir zfvbc
- $ cd nqfdhlcg
- $ ls
- 72379 gqpcrtpw.nsm
- $ cd ..
- $ cd zfvbc
- $ ls
- 19204 dqbs.ddg
- $ cd ..
- $ cd ..
- $ cd rlmzs
- $ ls
- 232862 fpljqj.rps
- 5558 lmgss.dtf
- $ cd ..
- $ cd wwnnj
- $ ls
- 260417 cwjsrptm.hlm
- 216130 gsvjgj.jsm
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir fpljqj
- dir hllbt
- dir nqfdhlcg
- $ cd fpljqj
- $ ls
- dir qmrsvfvw
- dir tdnp
- dir vhtwd
- dir wnlzd
- dir ztttgd
- $ cd qmrsvfvw
- $ ls
- 218325 fpljqj.zhj
- 220402 qfwdmzfv.ggd
- $ cd ..
- $ cd tdnp
- $ ls
- 46936 fmgz
- dir gdsqdtw
- dir tpcbjc
- dir zfl
- $ cd gdsqdtw
- $ ls
- 128812 cnfpsb.qjr
- 185390 ghtzhjwf.nls
- 147220 qfwdmzfv.ggd
- $ cd ..
- $ cd tpcbjc
- $ ls
- 188075 szft.bjb
- 243171 zdprcqs.qwf
- $ cd ..
- $ cd zfl
- $ ls
- dir nnschfl
- dir qmrsvfvw
- dir szlbls
- 109443 wjv
- $ cd nnschfl
- $ ls
- 139948 szft.bjb
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- dir bdn
- dir fpljqj
- 168508 fpljqj.ljd
- dir hwgbwqmm
- dir nwhl
- 224059 qfwdmzfv.ggd
- $ cd bdn
- $ ls
- 179118 jdrdjf.ppn
- 74443 lpp
- $ cd ..
- $ cd fpljqj
- $ ls
- 125033 mtfgm.pjf
- $ cd ..
- $ cd hwgbwqmm
- $ ls
- 133673 vrvhgbz.ttb
- $ cd ..
- $ cd nwhl
- $ ls
- 187017 fpljqj
- 149238 mjfjqw.ccv
- dir mqzrmjr
- dir vdjgqfc
- dir zfzfbq
- $ cd mqzrmjr
- $ ls
- dir fpljqj
- 131712 jmnsst.bmv
- 289722 ppdhjswn
- dir qmrsvfvw
- 30641 zfl.trb
- $ cd fpljqj
- $ ls
- 286985 lwmfmsr.tln
- 253325 mjfjqw.ccv
- 194077 vgb.glm
- 38905 wjv.vgs
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 87468 nngbnwds.qcn
- $ cd ..
- $ cd ..
- $ cd vdjgqfc
- $ ls
- 122025 rnvwf.mrp
- 261944 wdwgml
- $ cd ..
- $ cd zfzfbq
- $ ls
- dir bwmrf
- dir zfl
- $ cd bwmrf
- $ ls
- 222502 gsvjgj.jsm
- $ cd ..
- $ cd zfl
- $ ls
- 10297 ghtzhjwf.nls
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd szlbls
- $ ls
- 10968 bqbclc.nfl
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd vhtwd
- $ ls
- 188024 dgz
- $ cd ..
- $ cd wnlzd
- $ ls
- 201028 gsvjgj.jsm
- dir mcnnsv
- dir mctpdbs
- 47879 szft.bjb
- dir tjqfts
- 164406 zpdmdrw
- $ cd mcnnsv
- $ ls
- dir lclgj
- dir sjdbnbqw
- dir tlj
- dir wjv
- $ cd lclgj
- $ ls
- 192605 fgpjczr.grp
- 65758 hhrf.fgg
- $ cd ..
- $ cd sjdbnbqw
- $ ls
- 89058 ghtzhjwf.nls
- 191742 rlmwjg.dpl
- 179479 zswc.snt
- $ cd ..
- $ cd tlj
- $ ls
- 183447 fpljqj.fgf
- $ cd ..
- $ cd wjv
- $ ls
- 1517 pbwr
- 189647 szft.bjb
- $ cd ..
- $ cd ..
- $ cd mctpdbs
- $ ls
- 120327 szft.bjb
- $ cd ..
- $ cd tjqfts
- $ ls
- dir crvw
- $ cd crvw
- $ ls
- 289523 lcshtlgf.lrv
- 169176 szft.bjb
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd ztttgd
- $ ls
- 247914 sqqv.cvm
- $ cd ..
- $ cd ..
- $ cd hllbt
- $ ls
- 298155 cqnb.fgc
- 224277 hjf
- 220312 jhnpv
- 7421 qmrsvfvw
- dir qsg
- $ cd qsg
- $ ls
- dir drm
- dir fpljqj
- dir wjv
- $ cd drm
- $ ls
- dir fhzr
- $ cd fhzr
- $ ls
- dir nqfdhlcg
- $ cd nqfdhlcg
- $ ls
- 125578 nqfdhlcg
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd fpljqj
- $ ls
- dir jmfqmdcm
- dir nqfdhlcg
- 48942 qfwdmzfv.ggd
- dir swrdzl
- 18483 szft.bjb
- 254012 zjcnz.pls
- $ cd jmfqmdcm
- $ ls
- 130015 bvrmp.vwg
- 157978 gsvjgj.jsm
- 54571 hmhldqr.ctt
- 169263 qgccqrqs
- 261388 szft.bjb
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- 213466 fpljqj.wbp
- 31434 jhsb.lbb
- 144357 qfwdmzfv.ggd
- $ cd ..
- $ cd swrdzl
- $ ls
- dir fgmtnt
- dir pnmz
- 280186 qmrsvfvw.mrb
- $ cd fgmtnt
- $ ls
- 95823 gsvjgj.jsm
- 127258 qmrsvfvw
- $ cd ..
- $ cd pnmz
- $ ls
- 110479 ghtzhjwf.nls
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd wjv
- $ ls
- 51754 jpwhctfd
- 174007 mgqplvv.hlt
- 45041 mtrfs.bhj
- 153169 vhjw.vbg
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd nqfdhlcg
- $ ls
- dir htnw
- 280499 tdwzsgqh.zsh
- $ cd htnw
- $ ls
- 203521 ggfpmb.pmz
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd zfl
- $ ls
- 36860 mlbcw
- dir rgvgqqd
- 239962 rpv.qhp
- 64500 zfl.mvw
- $ cd rgvgqqd
- $ ls
- 26778 qnhpfr
- $ cd ..
- $ cd ..
- $ cd ..
- $ cd qmrsvfvw
- $ ls
- 290013 gsvjgj.jsm
- $ cd ..
- $ cd svgbqd
- $ ls
- 69927 bjc.vdh
- """;
-
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day8.cs b/Days/Day8.cs
deleted file mode 100644
index ba354e5..0000000
--- a/Days/Day8.cs
+++ /dev/null
@@ -1,314 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day8 : Day
-{
- public override int Number => 8;
- public override string Name => "Treetop Tree House";
- public override void RunPart1(bool display = true)
- {
- var grid = CreateGrid();
-
- var valid = new HashSet<(int, int)>();
-
- // Check each line from left to right
- for (int i = 0; i < grid.GetLength(0); i++)
- {
- int previousTreeSize = -1;
-
- for (int j = 0; j < grid.GetLength(1); j++)
- {
- var size = grid[i, j];
-
- // The tree on the left is blocking the view, stop searching on this line
- if (size <= previousTreeSize)
- {
- continue;
- }
-
- valid.Add((i, j));
- previousTreeSize = size;
- }
- }
-
- // Check each line from right to left
- for (int i = 0; i < grid.GetLength(0); i++)
- {
- int previousTreeSize = -1;
-
- for (int j = grid.GetLength(1) - 1; j >= 0; j--)
- {
- var size = grid[i, j];
-
- // The tree on the left is blocking the view, don't take it
- if (size <= previousTreeSize)
- {
- continue;
- }
-
- valid.Add((i, j));
- previousTreeSize = size;
- }
- }
-
- // Check each column from top to bottom
- for (int j = 0; j < grid.GetLength(1); j++)
- {
- int previousTreeSize = -1;
-
- for (int i = 0; i < grid.GetLength(0); i++)
- {
- var size = grid[i, j];
-
- // The tree on the top is blocking the view, stop searching on this column
- if (size <= previousTreeSize)
- {
- continue;
- }
-
- valid.Add((i, j));
- previousTreeSize = size;
- }
- }
-
- // Check each column from bottom to top
- for (int j = 0; j < grid.GetLength(1); j++)
- {
- int previousTreeSize = -1;
-
- for (int i = grid.GetLength(0) - 1; i >= 0; i--)
- {
- var size = grid[i, j];
-
- // The tree on bottom is blocking the view, stop searching on this column
- if (size <= previousTreeSize)
- {
- continue;
- }
-
- valid.Add((i, j));
- previousTreeSize = size;
- }
- }
-
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Total viewable trees: [yellow]{valid.Count}[/][/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- var grid = CreateGrid();
-
- var maxScenicScore = 0;
-
- // Compute scenic score for each tree
- for (int i = 0; i < grid.GetLength(0); i++)
- {
- for (int j = 0; j < grid.GetLength(1); j++)
- {
- var size = grid[i, j];
- var score = ComputeScenicScore(grid, i, j, size);
-
- if (score > maxScenicScore)
- {
- maxScenicScore = score;
- }
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]Max scenic score: [yellow]{maxScenicScore}[/][/]");
- }
- }
-
- private int ComputeScenicScore(int[,] grid, int i, int j, int size)
- {
- var visibleTreeCountLeft = 0;
- var visibleTreeCountRight = 0;
- var visibleTreeCountTop = 0;
- var visibleTreeCountBottom = 0;
-
- // Look on left
- for (int x = j - 1; x >= 0; x--)
- {
- visibleTreeCountLeft++;
- var nextTreeSize = grid[i, x];
-
- // Blocking the view
- if (nextTreeSize >= size)
- {
- break;
- }
- }
-
- // Look on right
- for (int x = j + 1; x < grid.GetLength(1); x++)
- {
- visibleTreeCountRight++;
- var nextTreeSize = grid[i, x];
-
- // Blocking the view
- if (nextTreeSize >= size)
- {
- break;
- }
- }
-
- // Look on top
- for (int y = i - 1; y >= 0; y--)
- {
- visibleTreeCountTop++;
- var nextTreeSize = grid[y, j];
-
- // Blocking the view
- if (nextTreeSize >= size)
- {
- break;
- }
- }
-
- // Look on bottom
- for (int y = i + 1; y < grid.GetLength(0); y++)
- {
- visibleTreeCountBottom++;
- var nextTreeSize = grid[y, j];
-
- // Blocking the view
- if (nextTreeSize >= size)
- {
- break;
- }
- }
-
- return visibleTreeCountLeft * visibleTreeCountRight * visibleTreeCountTop * visibleTreeCountBottom;
- }
-
- private int[,] CreateGrid()
- {
- var lines = Input.Split('\n').Select(s => s.Trim()).ToArray();
-
- var grid = new int[lines.Length, lines[0].Length];
-
- for (int i = 0; i < grid.GetLength(0); i++)
- {
- for (int j = 0; j < grid.GetLength(1); j++)
- {
- grid[i, j] = int.Parse(lines[i][j].ToString());
- }
- }
-
- return grid;
- }
-
- #region Input
-
- public const string Input =
- """
- 220102001303332210111144403232401113333122342344231242454143210203320302212443030013122003001101100
- 002012111323310331302003042221132010432132445255133124455255223004414440440003301012203200022100210
- 200201202011003110423331304200331011531224544245554512113213335525210302033141324322321031312102110
- 100020212221032131124244103404003222433224521422334123232422124515312313433224100204010121132311000
- 200113321032110240111004030043155443522233113242534443312241445211112450323031312112213000023232100
- 000123222130133422212242344055134444215311551422533215421415442551425225432130430124043210211111310
- 220013001310041302023441034332322423241253523413533421512551432233114553552003013120121302130121320
- 103122021001324130041021443134551553414353255343356623553131221454542451225451442032131420112320101
- 012123121220242033212021343121244143344324534625253522262464534215422121222134240012234133102111220
- 330310331223230000003152443554413335326665536266322522652335566553114314142351411020403401413302112
- 033203120011110011132251145135331144533354253453463224233644324632453434135523253300131220303213123
- 320111230330142103134512313345346434643654336344264466663434525446644113511452351451422214014013322
- 001132233321313303345535112443242622242446334234425332545346556362543355243332135453212444110331303
- 112033313244310423153325243233225655536462366623456645652435535435325433454445524512423111021132122
- 313313043314211444453212142362452645555543222645663664243443432442223333565131234141351344321344102
- 131230133213133211232332525334634543566623665537334334547734623265434432455254451425235432443212211
- 033344041000113254352455455346236225633465644343664557364344535543336532242444234311533433344140212
- 213210413044552341333323656654354424366446744766744473434577534775255332236334522521333331002022121
- 223112203001555435245233523555243667443447767433564533557556755677732432236462355155425414244240300
- 031112340101154335334634566542526467535374465476634474475365364377737233444423444335143215320411041
- 010203132113252122424352345322745777347553756767766736766655557657446763326426264545545441510322304
- 321034434351253424555342636457546533636345766763737363536656637564757633453436366225532223151301123
- 140333103113245552456543556436376775537436555564765867677377566536736367466446544545111231522432042
- 344202325543255413523362252766476773354345756567775846446585764655346457333656245566142114252141442
- 300442033331415536626644654454735373634646576484854768867856765345656633644236246242335514321313432
- 422444251112412665556253554536437336675554766648744646768865576456545754676632532244262315154431312
- 202304543452455552253665657746647784558765457564785778845788767784833536336745445354462312521531440
- 443202253112536253525354345435633886668445868754667447674764886554756567546737654246334325241222041
- 444423415155442365223265743454556684558776766888858567565767784775755635475565754224462452335222241
- 344303321125225553466564654375755674684544768955877976656855558645744675543644552655335222244234041
- 300235531322254555657355344757787845684787759755989576658884775746464854347454745445252251123331200
- 202355355135453623555734775437867546864765789685787875887555685885564677653753475626332543431524440
- 123112125155234436477477667347767767746589595765887578895688659457644647637353775542533353231324344
- 410231223354354564265577744565557576558859695696978987776856795557766747576576743622336235154122541
- 144345221145432366464547578854445477995896778965569886979678656986544557875776343376245336222211154
- 041355524153432432536456778856655655586558689789676558987567866689878584574356765462664355555422315
- 043213424536224446535754387584686658555998969679778967988975666897764557557733673744622262412325233
- 101514245332544663477377677875765977975768579996797978899567698975768865784644537776543454651544223
- 055515332353232236436447686544477656596959996666689896787797795969665874555543664764442344265232243
- 222545542226664544634434558757485778565956766669899769668998978795896868888674777634532432531545351
- 434314333334362377634654477865886799965779778887799678789966958767788684856666356767346645644343444
- 052335546342344533746576644847456965678786776877897777697767787998596844688878543443425354265524523
- 245321436235332754756734464668569895557967788998689969678678888859577664555777765333674636253522234
- 222511135542326767344777655475586999669889777967697967976779776769789666884457455657536456246131555
- 254433214252433545454764655656756765598866789679798998989699886966798756574757563674433652342254411
- 252443455634345774563668584548569877777679776897897977978768868758769758655687433345452443435424512
- 312151563634655557774676587765775678576967989777779888989698876657887877756744456665655635556644123
- 255315424526333665355778666668586665799969869877998777889777988668875966868565465457776522236513141
- 141324353246555364776377784867669969887687879788978777778977696768597689744655653757436644265454325
- 354554356562633675467576477485995977969979699799889979879876989688558895876557644555777244452335314
- 235324556262356365436555887646778779897999678779989989789867689977685966845857674434347554655643252
- 413432246554227346473675665849975567696667989798798778788967877675576875667875866434546262246521543
- 552324452542255347547654567456656665796776679978889979999797899897878689747764654756336634422352455
- 132142446224635664776385465487598668797987978789877989998967699965559668558447437465553652345225512
- 535121326642222474774354544766768756799778998798789898877898889965958696446887843476762526426515244
- 345151122435326774546477755588766796667978679897798799788798667756596585444845757774352236466242124
- 324135422245435777577646446776855665599676997689997887788889876766665986567668467764463526524522524
- 325343515546653536653454765454579566578777977788879878787979966579696677474785343347473444324354355
- 411221244324436736446567757755797766577698989699898679769679676797557885877546755664674522365314215
- 011225512566433343766434774658485575577887896689896789789788897667989867646846655537445534555245154
- 353122224246523453336574684477667558859686788676888887889677967668868867745484457553323245424151214
- 025211533334552466553436874465855779555988968677869768998666855765958765844553645533522566662215435
- 011144555564545656657564766665457958988879979779789696768889888785895588848586367454333255641115431
- 312135513646235366335766645784546897755855986679986669787888667577687576776674647476324553225412153
- 401131435555652456777737485558685475567889776796686996966887777867565457675674635564364663332115334
- 111542111546535443776533554556858445867565786988765999858788986988467667765674337645225253433114412
- 324152522543244453747533764587454556659676798855686758699569787576577568846344576564242526335344431
- 123513525116652325364735577676854466795879775965858579978758766786788576585574533555234644544424444
- 201422231514666656435556464744556487779676697575668797755696587875664885475643663462362633532152224
- 443133412441244332664735557756557478667877999697777576977768645754645558333564346654626425334525344
- 431015242443666335263335435575686474856864565688697865686896558787678553436564534565256645251434512
- 010022255222133364253766673665475577467776484765858776654564844676776444447654375652434614143215022
- 112002141144134663334274465647734767886457477454887888474577867446657475453544742245245225443332224
- 331232153352336525225567445365565486747774487468877475878758554778586376763333443326544225345123013
- 320123541455416433363426343365775545857885758565575848877877686547673556675754423464442514232324111
- 042432343324232554524246554574474345666464658776446546567878767443577744556362465553665411142432422
- 142111123322431534522545253754364545474457775847846786887674646573467346333352524442333115335223141
- 344133332441235422454233333556736343777476764657687856476465776533456554442553426542432524345343333
- 200031013552112555654336435633347655674473538755855765665344475745556736546535462654344221551230302
- 304022204315531423544354645467655764773637456746376536645753764476654735362436623665431353330033320
- 001214000225135351445433524663673656735567443667544556374445736766637732424362445435124235202421144
- 133240444115255522316642262344554645657446334644647444534543345455733253453543223511253231133210321
- 324313341004114352115254632235242543363566666546735757746734646346355536356645334223223155213043334
- 322012103401425423541123244634634342577565467364645454366476547536536356344363313411143511003322321
- 030233343013121433455142565364335554237444577544465747334546363663525346435245514412331312412441220
- 210201421410133422542335534522343332455655473755663556635632662655563553445642432325453033042340112
- 012224401212432145413124536446542562653225343456763356434464356455233544345355532151231212104022112
- 312232323430402414252325451525553345425256326265324326656464322435443535213233315511433100124021321
- 010230232102113031224241215434543254266544664634225463436365465636465234441113521431122331212121101
- 212212302203143433332245352152333246623456656325435343642442543354454522241344343333411433411331230
- 011102200023414304323524211214225553365332454633645434256444354263245252314454334421304444012133303
- 120113010124021413002342554241434235565233233626345455655236425423152444344321441224210011210001020
- 101033322321412021400115241224135351431466535533654236552223322311141154321444212340220200110122301
- 011220031300131001424314223221135334414132553352224226351421342145342332444324224232200001102210233
- 121312303322224212003013214154522352135431322413434142221234334123523122531033230010321012211132201
- 012020110022314203102101331443513341244141113213442111455332441213534235144341443443042312110221221
- 100013222332201123334301101412554224524144445454322353452424512151232340130231214403422202221333120
- 211200011012011223124042241233103554151124335225451435512351451314113131210120200021021301331230211
- 222211000301233212310103403144201411351211113145331241322345244155131304344032001313100223022021012
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Days/Day9.cs b/Days/Day9.cs
deleted file mode 100644
index 13c0007..0000000
--- a/Days/Day9.cs
+++ /dev/null
@@ -1,2149 +0,0 @@
-using Spectre.Console;
-
-namespace AdventOfCode.Days;
-
-public class Day9 : Day
-{
- public override int Number => 9;
- public override string Name => "Rope Bridge";
-
- public override void RunPart1(bool display = true)
- {
- // Start
- (int x, int y) start = (0, 0);
- var headPosition = start;
- var tailPosition = start;
-
- var tailVisitedPositions = new HashSet<(int x, int y)> { tailPosition };
-
- // Do head movements
- foreach (var line in Input.ReadAllLines())
- {
- var split = line.Split(' ');
- var direction = split[0];
- var count = int.Parse(split[1]);
-
- // Do the movement in direction 'count' times
- for (int i = 0; i < count; i++)
- {
- var oldHeadPosition = headPosition;
-
- // Move the head
- headPosition = direction switch
- {
- "U" => (headPosition.x, headPosition.y + 1),
- "D" => (headPosition.x, headPosition.y - 1),
- "R" => (headPosition.x + 1, headPosition.y),
- "L" => (headPosition.x - 1, headPosition.y),
- _ => throw new ArgumentOutOfRangeException(nameof(direction))
- };
-
- // Check if the tail is too far away
- if (Math.Abs(tailPosition.x - headPosition.x) >= 2
- || Math.Abs(tailPosition.y - headPosition.y) >= 2)
- {
- // Move the tail
- tailPosition = oldHeadPosition;
- tailVisitedPositions.Add(tailPosition);
- }
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
- }
- }
-
- public override void RunPart2(bool display = true)
- {
- const int tailSegments = 9;
-
- // Start
- (int x, int y) start = (0, 0);
- var headPosition = start;
- var tailPositions = Enumerable.Repeat(start, tailSegments).ToArray();
-
- var tailVisitedPositions = new HashSet<(int x, int y)> { start };
-
- // Do head movements
- foreach (var line in Input.ReadAllLines())
- {
- var split = line.Split(' ');
- var direction = split[0];
- var count = int.Parse(split[1]);
-
- // Do the movement in direction 'count' times
- for (int i = 0; i < count; i++)
- {
- // Move the head
- headPosition = direction switch
- {
- "U" => (headPosition.x, headPosition.y + 1),
- "D" => (headPosition.x, headPosition.y - 1),
- "R" => (headPosition.x + 1, headPosition.y),
- "L" => (headPosition.x - 1, headPosition.y),
- _ => throw new ArgumentOutOfRangeException(nameof(direction))
- };
-
- // Move each segment of the tail if needed
- for (int tail = 0; tail < tailSegments; tail++)
- {
- // Check if the tail is too far away from previous segment
- var tailPosition = tailPositions[tail];
- var previousTailPosition = tail > 0 ? tailPositions[tail - 1] : headPosition;
- var dx = previousTailPosition.x - tailPosition.x;
- var dy = previousTailPosition.y - tailPosition.y;
-
- // Don't move the tail if it's still next to previous tail
- if ((Math.Abs(dx), Math.Abs(dy)) is not ((>= 2, _) or (_, >= 2)))
- {
- continue;
- }
-
- // Move the tail segment
- tailPositions[tail] = (dx, dy) switch
- {
- // Top right
- (>= 2, >= 1) or (>= 1, >= 2) => (tailPosition.x + 1, tailPosition.y + 1),
- // Top left
- (<= -2, >= 1) or (<= -1, >= 2) => (tailPosition.x - 1, tailPosition.y + 1),
- // Bottom right
- (>= 2, <= -1) or (>= 1, <= -2) => (tailPosition.x + 1, tailPosition.y - 1),
- // Bottom left
- (<= -2, <= -1) or (<= -1, <= -2) => (tailPosition.x - 1, tailPosition.y - 1),
- // Top
- (_, >= 2) => (tailPosition.x, tailPosition.y + 1),
- // Bottom
- (_, <= -2) => (tailPosition.x, tailPosition.y -1),
- // Right
- (>= 2, _) => (tailPosition.x + 1, tailPosition.y),
- // Left
- (<= -2, _) => (tailPosition.x - 1, tailPosition.y),
- // Impossible to get there
- _ => throw new Exception("How did you get there")
- };
-
- // Visit positions for the tail end (9)
- if (tail == tailSegments - 1)
- {
- tailVisitedPositions.Add(tailPositions[tail]);
- }
- }
- }
- }
-
- if (display)
- {
- AnsiConsole.MarkupLine($"[green]The tail visited [yellow]{tailVisitedPositions.Count}[/] unique positions[/]");
- }
- }
-
- #region Input
-
- public const string Input =
- """
- L 1
- D 2
- U 1
- L 1
- R 2
- L 2
- U 1
- D 2
- R 2
- L 2
- U 1
- D 2
- R 1
- D 2
- L 2
- D 1
- L 2
- R 1
- U 2
- R 2
- U 2
- L 2
- U 1
- L 2
- R 1
- D 1
- R 1
- L 1
- R 1
- L 1
- R 1
- U 1
- R 1
- L 1
- D 2
- L 2
- D 2
- L 1
- R 1
- D 1
- R 1
- D 2
- L 1
- D 2
- L 1
- R 2
- D 2
- R 2
- U 1
- R 1
- U 2
- R 1
- U 2
- R 1
- D 2
- L 1
- D 2
- U 1
- R 2
- D 2
- L 1
- U 2
- R 2
- L 2
- D 2
- L 2
- D 2
- R 1
- U 2
- L 2
- U 1
- R 1
- D 1
- L 1
- D 1
- U 1
- D 2
- L 1
- R 1
- D 1
- R 1
- L 2
- R 1
- L 1
- U 2
- D 2
- U 1
- L 1
- U 2
- R 1
- D 2
- U 1
- D 1
- L 1
- D 2
- U 2
- D 1
- U 2
- R 2
- L 2
- D 1
- R 2
- D 1
- L 2
- D 2
- L 2
- R 1
- L 1
- R 2
- L 2
- R 2
- U 1
- R 1
- U 3
- D 2
- U 3
- L 1
- R 1
- U 3
- D 1
- L 1
- R 3
- D 2
- L 3
- R 3
- D 2
- R 2
- U 3
- R 3
- U 3
- R 2
- U 3
- D 2
- L 3
- U 3
- R 1
- U 1
- R 3
- U 2
- L 1
- R 1
- U 1
- L 3
- R 3
- U 3
- D 2
- U 1
- L 1
- D 3
- R 3
- U 2
- L 1
- R 3
- L 3
- D 3
- U 3
- R 2
- L 1
- U 1
- L 3
- R 3
- U 1
- R 3
- L 2
- R 2
- D 3
- U 1
- D 3
- U 3
- R 3
- D 2
- L 2
- U 2
- D 3
- L 3
- U 3
- R 3
- D 2
- R 3
- U 1
- D 1
- U 2
- R 1
- D 3
- R 1
- L 2
- U 3
- D 1
- L 1
- D 3
- U 2
- L 3
- R 3
- L 1
- D 2
- L 3
- U 3
- L 1
- D 2
- L 1
- D 1
- L 2
- U 2
- D 2
- U 2
- L 2
- D 3
- L 3
- D 3
- R 3
- U 1
- R 3
- U 1
- R 3
- D 3
- U 2
- D 1
- R 2
- L 2
- R 2
- D 2
- R 2
- D 1
- R 3
- D 1
- U 2
- L 4
- D 1
- L 2
- R 1
- U 1
- D 3
- U 4
- D 2
- L 3
- R 2
- D 3
- R 4
- U 1
- D 1
- U 1
- L 3
- U 1
- D 3
- R 3
- D 3
- R 1
- U 4
- R 1
- U 1
- R 2
- L 4
- U 3
- D 2
- R 2
- D 1
- U 2
- L 3
- D 4
- U 4
- D 4
- U 4
- L 3
- U 3
- D 3
- R 3
- L 4
- R 3
- D 2
- L 2
- R 1
- D 1
- L 4
- R 3
- D 2
- U 1
- L 2
- R 1
- U 2
- L 4
- R 4
- L 3
- U 4
- D 2
- U 4
- D 4
- L 1
- U 4
- L 3
- U 2
- D 2
- R 2
- D 3
- R 4
- D 1
- U 4
- D 1
- U 1
- D 3
- L 3
- D 2
- R 4
- D 4
- L 2
- U 2
- L 3
- R 4
- L 2
- R 2
- D 3
- L 2
- D 4
- U 3
- D 4
- L 3
- R 2
- U 3
- D 4
- R 2
- U 3
- R 1
- D 1
- R 1
- D 2
- R 3
- D 4
- L 1
- U 3
- L 3
- U 4
- R 1
- U 3
- L 4
- D 5
- R 2
- D 2
- U 2
- D 1
- R 4
- D 1
- L 4
- D 4
- L 1
- R 1
- D 4
- U 4
- L 1
- D 4
- L 4
- U 5
- R 4
- D 4
- R 5
- U 3
- L 5
- U 1
- R 4
- L 1
- R 3
- L 2
- D 5
- R 1
- D 4
- R 2
- U 5
- L 3
- R 5
- U 4
- R 1
- D 4
- U 3
- R 3
- L 3
- R 3
- L 3
- U 2
- D 4
- U 2
- L 3
- D 2
- R 3
- U 3
- D 2
- U 1
- R 5
- L 4
- R 4
- L 4
- D 3
- R 3
- U 2
- R 1
- D 3
- U 3
- D 2
- L 1
- D 2
- U 1
- L 3
- U 5
- L 1
- D 1
- U 5
- D 3
- U 4
- D 4
- L 5
- R 3
- D 4
- R 2
- L 1
- D 1
- L 3
- U 3
- R 1
- L 2
- D 4
- L 5
- U 1
- L 4
- R 4
- U 2
- D 1
- R 5
- D 3
- U 2
- D 3
- U 4
- D 4
- U 1
- L 2
- D 4
- L 3
- U 4
- L 1
- R 1
- L 2
- R 3
- L 2
- U 1
- D 2
- U 5
- R 2
- D 4
- U 1
- D 4
- U 4
- D 5
- L 6
- D 3
- U 2
- D 1
- L 3
- U 4
- R 4
- D 4
- R 3
- L 4
- U 6
- D 1
- U 4
- R 2
- L 1
- D 2
- U 4
- D 5
- U 3
- D 6
- L 1
- U 3
- L 1
- U 1
- D 6
- L 3
- U 6
- L 3
- D 6
- L 1
- D 6
- U 2
- D 5
- U 2
- L 5
- D 3
- U 2
- D 1
- U 6
- L 1
- D 4
- L 6
- R 3
- D 3
- L 3
- D 2
- R 3
- D 5
- R 3
- D 2
- L 1
- R 4
- L 6
- D 4
- R 4
- U 1
- R 6
- D 3
- U 1
- R 1
- D 1
- L 3
- D 1
- R 3
- U 5
- L 5
- D 2
- L 3
- D 2
- L 5
- U 3
- L 1
- U 5
- L 3
- D 4
- U 5
- D 1
- L 6
- D 1
- R 6
- U 4
- R 1
- D 1
- L 2
- U 5
- R 2
- U 6
- L 5
- U 5
- L 6
- U 6
- D 3
- L 1
- R 3
- L 3
- U 4
- R 5
- L 6
- D 5
- L 4
- R 6
- L 6
- R 5
- D 2
- R 4
- L 2
- U 1
- L 3
- U 6
- L 4
- D 6
- U 6
- D 4
- L 2
- R 7
- U 4
- R 1
- L 5
- D 2
- R 3
- U 4
- L 5
- U 7
- L 2
- R 1
- U 4
- L 2
- R 5
- L 6
- D 5
- L 4
- U 5
- L 7
- U 1
- L 5
- U 1
- L 5
- D 3
- U 3
- R 7
- U 7
- R 7
- L 6
- D 4
- U 7
- R 2
- D 3
- R 3
- U 4
- D 4
- U 5
- D 6
- L 5
- R 6
- U 4
- R 6
- D 1
- R 4
- U 1
- D 1
- R 1
- L 4
- U 5
- L 3
- D 5
- L 5
- D 3
- U 2
- R 5
- D 7
- U 7
- D 1
- U 5
- R 6
- U 4
- R 6
- L 7
- U 5
- R 1
- L 1
- U 1
- R 1
- D 7
- L 2
- U 5
- R 4
- U 2
- D 6
- U 6
- L 7
- U 3
- D 2
- L 3
- R 3
- U 2
- L 1
- R 2
- L 5
- D 6
- R 2
- U 6
- L 1
- D 7
- R 4
- D 3
- L 2
- U 5
- R 4
- L 2
- R 5
- D 1
- U 1
- R 6
- D 5
- U 6
- R 2
- U 2
- L 2
- U 6
- L 5
- U 1
- L 1
- D 7
- R 6
- U 5
- D 3
- L 5
- R 3
- D 3
- U 2
- D 7
- U 7
- L 1
- D 5
- L 5
- U 4
- L 5
- D 1
- U 6
- D 5
- L 7
- D 8
- U 8
- R 6
- U 5
- D 8
- U 1
- R 2
- U 6
- D 6
- L 4
- D 2
- R 3
- U 7
- R 4
- U 4
- R 5
- U 6
- R 1
- U 4
- R 1
- U 4
- D 5
- U 3
- L 7
- U 8
- R 1
- D 1
- U 8
- L 8
- U 3
- L 1
- D 4
- R 2
- D 4
- U 2
- L 4
- D 8
- R 7
- D 5
- U 4
- L 5
- U 5
- D 8
- R 8
- U 3
- R 8
- L 4
- U 5
- R 6
- U 7
- D 3
- L 1
- U 5
- D 2
- R 5
- U 4
- D 8
- L 4
- R 1
- D 6
- R 1
- L 6
- D 6
- L 7
- D 4
- L 4
- D 8
- R 8
- D 7
- L 6
- R 1
- D 4
- L 5
- D 2
- U 3
- D 2
- U 6
- R 1
- U 7
- D 7
- R 2
- U 7
- D 5
- L 6
- U 1
- L 8
- U 1
- L 1
- R 9
- D 1
- U 6
- D 5
- L 1
- R 9
- D 2
- L 2
- D 6
- U 6
- D 7
- L 3
- R 5
- L 6
- U 5
- R 1
- U 1
- R 3
- L 9
- U 6
- L 6
- U 2
- D 6
- R 9
- U 4
- D 3
- L 8
- U 5
- D 7
- L 1
- U 7
- R 1
- L 6
- D 8
- L 5
- R 7
- L 2
- R 6
- L 5
- D 3
- L 8
- D 7
- U 8
- R 6
- L 6
- D 7
- U 8
- D 1
- U 2
- D 5
- U 7
- D 8
- L 1
- D 1
- L 1
- U 1
- R 3
- L 5
- R 9
- D 2
- L 8
- R 6
- D 6
- U 1
- R 7
- L 4
- U 4
- D 1
- L 5
- U 2
- R 9
- D 7
- U 8
- L 8
- R 4
- D 1
- L 1
- U 7
- R 8
- L 3
- D 2
- U 8
- R 1
- D 5
- L 1
- R 7
- D 6
- R 2
- U 9
- D 2
- L 5
- U 4
- D 9
- L 7
- D 9
- L 2
- U 9
- D 5
- L 7
- D 6
- U 5
- D 9
- R 3
- U 8
- L 7
- U 1
- L 3
- U 3
- D 1
- L 6
- R 9
- U 2
- L 7
- R 9
- U 5
- R 2
- L 3
- R 4
- D 9
- L 4
- R 9
- U 4
- L 10
- R 9
- D 9
- U 10
- L 2
- R 4
- U 4
- R 9
- D 2
- R 1
- L 4
- R 7
- D 3
- L 6
- U 1
- L 9
- D 6
- U 10
- D 1
- R 10
- D 9
- L 6
- D 10
- U 3
- R 10
- L 8
- U 9
- D 1
- L 1
- D 10
- L 1
- D 5
- L 9
- U 3
- L 4
- U 4
- D 1
- U 3
- R 7
- L 3
- R 3
- L 3
- R 8
- D 9
- R 4
- L 6
- D 7
- R 10
- U 6
- R 2
- D 2
- L 3
- R 9
- D 9
- U 7
- D 2
- R 6
- U 10
- R 8
- U 5
- R 5
- U 10
- R 6
- U 7
- L 7
- U 7
- D 4
- L 9
- U 2
- R 7
- L 8
- R 4
- L 1
- U 9
- R 8
- D 4
- R 5
- D 4
- L 1
- D 10
- R 8
- D 10
- U 9
- D 3
- R 1
- U 10
- R 1
- D 10
- R 1
- L 6
- D 3
- U 8
- R 4
- U 9
- D 8
- U 3
- D 2
- R 3
- L 5
- U 4
- L 3
- R 4
- D 6
- L 9
- R 1
- D 9
- R 2
- D 11
- R 8
- D 5
- R 8
- L 2
- D 2
- L 7
- U 11
- D 10
- L 6
- R 2
- U 9
- L 10
- D 4
- L 5
- R 7
- D 4
- L 1
- U 3
- L 9
- D 7
- R 4
- D 10
- L 5
- U 9
- L 10
- D 5
- L 11
- R 11
- U 8
- R 11
- U 2
- R 7
- L 10
- R 2
- D 8
- L 2
- D 8
- R 11
- L 6
- R 3
- L 2
- U 2
- R 2
- U 3
- D 3
- U 5
- L 8
- U 9
- R 10
- D 1
- U 4
- D 8
- R 3
- D 11
- R 4
- D 4
- R 7
- U 6
- L 11
- U 11
- D 8
- L 5
- R 2
- L 11
- U 7
- D 5
- U 5
- D 9
- L 2
- U 3
- R 10
- U 1
- R 1
- L 11
- D 3
- L 5
- R 2
- L 10
- R 4
- L 1
- U 1
- L 4
- R 5
- U 2
- D 6
- R 11
- U 8
- D 5
- R 5
- D 3
- L 2
- U 7
- D 10
- L 11
- D 10
- U 11
- R 8
- L 2
- D 9
- R 9
- L 11
- R 10
- U 3
- R 4
- L 5
- R 12
- U 5
- D 5
- L 6
- D 11
- R 8
- D 12
- U 6
- L 10
- R 9
- U 1
- L 12
- D 1
- R 8
- U 9
- D 9
- R 6
- D 3
- L 1
- R 3
- L 8
- R 6
- U 12
- L 1
- U 8
- D 7
- U 5
- D 12
- L 4
- R 11
- U 9
- D 12
- R 8
- D 2
- R 7
- U 8
- R 10
- U 3
- R 4
- D 4
- U 9
- R 7
- L 9
- R 7
- U 8
- L 9
- U 6
- R 4
- L 11
- D 11
- R 6
- U 2
- D 1
- R 2
- L 2
- D 11
- R 5
- U 1
- R 1
- D 3
- U 2
- L 3
- U 12
- R 10
- U 12
- R 9
- D 11
- U 9
- L 2
- R 7
- U 5
- R 7
- U 9
- R 3
- D 4
- L 9
- D 4
- R 12
- L 3
- U 12
- L 9
- U 3
- L 11
- R 7
- U 11
- D 2
- L 11
- R 2
- L 12
- U 10
- L 6
- R 8
- D 6
- R 12
- L 7
- R 4
- U 5
- D 10
- R 8
- L 11
- D 4
- U 1
- R 9
- U 12
- D 3
- L 10
- R 11
- U 1
- L 5
- U 11
- L 7
- U 1
- D 13
- U 10
- L 12
- U 9
- D 8
- L 5
- R 4
- L 1
- R 2
- L 7
- D 1
- L 11
- U 9
- R 5
- D 12
- L 4
- U 7
- L 6
- R 7
- U 1
- L 7
- U 2
- D 4
- R 4
- D 7
- L 3
- D 9
- U 3
- D 3
- U 12
- R 2
- L 12
- R 9
- L 8
- D 10
- U 1
- R 11
- L 13
- U 1
- D 3
- U 12
- L 3
- R 7
- L 7
- D 7
- U 7
- D 7
- U 10
- D 1
- L 7
- D 11
- R 3
- D 6
- R 9
- D 5
- U 12
- D 6
- R 8
- D 3
- R 7
- L 6
- D 10
- U 8
- R 9
- D 4
- R 9
- D 2
- U 4
- R 4
- U 7
- L 12
- R 2
- D 10
- U 13
- R 12
- L 12
- D 1
- R 11
- L 2
- U 13
- L 12
- D 7
- L 2
- U 4
- L 4
- D 8
- L 9
- R 3
- D 4
- L 9
- U 9
- L 9
- R 10
- L 4
- R 4
- U 10
- L 11
- D 8
- U 8
- L 13
- R 1
- L 8
- U 13
- L 9
- U 1
- R 13
- U 7
- L 3
- R 8
- L 1
- D 5
- R 7
- U 8
- D 5
- L 12
- R 11
- U 11
- D 10
- U 5
- R 6
- D 11
- R 1
- D 1
- R 9
- L 8
- D 4
- L 11
- U 9
- D 4
- U 3
- D 13
- U 13
- L 6
- D 6
- R 11
- L 9
- U 3
- R 7
- D 9
- R 5
- L 9
- D 14
- R 8
- L 14
- R 6
- L 6
- U 6
- R 7
- L 11
- R 1
- L 6
- D 10
- R 1
- D 14
- R 12
- U 4
- R 2
- L 9
- R 14
- L 3
- D 9
- U 10
- R 11
- L 5
- R 14
- U 3
- D 8
- R 9
- L 13
- U 4
- L 2
- R 4
- D 6
- L 13
- D 4
- R 2
- L 2
- D 10
- L 10
- R 4
- D 2
- R 2
- U 6
- D 7
- U 12
- R 5
- U 13
- L 6
- U 12
- L 3
- D 11
- R 3
- L 7
- U 11
- D 4
- L 13
- U 14
- R 10
- D 12
- U 2
- L 1
- U 12
- D 6
- U 2
- R 12
- L 3
- D 9
- U 9
- R 14
- L 12
- R 5
- L 11
- R 11
- L 5
- R 2
- L 4
- D 8
- U 3
- R 4
- D 12
- R 10
- L 10
- D 10
- U 10
- R 9
- L 14
- R 3
- L 1
- D 1
- R 15
- D 15
- R 12
- L 15
- D 12
- L 10
- R 3
- U 14
- D 4
- U 7
- R 11
- L 10
- U 4
- D 15
- L 3
- U 1
- R 2
- L 15
- U 6
- L 6
- D 3
- L 14
- D 12
- U 1
- L 15
- R 13
- U 7
- D 6
- R 11
- U 7
- L 2
- D 11
- L 1
- R 7
- D 1
- L 4
- R 11
- U 5
- L 4
- R 13
- U 1
- D 4
- L 6
- R 10
- L 15
- U 7
- D 9
- L 10
- R 8
- U 10
- D 8
- L 14
- D 15
- R 14
- U 10
- D 4
- U 6
- D 2
- R 6
- L 6
- D 4
- U 12
- L 3
- R 6
- U 9
- R 3
- U 11
- R 3
- U 15
- D 1
- U 2
- D 3
- U 11
- L 3
- U 2
- L 14
- D 3
- R 9
- D 5
- L 10
- U 7
- L 6
- D 8
- L 8
- U 8
- L 14
- R 9
- L 14
- U 10
- L 8
- U 5
- L 2
- U 4
- D 5
- R 2
- L 1
- U 14
- R 3
- L 4
- U 9
- D 7
- U 14
- D 11
- R 9
- U 5
- R 8
- L 5
- U 3
- D 8
- R 8
- L 11
- R 7
- L 3
- D 16
- L 11
- U 7
- D 6
- R 5
- L 4
- U 9
- L 12
- R 9
- L 10
- D 13
- L 3
- D 13
- U 6
- R 14
- U 2
- L 5
- R 4
- L 15
- U 9
- D 5
- L 6
- R 7
- U 10
- L 3
- D 5
- U 8
- D 12
- L 11
- U 14
- D 12
- U 2
- D 9
- U 11
- D 5
- L 5
- R 10
- L 14
- U 1
- R 8
- D 5
- R 6
- U 6
- L 3
- U 11
- L 8
- R 3
- U 5
- L 1
- R 16
- D 10
- U 12
- R 11
- D 2
- U 4
- D 15
- U 16
- D 2
- L 9
- R 10
- L 3
- U 8
- R 13
- U 11
- D 12
- U 15
- D 1
- L 14
- R 3
- U 13
- D 7
- R 15
- L 3
- R 1
- U 7
- R 6
- D 12
- L 2
- R 13
- D 3
- R 6
- D 10
- U 2
- R 4
- D 12
- L 7
- R 7
- L 8
- R 14
- L 15
- D 8
- L 6
- U 14
- L 16
- U 10
- D 7
- R 6
- D 12
- R 16
- U 11
- R 2
- U 10
- L 1
- R 6
- U 14
- D 13
- U 7
- L 10
- D 4
- L 7
- R 11
- U 17
- D 6
- U 6
- R 6
- U 12
- L 16
- U 5
- R 15
- L 17
- D 13
- U 12
- L 1
- D 7
- L 13
- R 7
- U 2
- L 5
- U 12
- R 10
- U 7
- R 11
- U 17
- D 15
- U 15
- L 10
- D 3
- L 15
- U 8
- R 8
- D 10
- L 9
- U 6
- R 9
- L 1
- U 5
- R 6
- L 11
- D 17
- L 7
- U 3
- D 17
- R 17
- U 8
- L 15
- R 3
- D 2
- U 17
- L 1
- R 13
- U 13
- L 10
- R 2
- D 12
- L 12
- R 13
- L 14
- R 16
- D 12
- R 4
- U 14
- L 15
- R 10
- D 7
- R 12
- U 6
- L 8
- U 7
- R 1
- D 3
- R 3
- L 11
- D 2
- R 15
- U 17
- L 13
- U 17
- D 4
- U 11
- L 17
- D 12
- R 3
- L 12
- U 8
- D 2
- L 14
- U 16
- D 6
- U 7
- L 12
- R 17
- L 7
- D 1
- L 16
- D 16
- R 17
- D 5
- U 16
- D 2
- L 13
- U 9
- D 13
- R 3
- U 1
- D 12
- R 4
- D 11
- L 8
- D 8
- R 13
- D 16
- R 1
- D 10
- R 18
- U 6
- D 4
- U 17
- R 12
- L 14
- U 5
- L 15
- U 18
- R 4
- D 17
- L 4
- R 18
- U 18
- D 4
- L 1
- U 4
- L 2
- U 17
- R 16
- L 7
- U 10
- R 11
- U 9
- R 11
- L 16
- U 3
- R 3
- L 18
- U 8
- R 1
- U 1
- L 5
- U 5
- D 7
- L 1
- R 2
- U 16
- R 17
- D 4
- U 16
- L 12
- R 3
- L 16
- D 5
- U 5
- R 18
- L 7
- U 1
- L 7
- U 16
- R 14
- L 4
- R 13
- L 3
- U 4
- L 11
- U 3
- L 12
- U 16
- L 14
- U 3
- L 9
- R 18
- D 8
- L 15
- R 10
- D 2
- L 13
- D 11
- U 4
- L 13
- D 7
- L 12
- U 7
- D 17
- U 9
- D 5
- L 10
- R 2
- D 7
- L 14
- U 10
- D 17
- L 3
- R 17
- U 16
- D 13
- R 13
- U 14
- R 9
- L 3
- U 14
- L 7
- U 4
- D 1
- R 18
- U 11
- D 9
- U 8
- R 15
- L 5
- D 9
- L 2
- D 18
- U 12
- D 3
- U 14
- D 9
- U 13
- R 16
- U 8
- R 16
- U 4
- L 8
- D 14
- R 15
- D 6
- R 17
- U 6
- D 1
- L 2
- U 9
- D 15
- L 7
- D 3
- R 1
- L 1
- R 17
- D 12
- R 19
- U 4
- R 19
- L 2
- D 17
- U 11
- D 1
- L 9
- R 18
- L 7
- D 13
- U 6
- D 16
- L 6
- R 13
- U 12
- R 1
- L 2
- U 8
- L 16
- R 10
- D 15
- R 5
- L 1
- U 5
- R 18
- U 1
- R 4
- U 14
- R 3
- L 4
- U 13
- D 14
- L 10
- D 7
- U 3
- R 17
- L 19
- R 1
- D 12
- L 9
- U 19
- D 19
- L 5
- R 10
- L 14
- U 15
- D 19
- U 18
- D 14
- R 11
- U 8
- R 2
- U 16
- L 17
- D 6
- L 1
- D 10
- R 18
- U 5
- R 14
- U 10
- D 6
- L 17
- D 6
- U 7
- R 14
- L 1
- U 3
- D 3
- R 18
- D 1
- L 6
- D 18
- L 2
- R 10
- L 9
- R 10
- L 14
- R 15
- U 10
- """;
-
- #endregion
-}
\ No newline at end of file
diff --git a/Inputs/Day1.txt b/Inputs/Day1.txt
new file mode 100644
index 0000000..239b44b
--- /dev/null
+++ b/Inputs/Day1.txt
@@ -0,0 +1,1000 @@
+five3onelxjninenine45
+six9mnfjmtsf2kfmznkxntninesevenrpmfjfpgsk
+9vkrmbpnine5two5cbktwo6
+one1bdr6
+ksvctznmffourtwovbb9four5five
+6nfhcklxlkg9jbqmqrrxmhn9two6
+9eight2six97dkth
+sixgjqm64dkvcccvttnts
+twofivefourb5four
+gfive2
+two18twocsxffivetwo4
+rmchfml6four6twofive
+278eight
+six5758jjqpgnvlztwolkcvxtjphd4
+fourz26ninethree8fourxrjlq
+mhpx31fznvh6nnjbvjt6seven
+kscs7kfvb1three2vnfjrtlvb
+mcrxqxcxgq3eight9
+17eightone8ninebshqmfd
+1sgtxeightsix9
+96threeninetwo
+five963fivexfgfgfbzrjjfive6
+5993zkdnfm
+1xnfxsqhninefour3eight
+hplgtxvbfqrthreeonefour7
+84cclxfjrhptnfbcpd2
+nineeight2kslgcchdxjppkthreeqhhs
+5txpzlsixtwo41
+4nbkjmrt4nine
+hnmvzknine1
+6525szrz
+1sixsixkxjxcbt1
+5vlj26mfxdjzb
+9xzkgd6eight9thjcjrsxggvkf2
+2tlvqgrkc42
+one4five
+5six439eightsevenkkvng
+hvmmqonethreezhvmzltf5seven9ttdx
+6eight6
+hzpqtnjxz4cbkhqphlfpfourqflfjtg4mrztjlhbmmnine
+sixsixdxcvbmr8bpbvfour6seven
+nine3eight
+8nqmbzvgpslsevenbfcrgqbtrzk
+two7six2fourfourscrnine
+7dr3hhqnvrdsljqrl
+529dssfsfknzrffqsixtwo
+8sixsmcbslxvlxrkmhxhvgvvrgsixpgthrxlhrmfour
+svqsjtlbdbkgjqbcvxhl4five
+x8sevensix65eight
+fsonemmszxjjx6nineteightvtzkhccgrm
+6sevenseven38cmskxvdkqlxktsszfnine
+75eightfjbqhksix3onextmlrftdxm9
+5hmngnfrglninenthconesixnine7
+hgk4sevensixnineoneszsnhthree9
+one98nxtghg9
+1sevenkqqckgxdnfour
+16three2onekjfcmfdfvhgmgninetwo
+1eight3fivesix87five
+2fourlhtncqs8gqssxlxczfive
+ninejvzjqppsix21
+mkrd7249eight1pm
+ppcxsevensevenxbjbvvzcd8one3ms
+eightgnnlfive3ff49seven
+fngf62fourfivetwothree
+onefour42rrzntqts
+41dzvh1
+3onefqltjzdrfourcpkfhceightwomc
+7ninezcqcmqsltfxltnpsgghzone3four
+hrtwone3six4pjbs4tfvdsjqdtfglseven
+6lpxrrhvdslxgpjblcmgsgbdpdkfmzkr
+llnshf1
+seven9rvjqdhbfour
+1fivezb4six
+2282mchsix2onelz
+86eightwonmn
+sevenlcznjrmcbzlpjvfivefhtfvl2vvsrbbcktnj
+2one819vsxclfour
+dlm2nine
+sxbdtwo9threetwo6
+4jfbc5rdzgsblrcgmqdh
+nine7four28seven
+two1sixmjmxgjq412five
+nine3hctlqv
+twofour8eighttwo86two1
+three4seveneightl
+zx89btcqrsvpqzseven
+1chkglfseven
+4999xpmmeight3gxxkl
+four88ninehhnbssxhbnseven
+hsfvzbbxjlsrmtngrxxsevensix3
+qccnqvfnkkkvsixktsixnine1twoneq
+2sevengsplvndctjgntsix3seven
+eight782two428four
+five37shzmklkb4nhddk8
+eightthree6qskmkzs
+cmkvmr3srbsnq7onefourbfsrbjvr
+t3mtgjq4stm84
+fiveseven2grlmfhmfg8bsb
+9bgbplvtzstdsevenonedrbxhftrxgmqftjmdrr
+sixfivezptk6
+8mftfiveninedgfmtwo9three9
+pscstrfnrpllhone5fivefourtwo
+five33
+4threegfs
+6sixthreebvq5
+tsjvdsljzfgfive6threemqjfhrsqkgfznbt
+six8five
+twoznvvqgmd5jsxltq
+zvh9one
+4threesevenfivesix2hmm
+l8ccxxhqqjb1qltqxht9qknltdbmdbmone
+psevenfournine7bzphqxtfmfhsbtxxldhcqj
+9bzxmpnlqmt8
+two73nineeighteight
+5sixseven
+eightthree98112
+eight4zbnpgjqlgntpl
+fourhg8twoone1xhllbxfrtwoneq
+jzonevsfhdcxzkmcxfhngleight2four
+6two4ndnscxkqlzszlkslzk28
+1foursix25695cp
+9hgvmtfiveeightdm
+7162nine
+seven7tqssone
+234cgsdfq7
+9eightvpvvztrsrbtvgkzg
+two882nine6eightsixz
+9nineqqltckg
+lgtlzthree21jrx
+42seven
+6pl3ckfqjchmnplblhkrd36jbflxf
+fpmkbm7three
+5twoonegccshhdrnfour1
+onexbeightsdoneseven2four
+three5sixxj
+eightxqzntcpscxbqrsix8three
+eightfourthree9eightvvhhlfourp
+seven67vdktlg51
+xbgjvvonesbtthfkdvntwo35
+fltjrv152sixvmtwofour
+fourfour6zkjdlrckdbfxthreefive
+kkrllbsnglkvxxzjmqvdgsfpzx18foureightseveneight
+xvmjqznggz7pgrxcfcqj
+5two9eight
+2rbninevmltplhj6nine
+4snzlftzltjfbxdq
+5gcpdxdjsftntzgbfnkbsjone
+onetwoninenine58onekmtdfn6
+four68four8two5
+lczh9
+sevensevenfivefour141j
+bmnrnlvfpvjsfourn1one3
+3nineone7fourfbfmjmpcpv6kgvzndbgpn
+633sevenczmjrstsp195
+sixvrcjmsveight3
+cgfhxt4
+4lqvqgsf37nrszkrhtjg91djsxdlrksk
+ninefivefive11four1eight
+76twovxfqrdksoneeightpgf4
+vhn9xnlhd3fivesix
+3sevenzpqvxhtsix
+dkkeightwosixcdngxqddtj4
+nineqqsdkmkhhsixpd4
+6five54
+tlzst3sevenvdthkfn3
+nineone2
+fcxeightwoeighthxpgfkfourone3
+9llcdpmninepvcbdonexfxgdfchtkgnmnljpnfb
+qrjdrbrrxrldbsq8threepbsdpbbtps9four
+299eightone
+fjzoneight99
+zz8three9
+eight4mfzshls167eight
+five1kmgmnpfhsp42
+6one67one
+fivefncmv3dgsx8lmssvqfthk6seven
+vlsbqreightseven77onermkfdsvjxkmn
+86hxzstkkb
+79mnxgbnl
+15nineone9ninesevenddrbrxj
+21rkt24dfour8four
+blxv68threeseven
+rbvkltwo3gpmmfmnpone9
+hrqss7
+six1threethree1
+frfctnmmhrmfr8
+bfzsvmcxhbthreefivezlb981
+phrlbcbd6vrf8gkrtnlprn
+txbxjb47svrfd4lrdkfbknb2gj
+fivefour6dnjqbmznkssevenone
+32eighttwonedn
+gxzqseventwo4eight
+eighttwo53ktqxjfjfive3
+64four3gjjtjq
+tmrv9sevenfive
+9seven81
+fivefourktwozzszqveightseven7
+three8bninetwofivednine
+nineone7qzdcglxjtkchjfpqrdfive6nine
+4hjsqzppdqseightblhpdxgjmfmrsrz
+fouronefour5fourjxls3
+sixsevensevenoneeightgssdqpgfrx6rpkdljlsjs
+two4cpvhzxnbqmk4
+98czdfivecpmvztnc87
+5chczkvdd
+dhndkdsbf7qp1
+tdbpx1qbf
+358tbjnc
+two6264six
+55snf
+eight7kpgsjrntszcmvrjqcs2two4four
+cpjxfgxdngjrnpbkfskpstm5nineseven5nine
+one2jxrsxlll1xpkeightztcfnsqqr
+2sevensevenzdb
+trpcnb536fourninethree
+bkhoneightblkqzbblmv8rkcg
+zqmmzmsqjghtf915
+3zxdzklnlbdvcqspm
+sevensixtwo8rsvdmc
+8two8
+eightoneqlcrrlq4four
+hlfhtwovvmzkzn5xklvc9
+fournncdgvxk6crvsqjcj58
+7941sevenfour
+mshlfglzlvcpcn2ninefiveninemlzkxspxsz2
+46sixone4eightrcmxrmhnmj6pmj
+jblfkrc1threefivefourbxd3
+prhvcsmvjx85one
+sstdseven3twobrfour3zthzhtkmc2
+9threeqdnninesqvsjdch55zzjrntdv
+fourbljt53gfkjkjtcpnlxcb
+qrtlkzcthreefnxlcnfsqqvhsix62one3
+knb7three7srrqbfhthreefive5
+sevengcf128btrnrtgbmj3mtzv
+brzvbdtwo63three4pjcjmzgfk8
+6klnsftm
+eight6sevensevensixfhgnjzgrcqdseven
+six2ckhhflcdjkrc2sdtgkzx4four
+six49
+56eight
+gfivevqqkz7
+twoseven1kfzjcxjj
+5xsbckzsevenfdcd6ffh
+five6fivezpdm19
+eightsix1zlrvvtflhqbmgnjnthcdbjthree
+9lbmb1gflnxtnine
+1eightxdrp566ljjtmbpng
+twoqbfl5four67three9
+six3sevenseven13
+seven4onenine4ccnmtbdtj
+hxzhqqtqdssevenfivecjfhlxmrbk2rdxsix8
+three6brccmgbkdxgj7
+961
+1ninesevensix6sixonetwonine
+4hlvbbs5pnjxbpd5xpvxfmn
+kkvjtnjk3nineseventwotrjntwo
+669zgrhxlrgtpeighttfrrqmhthree7eight
+pltqnfslttlhfour7
+31grzj
+qkqtwoneeighttgp8944cpxxksr3
+onelpvxtcj35zrllxzt
+fcccc7
+3eight1
+4five3ggdpskqjfrbngmq7nine
+8cnbxpfpm
+frmvkjxxggbssxlftzninelvvtvscl77ninefxdtrpvjfv
+rxkcvjbvhk84
+6twonegz
+sixpkklnr4vvmzrld4gxrkxlbhjpsmgt
+533x2ninedgrtlznp7nine
+threeeightsevengpvnine5368
+99eightsfvfvsvzn
+655threeseven56nineseven
+583gmtktthreeckfc
+fivetwo7threevktxxjsrkpseven6
+four9tbnqhjlbmqnjq4gpzpvjtl2
+fourtfjhxrkfour37seventwo4
+threesmpcr5
+7bbcsdcsxttxkrvhmkkzqjgvpzblcsjltsix5
+rtqoneighthxpg5tb4
+6eighteightfourrxlkqkxbxseven9rnggqbxqheight
+3b7vtwosixl9four
+nhjphtdskrzqjmkk7eightthree1
+nrlthreefourone37
+7oneighttcm
+b54732
+vmvltdtxhpninetgvmcmbhddtkpzjvrkvbhrtwo4pdqbnc
+8bkhgt3bqxthlxcmdpdcnvkjzrrpmkpnfivefourthree
+7nine61vsfkm84vvqbmhltdj
+6476five
+rmnoneightthree9one5vjbfnnnk
+svqjtjzntq4
+tcxkkxxvr78four6seven46
+7tr
+twosntlone2two
+sktgjbzqthreeseven6mrv3
+eightxxpctkf94six2one
+fivegjfftq3fxnclvrl9rxhjkpceight
+4qpvtrjhxxqzbjbbrqqcdklhgqmlmmrthree2ltzshfxztsx
+47
+5twoninehclgxj1rzgsqtsq
+634kmr151eightbrt
+smtwofourone26one
+2threecdpq32two4dzrzsr
+1eightvmhzchc3vhnnfivefivecf
+fstttl58fourqgkbjveight
+455one
+vkhg7rszxzmqnine749
+bvtwone8vninezhkkbvpscqfive6jczrlrgcn
+247
+ninemgxqhtwosix756
+fiveseven4kthzq
+eighteight9one51fivebkgpzl
+sevenmjqtvth8five
+ndqsfffkfmjjgzfdjcpgj4sixfr3threesjqbqlzng
+8598seven
+eightone4sevensnine
+qvcgzkcm3
+hskhmfndv45
+seven3zpvgg9
+bqqqcjkgtveight74
+five84sbfkgmldpknfdqjqrtwotwo
+9eighthv1ninemvrxdtcdlvszm
+qfsbeightsix9djl73
+pbqt8hsdzxkxv
+1fgfbxcjt6lqd618
+2rtlcqnk
+one1ninefive
+xjqmgfhndxtsixsevenm3991
+five1oneonetwo
+eight32threekddxppk
+1gsxrx7one
+hqpktfiveqvtjcxfkznine1
+xlhsxgssktqcmcjteight69kfph
+8rfqclm
+zqccxsponetkqtnine7six
+8xffivesevenhdzfjvlfive25
+xklljtnrbgxcggtpt57
+nine69seventhree
+3five4vktxqjfour
+sevennine6tbbddvbbpjsevenzxpzkcthreex
+86fourpfmlfourninetwobbpmntj
+two6bxpllmxtwo
+onecsjtf1four5
+ljmkg9621twonine2
+five97xkqbskgr
+threefiveonekjbrtqz275fnfour
+pbrghznine6threejmfhfqqnlnkm89
+ninegkldqjcmfjninezmmzsttqbj1
+gsmsjzlzheight65qjjjbrqhmnfive
+eight1b1pk7two
+nine63seventhreeeightfivetwonjdvmxcfmx
+tnzthree5
+fivefive4jrsbjmkzvbjone2
+6zsblcgdfivetwofour
+1vtzznqfqsixfivepxeight
+1sevenpdsf1ninefoursix
+fftqmfdhdsdtkfour3sevenjsqtmfive8
+3foureight1cqckq
+clvrcncnzkrxxgztl7seven
+fspmvzzjf2xngtglshcdlhft9nrqmkcqb4
+1onemvntx2rvcrgnfive
+5nzjjsmlfd
+3hzxjcrbvtnine
+kvkpdrgeight5d
+5kpqhlrkqqm
+5fivenine
+pkzrhbrjlc3ktq429
+threetqxvmjm4onegqsrsqpqh
+7ninepsjgsfvxsbtzkz3eightqd
+mlbrdfjzcvxr7twokfvdsmsixfivefourh
+7twofive
+48kzprtdfsch91
+4vfxfhmeightljxvxhfxsjsjtgjlqmgnine
+nine3sbfzznrxmphdhjd
+sevengrhblnnnfg74sixfour
+eightsix4onenine21onetwo
+vrqckqrrtxrsjltdplbmnine9six
+jfk9zbdr2gpsfdqbsrz
+957jrpkcgkcthreetwoblpgkx
+894threenineone2
+4ftsxhkkone3
+m9fourztzfvhqstwojx3four
+fiveninevm8
+prddhzmhzmeightsixthreeqpzjbdnmgc9five
+tftvxbtnine1twofivelkbfsbndrq2
+6seven2oneninehlstxr8
+6qkzfrzqsjnb49hftltrntl
+three7sixtpmpninefivethree
+five19zgnqjbshbtlhvc7sevenqdmqdsnknine
+fiveone1threejjmcfzsxtbtvg
+5mkmskszcn9
+fouronefour2bqcs3onetwo
+8three75sevenbbsbxjscvseven6mhpx
+lhdhnqqj6btjglcnpxxgzc
+gvlbmvldpsl2smgdqnh
+oneseveneightr6onecseven3
+nxrcgsevenlqf3
+r81fourbnskcrnn1twobcfpvqqtdd
+onexdx935ninecjtnsxxq
+15twoftmcckrhgg2
+fivemmjldhtbfivellfblbx89fourzcxxjthree
+7mhxhvghc89
+onendjhfxlzvzgrchf495onenksffh3
+two36lpgrkzr6rtmhqcngn
+9hntjqfrrjmnv7
+zdgrvhz8
+6nineeightvzjnnxjdmxonegtrsqrqnd27four
+sxcxccnn1ninejqmtqc9
+3vljzxsgfmfeightqlrgcktdf
+1four5fivehpbsspt8
+seven23
+ninek9
+onefkzkcljxp1sixthree5ninelt
+6mczeightrfshqxqxts3
+52569four2lnqbzxjbjz
+6pmcfgfk179fbfbvr
+pmbdtdsnxbmgknqgjj4ninefiverxxmtdgheighttp
+2fourckrgbs76fiveeightgjknht
+4lzlfvn8zp
+zjzjhv9
+threehjlnrg71sevenfiveeighteightsix
+szlbnkssc6jxhmhskeightthree5threemnfpvrj
+72seven7vgdfgqfxl
+kxnglmlneightzhqqhmdz7
+eightseven3nine9
+49ninesix
+qfxcgxmznpeightnnqone7nsmsxjsqh3four7
+29seven1ntxmjqgfn8ptpjsp7eight
+seven8tnlvtdpnjzeight3eight1vtplvnbpl
+j5four
+sixntfvskqqrv9one
+oneqnqzfbtjnb81szdbeightcscone
+four88869pxlszclzfq
+mvpkbvfivejjfrxmzxl21
+qznnjltonejfjlslh9
+nine9sfourkbcdzqdlmmveightgbxsgtjdrbsfthkbmsr
+four9cfpxmdg
+l9
+4mzsstnbltnine
+6rclj
+eightnzhfqmblpdfcffkfive9
+6ninep
+onekpxthg6vr21jghlcxhnvkhbzdjkcfour
+2crhnmq
+mgtwonefive9drkflmcfmkmsvzb1eightoneseven
+31two
+twos1hvzhnn
+rjjldxlp63five1threetwo
+ninejkhbqfkxccdnc4ftnzbdfdjxbjgqjfivexglgtvvdmn
+fourzhzh3four
+eight8four5two5seventzqlckfive
+one113tworzqnqsrrjnxbpprsglnine
+6chcqbpl
+8threemxc7
+7nbssevenvxb33pxstzqfhdrtxqs
+8three276tlrkszgneight
+dccvsl93sixfour92
+95seven9ninevhxcthree
+onehbdrrpxkjbdk6
+fivekkk3ninespgtqsix
+sixfive52eight
+fourone5nine
+5xvdnfxk1gtvmzbv7jkxxvjmjg7
+85nmvbdrqrb2ninefivefourone
+1jqgkhsix7seven9847
+2sevenone8five6twosnfdkcone
+fourrcfivekpsxkhrtfive4fourxqhtmrlgj
+tqtgd2388
+jbrfsl6nineq
+two8lsxfzdfnpthreesix3
+2czrtdlcffivethreeonelsix2
+vhdnp37
+sqkffnrcsnlkmxczzhvr419kzh5six
+24115twoone
+vlpjbq9vngpkhlpbfjnmztststwo
+eight499four6
+five7neightqntdsjskz126msrcns
+one79khfctv
+1fourthreeonepsnr5four
+1fourseven2b
+sixtsbrxkbpg9b
+dvnsccrktj9five6onepd
+rmqmz4fiveninejlxlgx
+brbeightwo6cxnblxgskmxxxtwo
+7fiveckskgnzgfourfivenxxkfxpzgcqcdfl58
+564
+one257six5vlkrcvmgsn88
+pbvzppchp6twonkkpvghseveneightsix
+tlv8
+eight59jj1cfnr4fzczfrvjgbn
+hbh8knnine3sgbnsjldfoursevent
+xjjvsix8eight8rqjkhdmnncbfivetwo
+dtgbxlxsqcftld4
+3fournthreefivennxgmgvlszseven9
+hbczcqkvnnzqzpkskccnnmpc8nzhqlhkhcbrpdhnm
+seven3mnljmjj4twoeighttwo6
+nineninetlnzc4
+jxp9one
+6htwo47two
+8lqdlvc5bldshtkx8six
+eight35
+ninethreecfiveone48six
+eight9twozmqgvblljf4seven3threesix
+ttmhdfzcvq8one28eighttwotwodmlpbkz
+5fivef1
+6bztnjckgszfivehdlzcnkbthree5sevennnine
+2fivesix
+rgjjrdjh16
+five6msbctcqqfgrone
+53973two6three
+six1zndpzk
+q2one4nine2eightltjzkmbfour
+8nineeightbdqkbnjcl4chznslmndjgtspvmphqxlsv3
+kfbnmpvjtjtflb7pkvgsvtone
+vvvrdthfpeightfive8rzs6
+kxph4nine3eightninefive
+three5five5
+98229six9
+one9four843pntrkfkbmddcjhtnine
+twotwodcsl556
+njrrkdpxrjtrcdjlxf6843sfdvzhz
+x4sfmrqpqcrqfour
+48nine
+fivefive8gsbk
+23twodvglscxgeight72
+kzfnd6
+zngq6zzronetlxdnthreerrgttsvs
+dhnqkmbfbphcftlxjdmx8qqbkvdcf8
+hkrzzhfivesixsixgzp629
+4khsfourt79eight
+twonine151
+ninegghnnnseven65eight
+qx62sx
+8seven3vktq
+onefive8eight
+ns6lspmgksccptwoeighteight
+klknjcvspk6
+vvpfptdqf1qgpgmbcx2128six
+86mgx4dhfnqlxonezgseven
+qhjzqrvhfdtdxlqsz6ltqnmvrxxtwo9
+four6p697
+7fjkdtthxheight7one
+1ltsevenpslmhldrp8dtbzqcjdvg
+8veightthree7
+38sixseventwosixzxdbxxzqssevenqcrlvptbp
+sixtwo285eight3b
+pjpg7jqfpkqthvsbdzrqsnhk4jbfv
+8sixsevensixtszklsnbmvtgmtbbkkjddmnmmgmbdh
+8sevendsxone7ninegcbqdcdqbnineeight
+onethxztbg2nbxsxxnfjhhfclfour
+4eight84
+fivethreetvfvkpxvdbqsvvdmrj9five
+1onejrb2five
+sevensevenqxjmb72qvxxjvxb
+xtwone3jslsgbchxm
+17hbdg4gqgkdnine2
+hgnmpvs9dkjnzgbvgvthkvtdonepjslplmqjf
+threesix3qxjf7tm
+66ninetm5tdlcnjnchr
+sbnrpczfqp6
+eightcnnjlpjjmrxvlklksrshpktpl1one
+1four9
+xttzsrkjjcvlgrm584qfjjhzlrhccj9
+qhclqvgzhvpgsnine7
+gtl4
+5vnp6
+8six1svdfvxncsvfspdc
+eightjbsfjtj8sevensixlblxbpxlsz
+8sevenseveneight
+pszx46
+one7sevenfour8onegs81
+95fiveone1onefive5tqvhv
+5nine7threehxjseven1
+rvpqpzfnhvcxtvbjnxp9
+one7txqvgmpqlnxceightnkvl
+seven9khkthfnckngnlllgk2679
+three6535onegfhkm9nq
+five3vpdxjkmzrhtwoninethreetwo4
+fiveninegqks5sixsrmlbnhxn
+fivexdtvlmpthree2brpjxqzgsjltkmnbltwo
+sevenfived6five
+seven95jrxgbnqvgnine
+4scx
+8oneonezspvqtwothreeoneone6
+six3fourtwozzbxboneprvjmjmscbkjb
+6sevenpdksvksix
+cfjp3eightfouroneseven
+1two9
+four9eightfpthree
+k4361gbbxthree
+lmmfz4four
+6fourtmeightfour
+five54three
+klbvmvzrxs91eight
+58rxgkzs58pcrbsq
+71onenineronesix
+18cxgmdfmone
+foursdfcxfx8
+hcmqmqzb5sevenfiveblqlnlx62mjbrpldjone
+two29two7lzjsvzcxdz9bsjtpbfplf
+oneone3teightlj
+8txbph34
+seven9one
+82hgflfrtz481four
+2qjfsqrkkbqkcgvhvzhnzbmfive73gkfxfhnqqbtx
+7fccpfrxstptwoeightonegnine5
+19vxbhzrhfkhtsgzzhfszxpcrnrqseven
+nnlfour9jfjnrnqbnb
+fqtfbkpmlz4seven1eightfour19
+x28qtnsmjpnc8
+sfdzkppzlhcxrjrvkssr375tdnlntcst7lzxdlcmprmgngqgzdsl
+vxoneight8nine935rtwotwofour
+zfldmtjzpzfbrrdgxslvn2xrj
+eightv8five5ppzsevenninebsbl
+four1sevenxc5
+721kqmfbhmgxvhvqninevlbdzfldgd
+39one
+threerhvrhlfiveonetwo2
+sixscfcpq6four1eightxdt
+four6fvfmvtjrfhkfrbfxcdjfqhmmfbf6
+sr31fouroneightr
+nine6twofive
+threelzjrjqnine4tlfpmvfq
+jjc63zvhlqlkdzltg35nine
+fourmpfpdxntv1szfcnrgvfpxt3one
+onetwo4tlzvftnvsfthreeeight4fmsnqt7
+xroneightzjvfvljsj59fourfour6szfjkdprbk
+nine3one
+7ninerphmbqphdsix
+9ptv2twofive
+6two4seven9ghjzqd
+391onenine21n
+4vgpsxreightdeightseven711
+kbvkrrv77grfdpthsix339
+fourmqcrccjcfive4foursixc9
+eightsix44seventhree
+4five8two9oneightkc
+mgsix3onegk9
+trftwodjjgqnstznxxshbdc6dpphrz9sevenone
+eight19two87twog
+5pq18ninethreeqqkfh7three
+twoonetpkmrcvvpk94
+threesix5two8two
+two1three3
+eight8four75
+kjcglpndtjqxpbf9eight6
+two447mcz5
+sbqfpgkbsixfivefiveone6qtmdnfive
+qxfsljsixtzpvphj69ccp
+2fivekrmpqts
+69eightnineoneeightwox
+211bvzlcdgbs
+ftcfgjzgnine2kcdvgrrnine5sevenfive3
+eightone42lsgpjeightthreenine
+f599phncmsixfourfsrg
+vgxdcrsc8one8rppqvzkckqgseven
+j2fmjmjxv6nine
+5mctgjjsm
+seven4mqtfnrsrnkghfourttbvhnnkjkmq
+2three8two67
+9five51ninesqnbfvqnmfcjhfhzlpkgjfzmsl2
+5nineninesixzk
+51gvkhcddt5onebkltbv
+942
+gfpq8jmkhvvzsdbzmfkqb4
+22vxpndczcgmxdsmzsthree
+vbdzf7gtqrqjgvjj9fivekqzggs
+4mzjjg6
+jgmncrn3five3
+gxghtqrjmvnjfourthree2fivevjqntqtzsix
+ntlnxtwofour9bh1
+five6three
+threeh9cgvxnfour4
+snbxpszrgh6mtnbmeightsixtknbnndqphbm6c
+4c
+1sixtwo2pcsjnbdrxtbjzrlssd57
+phhxnqdrjnsonefourthree73
+threekdlzcrvgc3pxd35seven2xjnsjxlczr
+5lcseven
+one27
+eight5k
+jmttwonetblnkmkjzfour8r8
+eightfive9twovfdpzrcvpppkzdpbhtwo
+1threedjsttltxcthreefivethree7zqlbfqdxqone
+5sixzgzfhmfqbp
+7kjfg
+zxoneight9nmlz3four4kfpmfive
+37four2zqr6
+six33fiveone7
+522bclzxzrkxdqvpl5nggsksbk6
+sevenninektxk3fcxzctsseven2
+twofpxbkzrgrtwo1twofrnnckz
+qcdbfcrtwo123ngrvvxhn
+kdpr1seven5npjblk
+eight4brhnsxl228pknpptlbflncddvgrh
+two3four
+bstwonenmlthreesixdsrbjjz5skpfsgmhb6zq4
+r6
+dnplx6ztonenine1cdnhfdx
+jjp749foureightcnrlnd9
+8fourtz42xhjqkpttdfgxvhbnbmnxn
+1gzcvvtwodqgnsevencjfour
+sevenvrnvzp3five
+ninexjnvzltwoninefour1
+sevenvthreetdbfgjseven4foureightsix
+5tmbjgdjqkffivevbkkpltt8fourseven
+3cjnkkl98five7five
+seven28pplnksndqtvlsrk7msjqtzonefive
+92two834
+mlfxonefourone48pgcqpgbbczgdr
+zfh12twonect
+sevenvdhbh7pztpvf6
+eightsix2oneone
+fvspcp3sevenfourninethreesixqvhjdjqxseven
+8fives1seven
+3threesix5fivexvbpnrchdcxgprxzths
+7fdt
+nine11rkpnktrsffqgdeightninefmtr5
+xvl4threeoneights
+one794
+rjqxttlmkxljdfrrfkgzloneoneone8four
+19xmcfsbskjrzpsevenone6
+nine42fvrtltg4khjs67jfzvp
+rxsxmbffpfive8ktrpczdn9
+fvzcdbfmklcfpxbgqkzxrhmb471pjgvs
+fiveeightnzxxqsphlqfnlffxzmtwo2tffkkv
+lkrjqsixqs5trpqbnb
+1bkpxfnrsixfour
+nine21kgtqcvvdmdqt
+three1plnrboneoneccczrnjsl7kj
+9dc
+htxcgnszrfive336szhb
+fivethree96vplbdqjtwo8sgrlljhtqsix
+sevenptlvbltgcsxc62
+vvtdhxqcmqrz91h59rnpscdjdltwo
+threetwo3gq7gjz
+7fbeight
+5ninethreeninejcvz7fcqxbn5
+crpbppclxsixtwoqdkflfdksq3
+tnbnqxklgd17onedxsevencnmbsmr
+4qzxtl46sevennhdjr
+honenine1
+1nine934
+xhtkzvnhsixqcxkdvmzhvnine891kzsxmzsix
+ktscvdksstwo26kgjzxtlbrpxbjr
+vfjkncjdtn2sixbtqqdhqfdnine
+4kvzrgninethree139eight
+eight6433bqvvcpljb5sixfive
+3seventwo8ngvqczkjrp7
+rtkqmptnnsgdrhxvmfvblshpqthree7zqgx
+bltgfkkvnctqkc226qcjxcfxb68
+9ronetwosix8vbnhgxxskdbc
+4sevenfktbgnxbvcmdrbhqrpgmsm7seveneight
+htp3pmpp897twossgtffdvzz
+gdceightwoseven4
+sixcznfbvhseven1four
+32twovthreelhpqvszgl
+two1threeninesix84five4
+fourpgskmztd9ztsz7jxjmmdqqx
+twohrbnhtrv3eight
+6one9eight7bzrxvxfvnrrrznncdhj7rtdvb
+4fhgjkkcjv
+xxphjxdfsqjj49zhpxhb
+gmmnine9
+hzn8six48one8vsmxc
+one7ninekhlzhdplnbnine
+eightfoursnrdnldssh41ggf64rjlshkoneightfq
+nine55one6
+mbhsqvlfhv8zsxz6seven1
+cjmvqktrkq18jdljgrg2
+9fivethree935
+ninehfhkzzhlkd8ninenjg
+5six1three1
+nine3tdkgnine2three9
+92mkgbdhsdgvqrc
+xchjtjbz8
+heightwomgjd6fxzpnl5
+jkprh4lqxqhglqjhppcxqnine72vfzkqnine
+nine21czjslbsix16threeeight
+five9tgbtsft7ggnfktl35threechxpcx
+qgcnmbg89threevhbpmnnfcgeightnine
+2jdqlgfour3
+ntnsscfsfive175tjfqnflfdd
+twotz1fourfour7blgzpqtnpc
+4fivehsnsstkp3
+4bk
+pmvnbqh9
+nine4qnt
+nine8eightlqt3
+onepccffive8seven
+sdkqkbshzb3nfour
+8eight4kx476four
+hl5threeqhdjcqlqbrvsq
+skqzcdqcfoursix767zt
+txrvszgqvnpx4sevenlfvvvlhshxhk
+seven8eightseven9rcdjfourseven
+5eight5ninetpjpsptwo
+nine38ninetwotwoseveneightwogpn
+7sixone2grgfour
+szfmk2five36
+eightnbcthreefivedmhfmstslfz2stzck2
+xffvthreethreeseven1kzcptthree
+pskfthreepk17gz
+four7rlk1eight
+9xqjdvfzbvfour2dxlhbspzppf896
+lstpxqdlmptvrvf9gvdqkfsjcvqnpnsix
+eightsevenfive6sixphjcrdtnlddfcbrgonetwo
+4rshkxgsbvgphlrxkxgbpjhqdgjzjlonepscqdhk
+mzclsv373sixlb
+snqmxmghbhpvzzff4threenmfkps
+7fivebqffc
+2mdvq4m
+ztlp6seven
+onesixninesix1three2fivetwonengp
+jqplcrrtgshzfrdcgvrxst383three
+68twoseven
+2eighteightpzzrlhpbmfivefour
+nxqjlh3
+hxgf6
+786cfcrl
+8seven7
+2xmnbrcvbbvsevenfour
+eight9nine4gjrrq6two
+3ninethree
+mgmgbfbptqdh79ltwo
+onevk8kfive8sixone2
+79mngvbhpkh1one
+14fivetzmtgcqpzjpzhjxfvfmbnljxeightzlbktsmsln
+744fivezxxgtvd9eight
+tccmpsggmhv2jljznkpndntqrninenfzdvzkbrg
+nineeightone7threejjgzskd8fiveftxr
+vvtwonetwo2nineonedvhr6
+8p47qcspdvhgnfeight8twoeight
+twoldpdsfivehrpzthreeone1jzf
+vnine7four84mjphfztmjt
+58qksl
+4threesixeight9two
+2sevenmfnbfbvxrf
+22sixfmcpqlr
+45eightl8flklsqkl
+fbfgcblg7jtjhfrsnkfour4vx1
+5tgvdhfive6cnkhnjldhqpj
+kmbjhbfpbdmczlbg2oneightd
+hconeightthree4zgcone
+6kvfj5
+three6lfnxx
+9pvhzpfqh5vlgj3nnkggxqbcxthreethree
+seveneightdrbthree5sixcgkxvpdz
+7seventwokcsixdgqfbvrqcp
+threefive2sixsix
+bxlckjtznjfspcsixsbg4sixzxnlrhhdgp
+xnl7
+2drd7499sixthree4
+tcxdsix94sevenkcmjzb
+seven19qvsdhlpxzgpsqffour
+twobb24onetwo4
+fivefour4three7
+sevenonethreesixdq1
+rvfjxqd7
+tk3
+66threefour
+htwonekfgczxgkzlhxtzpbfdeight8four
+four4eightfourgtcqgpvl83fqvtwoneqk
+rbsfmdkdcjgjnvn6l21
+m4foursix1
+4fqddqlgqjzone
+3rnxq64onefive
+5sixtnthdqksseven5
+ksdlqrxdgp8five
+tsix62sixone2sixoneightl
+nzplhfour3
+ninethreeninehkqkvkmsixznxmb3six
+41six8
+7eight187nine
+sixckpmqzplxnineone4znlrfssc
+1cxjrhptthree
+1sqmtfgjqb1
+7zvzhfkeight
+69rxlcvmftnr8five1
+8bone
+47thhzfpkeight
+threesixksevensevenfssevennine3
+5fivethcktzjfivehbkhgpstwoqgbdjknrfcpqvvhnine
+3n
+eight4xftrfsbtqd3sgmgvtrhrltz3
+pdstthreeeightx297two
+six6ghftkxqmvtfhtnjcvhhnine7
+51nine5
+seven81tfqzkthfmt
+3bndtfourtljqdjhgqjhldhf3three
+3dpqsgqscqrppfivesevenmgvm
+ns2lkqsixglmsvdrd
+9sixfivetrhdrsgfqz6onefive27
+nine67xzdzrgsevenonehlfkstmshgzpgbk
+bzvvqpxnznkzsmr5
+plcxrv7nine57bpnkxltnrlvlnslvd3
+onextfttfivebxplndseven7
+98fourninefhvlrpqnsixsix
+9onesevenfour
+vmnoneightsj63fiverkrrgzfdjsngdmcfprkkvzqnlkg6four
+threefourtwoonejseven9xvcseven
+gljjpmskv5sevensix7three
+nqlxzkzknphxxvzrqrlstxjkdtlnx8
+52three
+9onefourgfksix24
+nrcnqtqx66fbgfg22
+qkljqjpp6qnrcvscjglpphxtvqrdznqtwo8fjlzmzc
+twoczkmvmr5sevenhvonedqvvln
+8tvphxpfmhzpfour36seven
+eight39gqfdmfhgg
+xkcsxsxkn6
+frxlxtjbkgsbgtfzdlrql329zfxbhghqx
+nine75eight
+1vfdtvhrthreevssjcjkrv
+seventgthfskdc7xrpghjrhn2
+fivetmxkjczpjninefive5pss3onetwonetmq
+4klstxhhpjzfkvonefourthreezkchsjone
+rxljd9four94six4
+5fgnnfjl2three
+ngfq4rsevenvngjtrjvvkcnvrs
+eighttqc7frmxtfoureightonetwo
+threegtzbdttnd6tnlsevenlfqbnvlpg8r
+dsjfrslnxb8fournineshzqfourmxjvhone
+27bxtdmsshfourtwo86
+threesevensix5vc
+44seven
+two1eighttwosevensix8
+hbnlzhbfvztwo4kjfzktwotwo2sqgvdbrjbg
+two6sv6
+gdgdsbtwo98vhdlf3eightwohgv
+tztgspssevendqpxvtsftgclhct4mktj4
+xbnzpglcdgrrcttvjxx4
+dkzeightwotwo1gpfn3njqzkxhhsc
+1ggsixfive
+2eighthlhthdn
+hczrldvxffninemzbhsv2two5eightwozfh
+nksxdqvpgq6jhzl
+tkvjsxzgrp7four4thlzxone33
+bpncmqxsprpkbpznfivebvhd7lpqspfhsgq1
+threeone174fourkbkqvtjlfn
+fivejtwofive96fiveclc7
+twotwothree22twosevengbqqstsxhqgczp
+qgtwonefive3three
+nineeight6nine1three1eight
+oneeightndv5
+98eightoneonermnddmgqsseven7
+4l
+6r8xlfznmgffgmrnfsix13rnsv
+82vvnmv1seven
+1nqrqgqjrjqgpxxfrqm
+ckdmgxspjfoureightnblkpcfr1
+2threesixqczmrxhdrsevenfour
+fkpr1seven65nine
+1ninerr6
+5lkr
+nft4sevensixslqdfpdlskeight
+eightfiveone7rdptzjjmmcqone
+6qghmzchmtjktjkbseightczbjmsvmrk88cgctthsbz
+twozzgrzbgkrkmklkmvfive86five
+4six21xjxqjmqjdlone55three
+five42fiveone
+eighthc747sevenone
+four333six6
+bczkrqdh8one4zqcxrkk
+3cxhkclpfiveqgsk
+6eightjnghnlzbhbvnonetwobjfrpnfqsix
+4ninecjzlk7nine
+85four
+mkfcnntfb2ltjnjbslfgvztxgpfcnine6four
+zqzllvsdvtwonine4onenineeight
+11sixpjjvxbsbjfive
+35nhjgtpflthreejqbgvgkdcddpfzfpt
+9threebcv4sqtrdrgnb
+x4bptzpfgsevenfivenine
+1oneqgfpcdntgonectjgnrdxjptfd
+zrblfddvtgbqtkvddhqzpkk71ldtsixmsjjkr
+three5mjt
+one37ninenineonexjtl2xqhhnmtd
+552oneonehzscghzpqvtndvlpj
+two8nineeightkfrckndvzhcbdhcdg9
+hgdjgone22dsdnjjsmjtrxhxssx
+snh6bntph
+foureight5nine2
+1kjb98
+ninetwo2eighttwo
+hpcnone5cjvtpqxhbh596
+3gbtdlblgp
+4ninemzqkldqrcnmcvjjxtzgbrp
+fivetwo6
+4tlbxgnjgc522zlldmfbmh
+fkpsxsmchn3ninesevenseventfxxjdnqxtwo
+sevennine3sixsix
+84s
+seven5seven6sixmdfrtwo
+one269
+493nine
+29onecklhjcxvpbzfour3
+35vksqxhbnxk
+sixfdqttpskdnbksqxg9three6bqqpngfhz
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index edc523e..71e3f62 100644
--- a/Program.cs
+++ b/Program.cs
@@ -25,6 +25,19 @@ var selectedDay = AnsiConsole.Prompt(select);
var stopWatch = new Stopwatch();
+// Read input
+try
+{
+ selectedDay.ReadInput();
+}
+catch (Exception e)
+{
+ AnsiConsole.WriteException(e);
+
+ Environment.Exit(1);
+}
+
+// Part 1
AnsiConsole.MarkupLine($"[cyan]Running [yellow]{selectedDay}[/]...[/]\n");
AnsiConsole.MarkupLine("[cyan]Part [yellow]1[/] result:[/]");
@@ -44,7 +57,9 @@ catch (Exception e)
stopWatch.Reset();
+// Part 2
AnsiConsole.MarkupLine("\n[cyan]Part [yellow]2[/] result:[/]");
+
try
{
stopWatch.Start();
diff --git a/StringExtensions.cs b/StringExtensions.cs
index 92fbc01..a76b5ae 100644
--- a/StringExtensions.cs
+++ b/StringExtensions.cs
@@ -1,6 +1,6 @@
namespace AdventOfCode;
-public static class StringExtensions
+public static partial class StringExtensions
{
public static IEnumerable ReadAllLines(this StringReader reader)
{