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) {