From 4027c3a71228244f62b5d962cb1f42c7bf35cd2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20M=C3=BCller?= Date: Sun, 3 Dec 2023 23:52:54 +0100 Subject: [PATCH] Added solution for "Day 3: Gear Ratios", part 1, and added test project --- AdventOfCode.lpi | 4 + AdventOfCode.lpr | 3 +- USolver.pas | 6 -- solvers/UGearRatios.pas | 147 ++++++++++++++++++++++++++ tests/AdventOfCodeFPCUnit.fpcunit.ini | 15 +++ tests/AdventOfCodeFPCUnit.ico | Bin 0 -> 133345 bytes tests/AdventOfCodeFPCUnit.lpi | 84 +++++++++++++++ tests/AdventOfCodeFPCUnit.lpr | 15 +++ tests/UGearRatiosTestCases.pas | 83 +++++++++++++++ 9 files changed, 350 insertions(+), 7 deletions(-) create mode 100644 solvers/UGearRatios.pas create mode 100644 tests/AdventOfCodeFPCUnit.fpcunit.ini create mode 100644 tests/AdventOfCodeFPCUnit.ico create mode 100644 tests/AdventOfCodeFPCUnit.lpi create mode 100644 tests/AdventOfCodeFPCUnit.lpr create mode 100644 tests/UGearRatiosTestCases.pas diff --git a/AdventOfCode.lpi b/AdventOfCode.lpi index 646efc6..0870890 100644 --- a/AdventOfCode.lpi +++ b/AdventOfCode.lpi @@ -41,6 +41,10 @@ + + + + diff --git a/AdventOfCode.lpr b/AdventOfCode.lpr index c5c3607..83e2617 100644 --- a/AdventOfCode.lpr +++ b/AdventOfCode.lpr @@ -25,7 +25,7 @@ uses {$ENDIF} Classes, SysUtils, CustApp, USolver, - UTrebuchet, UCubeConundrum; + UTrebuchet, UCubeConundrum, UGearRatios; type @@ -52,6 +52,7 @@ begin TTrebuchet.Run; TCubeConundrum.Run; engine := TSolverEngine.Create; + engine.RunAndFree(TGearRatios.Create); engine.Free; end; diff --git a/USolver.pas b/USolver.pas index a5e0de9..43b165c 100644 --- a/USolver.pas +++ b/USolver.pas @@ -53,7 +53,6 @@ type procedure Init; virtual; procedure ProcessDataLine(const ALine: string); virtual; abstract; procedure Finish; virtual; abstract; - procedure Free; virtual; function GetDataFileName: string; virtual; abstract; function GetPuzzleName: string; virtual; abstract; function GetResultPart1: Integer; virtual; @@ -80,11 +79,6 @@ begin FPart2 := 0; end; -procedure TSolver.Free; -begin - Free; -end; - function TSolver.GetResultPart1: Integer; begin Result := FPart1; diff --git a/solvers/UGearRatios.pas b/solvers/UGearRatios.pas new file mode 100644 index 0000000..d93548f --- /dev/null +++ b/solvers/UGearRatios.pas @@ -0,0 +1,147 @@ +{ + Solutions to the Advent Of Code. + Copyright (C) 2023 Stefan Müller + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . +} + +unit UGearRatios; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, USolver; + +const + CDigitChars = ['0'..'9']; + CNonSymbolChars = ['0'..'9', '.']; + +type + + { TGearRatios } + + TGearRatios = class(TSolver) + private + FPreviousLine, FLine: string; + procedure ProcessDataLineTriplet(const APreviousLine, ALine, ANextLine: string); + public + procedure ProcessDataLine(const ALine: string); override; + procedure Finish; override; + function GetDataFileName: string; override; + function GetPuzzleName: string; override; + end; + +implementation + +{ TGearRatios } + +procedure TGearRatios.ProcessDataLineTriplet(const APreviousLine, ALine, ANextLine: string); +var + i, numberStart, numberLength, partNumber: Integer; + inNumber, isPartNumber: Boolean; +begin + inNumber := False; + + for i := 1 to ALine.Length do + begin + // Checks if number starts. + if not inNumber and (ALine[i] in CDigitChars) then + begin + inNumber := True; + numberStart := i; + + // Checks for a symbol in the column before the first digit. + isPartNumber := (i > 1) and + (not (APreviousLine[i - 1] in CNonSymbolChars) + or not (ALine[i - 1] in CNonSymbolChars) + or not (ANextLine[i - 1] in CNonSymbolChars)); + end; + + // Checks for a symbol in the column of the current digit. + if inNumber and not isPartNumber and + (not (APreviousLine[i] in CNonSymbolChars) + or not (ANextLine[i] in CNonSymbolChars)) then + begin + isPartNumber := True; + end; + + // Checks if number ends. + if inNumber and (not (ALine[i] in CDigitChars) or (i = ALine.Length)) then + begin + inNumber := False; + + // Checks for a symbol in the column after the last digit. + if not (APreviousLine[i] in CNonSymbolChars) + or not (ALine[i] in CNonSymbolChars) + or not (ANextLine[i] in CNonSymbolChars) then + begin + isPartNumber := True; + end; + + // Counts if it is a part number. + if isPartNumber then + begin + numberLength := i - numberStart; + if ALine[i] in CDigitChars then + Inc(numberLength); + partNumber := StrToInt(Copy(ALine, numberStart, numberLength)); + Inc(FPart1, partNumber); + end; + end; + end; +end; + +procedure TGearRatios.ProcessDataLine(const ALine: string); +begin + if not (FLine = '') then + begin + // Processes lines 2 to n - 1 in calls for lines 3 to n. + ProcessDataLineTriplet(FPreviousLine, FLine, ALine); + FPreviousLine := FLine; + FLine := ALine; + end + else if not (FPreviousLine = '') then + begin + // Processes line 1 in call for line 2. + FLine := ALine; + // Duplicates the first line for the algorithm because it does not influence the result. + ProcessDataLineTriplet(FPreviousLine, FPreviousLine, FLine); + end + else + // Processes nothing in call for line 1. + FPreviousLine := ALine; +end; + +procedure TGearRatios.Finish; +begin + // Processes line n. + // Duplicates the last line for the algorithm because it does not influence the result. + if FLine = '' then + FLine := FPreviousLine; + ProcessDataLineTriplet(FPreviousLine, FLine, FLine); +end; + +function TGearRatios.GetDataFileName: string; +begin + Result := 'gear_ratios.txt'; +end; + +function TGearRatios.GetPuzzleName: string; +begin + Result := 'Day 3: Gear Ratios'; +end; + +end. + diff --git a/tests/AdventOfCodeFPCUnit.fpcunit.ini b/tests/AdventOfCodeFPCUnit.fpcunit.ini new file mode 100644 index 0000000..b64eb5d --- /dev/null +++ b/tests/AdventOfCodeFPCUnit.fpcunit.ini @@ -0,0 +1,15 @@ +[WindowState] +Left=664 +Top=189 +Width=575 +Height=663 + +[Tests] +All Tests.Checked=1 +All Tests.Expanded=1 +TGearRatiosTestCase.Checked=1 +TGearRatiosTestCase.Expanded=1 +TGearRatiosTestCase.TestPuzzleExample.Checked=1 +TGearRatiosTestCase.TestPuzzleExample.Expanded=0 +TGearRatiosTestCase.TestEndOfLineNumber.Checked=1 +TGearRatiosTestCase.TestEndOfLineNumber.Expanded=0 diff --git a/tests/AdventOfCodeFPCUnit.ico b/tests/AdventOfCodeFPCUnit.ico new file mode 100644 index 0000000000000000000000000000000000000000..10c5fc1a3d8d9ff264229f4ff1cf99ebc83f167f GIT binary patch literal 133345 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
  • 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 literal 0 HcmV?d00001 diff --git a/tests/AdventOfCodeFPCUnit.lpi b/tests/AdventOfCodeFPCUnit.lpi new file mode 100644 index 0000000..1d9db93 --- /dev/null +++ b/tests/AdventOfCodeFPCUnit.lpi @@ -0,0 +1,84 @@ + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="fpcunittestrunner"/> + </Item> + <Item> + <PackageName Value="LCL"/> + </Item> + <Item> + <PackageName Value="FCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="AdventOfCodeFPCUnit.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="UGearRatiosTestCases.pas"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="..\USolver.pas"/> + <IsPartOfProject Value="True"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="AdventOfCodeFPCUnit"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\solvers;.."/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/tests/AdventOfCodeFPCUnit.lpr b/tests/AdventOfCodeFPCUnit.lpr new file mode 100644 index 0000000..6ba23fb --- /dev/null +++ b/tests/AdventOfCodeFPCUnit.lpr @@ -0,0 +1,15 @@ +program AdventOfCodeFPCUnit; + +{$mode objfpc}{$H+} + +uses + Interfaces, Forms, GuiTestRunner, UGearRatiosTestCases, USolver; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TGuiTestRunner, TestRunner); + Application.Run; +end. + diff --git a/tests/UGearRatiosTestCases.pas b/tests/UGearRatiosTestCases.pas new file mode 100644 index 0000000..54d1036 --- /dev/null +++ b/tests/UGearRatiosTestCases.pas @@ -0,0 +1,83 @@ +{ + Solutions to the Advent Of Code. + Copyright (C) 2023 Stefan Müller + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. +} + +unit UGearRatiosTestCases; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, fpcunit, testregistry, UGearRatios; + +type + + { TGearRatiosTestCase } + + TGearRatiosTestCase = class(TTestCase) + protected + FSolver: TGearRatios; + procedure Setup; override; + procedure TearDown; override; + published + procedure TestPuzzleExample; + procedure TestEndOfLineNumber; + end; + +implementation + +{ TGearRatiosTestCase } + +procedure TGearRatiosTestCase.Setup; +begin + FSolver := TGearRatios.Create; +end; + +procedure TGearRatiosTestCase.TearDown; +begin + FSolver.Free; +end; + +procedure TGearRatiosTestCase.TestPuzzleExample; +begin + FSolver.Init; + FSolver.ProcessDataLine('467..114..'); + FSolver.ProcessDataLine('...*......'); + FSolver.ProcessDataLine('..35..633.'); + FSolver.ProcessDataLine('......#...'); + FSolver.ProcessDataLine('617*......'); + FSolver.ProcessDataLine('.....+.58.'); + FSolver.ProcessDataLine('..592.....'); + FSolver.ProcessDataLine('......755.'); + FSolver.ProcessDataLine('...$.*....'); + FSolver.ProcessDataLine('.664.598..'); + FSolver.Finish; + AssertEquals('Result of part 1 calculation incorrect.', 4361, FSolver.GetResultPart1); +end; + +procedure TGearRatiosTestCase.TestEndOfLineNumber; +begin + FSolver.Init; + FSolver.ProcessDataLine('...$541'); + FSolver.Finish; + AssertEquals('Result of part 1 calculation incorrect.', 541, FSolver.GetResultPart1); +end; + +initialization + + RegisterTest(TGearRatiosTestCase); +end.