diff --git a/AdventOfCode.lpi b/AdventOfCode.lpi
index 606b61b..de7ba4b 100644
--- a/AdventOfCode.lpi
+++ b/AdventOfCode.lpi
@@ -93,6 +93,10 @@
+
+
+
+
diff --git a/AdventOfCode.lpr b/AdventOfCode.lpr
index 338ddf6..583af79 100644
--- a/AdventOfCode.lpr
+++ b/AdventOfCode.lpr
@@ -25,7 +25,7 @@ uses
{$ENDIF}
Classes, SysUtils, CustApp, USolver, UTrebuchet, UCubeConundrum, UGearRatios, UScratchcards, UGiveSeedFertilizer,
UWaitForIt, UCamelCards, UHauntedWasteland, UNumberTheory, UMirageMaintenance, UPipeMaze, UCosmicExpansion,
- UHotSprings, UPointOfIncidence, UParabolicReflectorDish;
+ UHotSprings, UPointOfIncidence, UParabolicReflectorDish, ULensLibrary;
type
@@ -64,6 +64,7 @@ begin
engine.RunAndFree(THotSprings.Create);
engine.RunAndFree(TPointOfIncidence.Create);
engine.RunAndFree(TParabolicReflectorDish.Create);
+ engine.RunAndFree(TLensLibrary.Create);
engine.Free;
end;
diff --git a/solvers/ULensLibrary.pas b/solvers/ULensLibrary.pas
new file mode 100644
index 0000000..d6831d7
--- /dev/null
+++ b/solvers/ULensLibrary.pas
@@ -0,0 +1,80 @@
+{
+ 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 ULensLibrary;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, USolver;
+
+type
+
+ { TLensLibrary }
+
+ TLensLibrary = class(TSolver)
+ private
+ function CalcHash(const AInput: string): Byte;
+ public
+ procedure ProcessDataLine(const ALine: string); override;
+ procedure Finish; override;
+ function GetDataFileName: string; override;
+ function GetPuzzleName: string; override;
+ end;
+
+implementation
+
+{ TLensLibrary }
+
+function TLensLibrary.CalcHash(const AInput: string): Byte;
+var
+ c: Char;
+begin
+ Result := 0;
+ for c in AInput do
+ Result := ((Result + Ord(c)) * 17) and 255;
+end;
+
+procedure TLensLibrary.ProcessDataLine(const ALine: string);
+var
+ split: TStringArray;
+ s: string;
+begin
+ split := ALine.Split(',');
+ for s in split do
+ Inc(FPart1, CalcHash(s));
+end;
+
+procedure TLensLibrary.Finish;
+begin
+
+end;
+
+function TLensLibrary.GetDataFileName: string;
+begin
+ Result := 'lens_library.txt';
+end;
+
+function TLensLibrary.GetPuzzleName: string;
+begin
+ Result := 'Day 15: Lens Library';
+end;
+
+end.
+
diff --git a/tests/AdventOfCodeFPCUnit.lpi b/tests/AdventOfCodeFPCUnit.lpi
index bc6bfbd..eedd017 100644
--- a/tests/AdventOfCodeFPCUnit.lpi
+++ b/tests/AdventOfCodeFPCUnit.lpi
@@ -100,6 +100,10 @@
+
+
+
+
diff --git a/tests/AdventOfCodeFPCUnit.lpr b/tests/AdventOfCodeFPCUnit.lpr
index 08a515b..ab3a37c 100644
--- a/tests/AdventOfCodeFPCUnit.lpr
+++ b/tests/AdventOfCodeFPCUnit.lpr
@@ -5,8 +5,8 @@ program AdventOfCodeFPCUnit;
uses
Interfaces, Forms, GuiTestRunner, USolver, UBaseTestCases, UTrebuchetTestCases, UCubeConundrumTestCases,
UGearRatiosTestCases, UScratchcardsTestCases, UGiveSeedFertilizerTestCases, UWaitForItTestCases, UCamelCardsTestCases,
- UHauntedWastelandTestCases, UMirageMaintenanceTestCases, UPipeMazeTestCases, UCosmicExpansionTestCases,
- UHotSpringsTestCases, UPointOfIncidenceTestCases, UParabolicReflectorDishTestCases;
+ UHauntedWastelandTestCases, UMirageMaintenanceTestCases, UPipeMazeTestCases, UCosmicExpansionTestCases,
+ UHotSpringsTestCases, UPointOfIncidenceTestCases, UParabolicReflectorDishTestCases, ULensLibraryTestCases;
{$R *.res}
diff --git a/tests/ULensLibraryTestCases.pas b/tests/ULensLibraryTestCases.pas
new file mode 100644
index 0000000..f22a345
--- /dev/null
+++ b/tests/ULensLibraryTestCases.pas
@@ -0,0 +1,78 @@
+{
+ 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 ULensLibraryTestCases;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, fpcunit, testregistry, USolver, UBaseTestCases, ULensLibrary;
+
+type
+
+ { TLensLibraryFullDataTestCase }
+
+ TLensLibraryFullDataTestCase = class(TEngineBaseTest)
+ protected
+ function CreateSolver: ISolver; override;
+ published
+ procedure TestPart1;
+ end;
+
+ { TLensLibraryExampleTestCase }
+
+ TLensLibraryExampleTestCase = class(TExampleEngineBaseTest)
+ protected
+ function CreateSolver: ISolver; override;
+ published
+ procedure TestPart1;
+ end;
+
+implementation
+
+{ TLensLibraryFullDataTestCase }
+
+function TLensLibraryFullDataTestCase.CreateSolver: ISolver;
+begin
+ Result := TLensLibrary.Create;
+end;
+
+procedure TLensLibraryFullDataTestCase.TestPart1;
+begin
+ AssertEquals(519041, FSolver.GetResultPart1);
+end;
+
+{ TLensLibraryExampleTestCase }
+
+function TLensLibraryExampleTestCase.CreateSolver: ISolver;
+begin
+ Result := TLensLibrary.Create;
+end;
+
+procedure TLensLibraryExampleTestCase.TestPart1;
+begin
+ AssertEquals(1320, FSolver.GetResultPart1);
+end;
+
+initialization
+
+ RegisterTest(TLensLibraryFullDataTestCase);
+ RegisterTest(TLensLibraryExampleTestCase);
+end.
+