Day 6
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
<None Remove="Problems\AOC2022\Day4\test.txt" />
|
||||
<None Remove="Problems\AOC2022\Day5\input.txt" />
|
||||
<None Remove="Problems\AOC2022\Day5\test.txt" />
|
||||
<None Remove="Problems\AOC2022\Day6\input.txt" />
|
||||
<None Remove="Problems\AOC2022\Day6\test.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ internal partial class SupplyStacks : Problem
|
||||
{
|
||||
private List<char>[] _stacksPart1 = Array.Empty<List<char>>();
|
||||
private List<char>[] _stacksPart2 = Array.Empty<List<char>>();
|
||||
private TextParser<(int, int, int)> _moveParser = from move in Character.Letter.Or(Character.WhiteSpace).Many()
|
||||
private readonly TextParser<(int, int, int)> _moveParser = from move in Character.Letter.Or(Character.WhiteSpace).Many()
|
||||
from stack in Character.Digit.Many()
|
||||
from frm in Character.Letter.Or(Character.WhiteSpace).Many()
|
||||
from source in Character.Digit.Many()
|
||||
@@ -32,7 +32,7 @@ internal partial class SupplyStacks : Problem
|
||||
Part1 = new string(_stacksPart1.Select(b => b.Last()).ToArray());
|
||||
}
|
||||
|
||||
private void PerformBasicMove(List<char>[] data, (int stack, int from, int to) move)
|
||||
private static void PerformBasicMove(List<char>[] data, (int stack, int from, int to) move)
|
||||
{
|
||||
var from = data[move.from-1];
|
||||
var to = data[move.to-1];
|
||||
@@ -44,7 +44,7 @@ internal partial class SupplyStacks : Problem
|
||||
}
|
||||
}
|
||||
|
||||
private void PerformMove(List<char>[] data, (int stack, int from, int to) move)
|
||||
private static void PerformMove(List<char>[] data, (int stack, int from, int to) move)
|
||||
{
|
||||
var from = data[move.from - 1];
|
||||
var to = data[move.to - 1];
|
||||
@@ -105,7 +105,7 @@ internal partial class SupplyStacks : Problem
|
||||
return _moveParser.Parse(line);
|
||||
}
|
||||
|
||||
private (int stack, int from, int to) ParseMoveLineRegex(string line)
|
||||
private static (int stack, int from, int to) ParseMoveLineRegex(string line)
|
||||
{
|
||||
var r = MoveParser().Matches(line);
|
||||
var items = r.First()
|
||||
@@ -115,7 +115,7 @@ internal partial class SupplyStacks : Problem
|
||||
return (items[0], items[1], items[2]);
|
||||
}
|
||||
|
||||
private List<char> ParseCrateLine(string line)
|
||||
private static List<char> ParseCrateLine(string line)
|
||||
{
|
||||
var result = new List<char>(line.Length / 4);
|
||||
for (int i = 1; i < line.Length; i += 4)
|
||||
|
||||
41
AdventOfCode/Problems/AOC2022/Day6/TuningTrouble.cs
Normal file
41
AdventOfCode/Problems/AOC2022/Day6/TuningTrouble.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using AdventOfCode.Runner.Attributes;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AdventOfCode.Problems.AOC2022.Day6;
|
||||
|
||||
[ProblemInfo(2022, 6, "Tuning Trouble")]
|
||||
internal class TuningTrouble : Problem<int, int>
|
||||
{
|
||||
private string _input = string.Empty;
|
||||
|
||||
public override void CalculatePart1()
|
||||
{
|
||||
Part1 = FindMarker(4);
|
||||
}
|
||||
|
||||
private int FindMarker(int size = 4)
|
||||
{
|
||||
for (int i = size; i < _input.Length; i++)
|
||||
{
|
||||
var group = _input[(i - size)..i];
|
||||
if (group.All(c => group.Count(gc => gc == c) == 1))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public override void CalculatePart2()
|
||||
{
|
||||
Part2 = FindMarker(14);
|
||||
}
|
||||
|
||||
public override void LoadInput()
|
||||
{
|
||||
_input = ReadInputText();
|
||||
}
|
||||
}
|
||||
1
AdventOfCode/Problems/AOC2022/Day6/input.txt
Normal file
1
AdventOfCode/Problems/AOC2022/Day6/input.txt
Normal file
@@ -0,0 +1 @@
|
||||
djhjvjggdzznllvvrvggscgscsrrffgvfvllfclcrchhwzhzqqlhqhffsdsmmcffnggcttdpttwpwttjvtjvtvqqctcwcmcsswvwzzlnzlnnvbnbdnngmmhchrcrqqhbhllbtllmppgjjtvjvdjvvpcpjcjjfrfzfzzdvzdvvswvvjzzbpzbzzddbndbbgjbjjvpjpjtjqtjqjcjmcjjrtjrjrqqvtvpvwpprhphrhdrddpdhhfsspddqnqwnntrtnrrthrhtrtwtdttmmnvmnmppswsqwqjqwqbqrqbqdbqdqgdqgqtgqqgzzhpzzwswvwmvwwvvrzznwzzbsbhbfhhvcvwvvrzrgzzfhzhhlthlhqhgqgttlmljmlmqqjddtqtctbblplddnqnzqnnzrzjrrqwrqqcfffbdfffspsqswstspsvppqmppdmppdvvfrfddqhqzqddtjddfqfrfllnjjcnnjzjmzmtmddbvdvzvbzzcjzzffdbdbsswshhrwrrfggpccszzzgdgvvlflwwdbbhqhffngffdfdmdgdhdmhdmdsspssctstdtdmdhhzvvcbbrqqmrmwwjmjqjmqjmjjjrmrmlmmbppmgpgttmptpspmmrttcddtjjspsfsqqbhbbzzgbzzznwzzlddmtdmdgmmlnljlvjjtgjjggmmnnvqnqzzfhzhttvbbprpmpmrmlrmllwmlwmlwwsjjlffbgfggqmggqgvglvvrpvrpvpnpphmhnmhhbbqjbbrrvfrfwflldffzwzccscqsqppctctddqbbmggmccdbdvbdvvpdpdbdsdjsjbbwpwcpcbcbmmzdmmvtvqvpvphhlblwwfmwmvvdhdtdwwlblglhhvfvwwqggrnrttpddtvvwqvqmqhhwnnghhbpbvbnvvdqqrqdqwqppmwpwhppnmnjmnjmjttvhhcgchcssrlrwllpdpndpdtptzppqqpvvtffcwffjppvnnjvvjnnwcwnnhlhjhsjsnjjzfjfsfhsssvttvfvsvpspppwswmswwqmwwzvwzzvtzvvwddqqzhhqpqjjwrwlrrbcbvvqllqjllvzvgvmvhmmsppwvpwphhjnndjjtpjtthzzvrrcwcrczzmqmsssvtstqtrrgtrtvtwtccbwcwrwbbdbgbmmcsmcssvjsjqqsnqqtvvbgbfbdffhjffvnnzpplqppzzfwfrfnfcncqccgjjcffhshrhgrhghvhphccqtcqtccjzccdnncggftgttrppnpptlltztqtjqqvfvqvdvmvmjjgqqrqgrqqcggdvvpcvcjvjnnrjjmbmlbmmqvmqmfmwmpwwnhwdtmvhqfwlbpzjplfhfntjgmvqmmjqpbngpvjvpgzpqwjjwhvjwwplrtjhzmzqmdrppgbrspmctlggmflbjzzfcvvdqlrtvqvwhcpjnmlvfgwrwwtblpqstddnqntnmwsbgjfrbdrlnvqdrnttshjmvpmncmggfdbnndwzmswmdvhmmwtgpfglrzzhwcsgvhnnrrhmnhftvvqfdfrsphzbslgscmwsnrwbvqphhswvpvsbbstvnndclhfhdctlvwrmdgzfcfmjmznqvvqrddmdlqznvcsqsgnpcqqhbdwqntcnqljstqvrzhgvzqdltpwmnpvjmqrpjsfhqvhchjnwjnqpdqbdjqdpqsqhbwwmhfthzbrsjnhncpbjrhgqlzmrzlnvrrfvlrmflcqfmqjzjwscrflgzwtbchfrnvsrrtncvhjbnnmlmmfdjcbmbsmgdtwzwcwnthfbsnrgdfwqjncqsdmfnfqgtcwrhjprlnhvrnpmnnhlwstvqjrsprqhjzszzgfznmgwjqglvfrrwpdbptdrnbbwbzbcbhbtcchmfsgmvnmrbdqhqgmvtfmvpgvjzjpgjbdhcfrfhprgdzrprccnhbmzdfjsgldlgpgdrfhbhtmhdttdsbndgbdfccqhhwhqfmlsfhsbbbmdncrwzcnrdvcmhllfwtrgjpgngzwptnqtggtcjwrptffmsrgdpctsdjtpssngsdqwfsbhdbcqvbdrzlhzlsbbzhqthzhcwsftlhrmhgpfzljgcphjjvhpqjzsfnrztwrhlnlbmgcgmstrbbwclpvdtdpclzlhmmpmmpmppnwjglhwppprlbzbvwqwmpgtvvpgdthnwbtblwpwgvmbcbjwjbczlcmzfwzbqvzsvgcmspvrsblldscqlgghdwzbvhhvgcfwgnqwlngclbjfwrpwtdjvqmzwwjztwdjplhzpzfslbbvfdsnpggwcttzwdlzgqgmrnpnclhrlngtwcwblzdjmpgqvzsvsdmzdwlgcdlccnnlrcvtrvspcsmgmzzvwnlzwtznwtqtdjcnhwrqhqrmvqqhrpdtnsmfrlcgpjcnddsqzcppgrnhvwsdbjvvtmvbjdncpdnmzfswmtvzfbdpqfjvwvqlhptnpdfdnlwfrgstpvvmhsqfgggdrsfgldfzbcjzhqzvfwmzccwjrslhjwlbmrpqgzdfnfbhsmdpzwtqnqldtqvshvlvmlnnmqrqbpwvnhqhtcbfclhrcqlqzhsqplsnbczvrbzqwlfwjdtmstzdbswtrvlpzzlrfvgdmldbwcttztrvsgzjwhhpcrvtgzfzppdlrdwswbnjfqqpqfbcqlzdmjsgjtzmvhdzspwlqpdjnccmbtdhnnhfvwqclbzzgglfgmvvgrccdsbwfmpvqwqrhmdzfhhhgbgjgwmnzmnggfrpspchvzpcmcpsbzgldmgqjqqdcjpwwncwrwjbhgzdbbcmbzbbtvprsjrhfwgsppdrrlzvnmtmwrmmrhtlndvsvjvgqmmttbbnpdhnjhwgrvlrdtpbrtwpwvvpslcqnvnrlhpvgdwnrzjmhwmgvpndtrjlzqpfzfbrsgbzjjqcfgsfwchblzstdflblngtzbrzrrvsczqvfhjjdlffrghgqvqfdtstqlnzllsrnnrtvrzdphbhdfpmhlfncqbdtzjqqcfbzpvgzdcsvvbfdvqrfrncbrwmpdmhnlqdscwnvldzblpzfqcvnbzmmtbmwjbczsjvzmfthfpvjcpwftqcbgjwflfrbrggwnvwndtncljfrdfwqwhfbctpjghfvnjnntnrgbfbmhplgmpfvmgvfqjslgnnrnlgztlstpcjwtlhmwlljcfmptfwsphnlsrjwmgtghgqmsvwvqsmblwpdftbrwjcdlzjmjblghszznqhsnqrcmtccgdwrrlsmwswvrjltqmwsdwvpnzltllhrsdvmrntdhtwwbgrqmrffnqbqrczvzchbgmzwtjtfzwntsnlbwbgrlvqjsqmdnwjqlwrdpnfpggzrjvtrhqdbmmbtfmmblgwtrqccqbjnljqflhgtphvrgrgghgrpbgfgdztsmfwrfflsqmrwbfjwsmpfrnbqjwnwdqwcwzpwbsmngjwfmbwdmnprdjnjbmqgfcbvtcvcthpmnmvvzdzgqqbhtjqfcdvhfzwqgfsbtvnwbzpmmtswfntjjppsswgbfrjbrstltdgbmclmbfvlslghbhnqqbdlzgtctgsfnwvbpzbvnwfbjmbfqcpqqvgrzwcbrwzdbdsjsslcjlmtprntpsdmqldzwqlqztwqtqfqzmrnzbtpqlfnsdwfdgggfvmqmrdqmnffnzcwfzsrqfpvrmsfsrbnpbhnqvdglvglllpggpmwmngrhzwgpdlzrbsvjtqmshhnlzwwftdtqwrqwgbbnczqcwmsvcljqlscftwflhwwhgnqwztfchdzsllrzbhbqwcfztjnqtdmsfnlzlcwzfmtlcgwclzfhhldgrnfjvzthzqzmzvwcrnhpdcwswpddsbwtznwlcwsnfqnqwnntngplwnfgwrcnpvgffwrcrszzdbfvzjmrmlrjwcvdvbglgncjwcnnpdfnwsrzsvzgnjrlqmwhvtdgmpbqmjthmhhmzjhpvnbvrqnlspdbcgshwlnvwpvrbcmvbvcsdmgwtmsthqtcfmllsfwvqcrbmdgqtzjwrg
|
||||
1
AdventOfCode/Problems/AOC2022/Day6/test.txt
Normal file
1
AdventOfCode/Problems/AOC2022/Day6/test.txt
Normal file
@@ -0,0 +1 @@
|
||||
nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg
|
||||
@@ -34,7 +34,8 @@ public class AOCRunner
|
||||
}
|
||||
}
|
||||
|
||||
private void InitSizing() {
|
||||
private void InitSizing()
|
||||
{
|
||||
_maxProblemCount = Console.WindowHeight - 9;
|
||||
}
|
||||
|
||||
@@ -43,7 +44,8 @@ public class AOCRunner
|
||||
if (_selectedDay >= _maxProblemCount)
|
||||
{
|
||||
_scollOffset = _loadedProblems[_selectedYear].Count - _maxProblemCount;
|
||||
} if(_selectedDay < _scollOffset)
|
||||
}
|
||||
if (_selectedDay < _scollOffset)
|
||||
{
|
||||
_scollOffset = _selectedDay;
|
||||
}
|
||||
@@ -91,11 +93,16 @@ public class AOCRunner
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Loading Input data...\n");
|
||||
problem.LoadInput();
|
||||
var time = ReadInput(problem);
|
||||
time += RunPart("Calculating Part 1", problem.CalculatePart1);
|
||||
time += RunPart("Calculating Part 2", problem.CalculatePart2);
|
||||
|
||||
RunPart("Calculating Part 1", problem.CalculatePart1);
|
||||
RunPart("Calculating Part 2", problem.CalculatePart2);
|
||||
Console.WriteLine();
|
||||
Console.Write($"Total Elapsed Time: ");
|
||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||
Console.WriteLine($"{time.TotalMilliseconds}ms");
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Printing Results:");
|
||||
@@ -108,7 +115,23 @@ public class AOCRunner
|
||||
Console.Write("\n\n");
|
||||
}
|
||||
|
||||
private static void RunPart(string name, Action action)
|
||||
private static TimeSpan ReadInput(IProblem problem)
|
||||
{
|
||||
var sw = new Stopwatch();
|
||||
Console.WriteLine();
|
||||
Console.Write("Loading Input data... ");
|
||||
sw.Start();
|
||||
problem.LoadInput();
|
||||
sw.Stop();
|
||||
|
||||
Console.ForegroundColor = ConsoleColor.Green;
|
||||
Console.Write("Done in ");
|
||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||
Console.WriteLine($"{sw.Elapsed.TotalMilliseconds:n}ms");
|
||||
return sw.Elapsed;
|
||||
}
|
||||
|
||||
private static TimeSpan RunPart(string name, Action action)
|
||||
{
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
var sw = new Stopwatch();
|
||||
@@ -139,6 +162,7 @@ public class AOCRunner
|
||||
sw.Stop();
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
}
|
||||
return sw.Elapsed;
|
||||
}
|
||||
|
||||
public void RenderInteractiveMenu()
|
||||
@@ -161,7 +185,8 @@ public class AOCRunner
|
||||
var input = Console.ReadKey(true);
|
||||
if (_isProblemMode)
|
||||
{
|
||||
if(input.Key is ConsoleKey.Enter or ConsoleKey.Escape) {
|
||||
if (input.Key is ConsoleKey.Enter or ConsoleKey.Escape)
|
||||
{
|
||||
_isProblemMode = false;
|
||||
Console.Clear();
|
||||
}
|
||||
@@ -181,6 +206,7 @@ public class AOCRunner
|
||||
}
|
||||
_selectedYear = _years[--yearIndex];
|
||||
break;
|
||||
|
||||
case ConsoleKey.RightArrow:
|
||||
_scollOffset = 0;
|
||||
_selectedDay = 0;
|
||||
@@ -191,6 +217,7 @@ public class AOCRunner
|
||||
}
|
||||
_selectedYear = _years[++yearIndex];
|
||||
break;
|
||||
|
||||
case ConsoleKey.UpArrow:
|
||||
if (_selectedDay == 0)
|
||||
{
|
||||
@@ -199,6 +226,7 @@ public class AOCRunner
|
||||
}
|
||||
_selectedDay--;
|
||||
break;
|
||||
|
||||
case ConsoleKey.DownArrow:
|
||||
if (_selectedDay == dayMax)
|
||||
{
|
||||
@@ -211,6 +239,7 @@ public class AOCRunner
|
||||
case ConsoleKey.Enter:
|
||||
_isProblemMode = true;
|
||||
break;
|
||||
|
||||
case ConsoleKey.Escape:
|
||||
_isQuiting = true;
|
||||
break;
|
||||
@@ -220,6 +249,8 @@ public class AOCRunner
|
||||
|
||||
private void RenderTopBar()
|
||||
{
|
||||
if (_isProblemMode)
|
||||
return;
|
||||
//Render Border
|
||||
DrawBorder(1, 0, Console.WindowWidth, 3);
|
||||
Console.SetCursorPosition(Console.WindowWidth / 2 - 4, 1);
|
||||
@@ -245,21 +276,21 @@ public class AOCRunner
|
||||
else
|
||||
DrawButton(year.ToString(), 2, col, buttonWidth, 1, ConsoleColor.Gray, Console.BackgroundColor);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void RenderContentView()
|
||||
{
|
||||
if (!_isProblemMode)
|
||||
{
|
||||
DrawBorder(5, 0, Console.WindowWidth, Console.WindowHeight - 5);
|
||||
Console.SetCursorPosition(Console.WindowWidth / 2 - 5, 5);
|
||||
Console.ForegroundColor = ConsoleColor.Blue;
|
||||
Console.Write(" Problems ");
|
||||
if (_isProblemMode)
|
||||
RenderProblemResults();
|
||||
else
|
||||
RenderProblemList();
|
||||
}
|
||||
else
|
||||
RenderProblemResults();
|
||||
}
|
||||
|
||||
private void RenderProblemList()
|
||||
{
|
||||
@@ -270,8 +301,6 @@ public class AOCRunner
|
||||
}
|
||||
var problems = _loadedProblems[_selectedYear];
|
||||
|
||||
|
||||
|
||||
var listEnd = Math.Min(_maxProblemCount, problems.Count);
|
||||
|
||||
for (int i = 0; i < listEnd; i++)
|
||||
@@ -296,6 +325,7 @@ public class AOCRunner
|
||||
Console.SetCursorPosition(2, 7);
|
||||
RunDay(_selectedYear, _selectedDay);
|
||||
}
|
||||
|
||||
private void DrawSelectedButton(string text, int row, int col, int width, int height, ConsoleColor color = ConsoleColor.Gray, ConsoleColor background = ConsoleColor.Black, bool centered = true, int padding = 0)
|
||||
{
|
||||
//text = $"\ue0c7{text}\ue0c6";
|
||||
@@ -321,7 +351,6 @@ public class AOCRunner
|
||||
Console.Write('\ue0c6');
|
||||
|
||||
Console.BackgroundColor = origBg;
|
||||
|
||||
}
|
||||
|
||||
private void DrawButton(string text, int row, int col, int width, int height, ConsoleColor color = ConsoleColor.Gray, ConsoleColor background = ConsoleColor.Black, bool centered = true, int padding = 0)
|
||||
@@ -341,7 +370,6 @@ public class AOCRunner
|
||||
Console.SetCursorPosition(col + xOffset, row + yOffset);
|
||||
Console.Write(text);
|
||||
Console.BackgroundColor = origBg;
|
||||
|
||||
}
|
||||
|
||||
private void DrawBorder(int row, int col, int width, int height, ConsoleColor color = ConsoleColor.Gray, bool drawFill = false)
|
||||
@@ -369,7 +397,6 @@ public class AOCRunner
|
||||
Console.Write('═');
|
||||
else if (drawFill)
|
||||
Console.Write(' ');
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user