Added p/puzzle command line option to run only specific puzzles, and updated the application help text
This commit is contained in:
		
							parent
							
								
									55f8f3d674
								
							
						
					
					
						commit
						8d5757fae0
					
				| @ -23,10 +23,11 @@ uses | ||||
|   {$IFDEF UNIX} | ||||
|   cthreads, | ||||
|   {$ENDIF} | ||||
|   Classes, SysUtils, CustApp, USolver, UTrebuchet, UCubeConundrum, UGearRatios, UScratchcards, UGiveSeedFertilizer, | ||||
|   UWaitForIt, UCamelCards, UHauntedWasteland, UNumberTheory, UMirageMaintenance, UPipeMaze, UCosmicExpansion, | ||||
|   UHotSprings, UPointOfIncidence, UParabolicReflectorDish, ULensLibrary, UFloorWillBeLava, UClumsyCrucible, | ||||
|   ULavaductLagoon, UAplenty, UPulsePropagation; | ||||
|   Classes, SysUtils, CustApp, Generics.Collections, USolver, | ||||
|   UTrebuchet, UCubeConundrum, UGearRatios, UScratchcards, UGiveSeedFertilizer, UWaitForIt, UCamelCards, | ||||
|   UHauntedWasteland, UNumberTheory, UMirageMaintenance, UPipeMaze, UCosmicExpansion, UHotSprings, UPointOfIncidence, | ||||
|   UParabolicReflectorDish, ULensLibrary, UFloorWillBeLava, UClumsyCrucible, ULavaductLagoon, UAplenty, | ||||
|   UPulsePropagation; | ||||
| 
 | ||||
| type | ||||
| 
 | ||||
| @ -48,30 +49,51 @@ type | ||||
| procedure TAdventOfCode.RunPuzzleSolutions; | ||||
| var | ||||
|   engine: TSolverEngine; | ||||
|   solvers: specialize TList<Integer>; | ||||
|   p: string; | ||||
|   n: Integer; | ||||
| begin | ||||
|   WriteLn('### Advent of Code 2023 ###'); | ||||
|   engine := TSolverEngine.Create('data'); | ||||
|   engine.RunAndFree(TTrebuchet.Create); | ||||
|   engine.RunAndFree(TCubeConundrum.Create); | ||||
|   engine.RunAndFree(TGearRatios.Create); | ||||
|   engine.RunAndFree(TScratchcards.Create); | ||||
|   engine.RunAndFree(TGiveSeedFertilizer.Create); | ||||
|   engine.RunAndFree(TWaitForIt.Create); | ||||
|   engine.RunAndFree(TCamelCards.Create); | ||||
|   engine.RunAndFree(THauntedWasteland.Create); | ||||
|   engine.RunAndFree(TMirageMaintenance.Create); | ||||
|   engine.RunAndFree(TPipeMaze.Create); | ||||
|   engine.RunAndFree(TCosmicExpansion.Create); | ||||
|   engine.RunAndFree(THotSprings.Create); | ||||
|   engine.RunAndFree(TPointOfIncidence.Create); | ||||
|   engine.RunAndFree(TParabolicReflectorDish.Create); | ||||
|   engine.RunAndFree(TLensLibrary.Create); | ||||
|   engine.RunAndFree(TFloorWillBeLava.Create); | ||||
|   engine.RunAndFree(TClumsyCrucible.Create); | ||||
|   engine.RunAndFree(TLavaductLagoon.Create); | ||||
|   engine.RunAndFree(TAplenty.Create); | ||||
|   engine.RunAndFree(TPulsePropagation.Create); | ||||
| 
 | ||||
|   solvers := specialize TList<Integer>.Create; | ||||
|   if HasOption('p', 'puzzle') then | ||||
|   begin | ||||
|     for p in GetOptionValues('p', 'puzzle') do | ||||
|       if TryStrToInt(p, n) then | ||||
|         solvers.Add(n); | ||||
|   end | ||||
|   else | ||||
|     for n := 1 to 25 do | ||||
|       solvers.Add(n); | ||||
| 
 | ||||
|   for n in solvers do | ||||
|     case n of | ||||
|       1: engine.RunAndFree(TTrebuchet.Create); | ||||
|       2: engine.RunAndFree(TCubeConundrum.Create); | ||||
|       3: engine.RunAndFree(TGearRatios.Create); | ||||
|       4: engine.RunAndFree(TScratchcards.Create); | ||||
|       5: engine.RunAndFree(TGiveSeedFertilizer.Create); | ||||
|       6: engine.RunAndFree(TWaitForIt.Create); | ||||
|       7: engine.RunAndFree(TCamelCards.Create); | ||||
|       8: engine.RunAndFree(THauntedWasteland.Create); | ||||
|       9: engine.RunAndFree(TMirageMaintenance.Create); | ||||
|       10: engine.RunAndFree(TPipeMaze.Create); | ||||
|       11: engine.RunAndFree(TCosmicExpansion.Create); | ||||
|       12: engine.RunAndFree(THotSprings.Create); | ||||
|       13: engine.RunAndFree(TPointOfIncidence.Create); | ||||
|       14: engine.RunAndFree(TParabolicReflectorDish.Create); | ||||
|       15: engine.RunAndFree(TLensLibrary.Create); | ||||
|       16: engine.RunAndFree(TFloorWillBeLava.Create); | ||||
|       17: engine.RunAndFree(TClumsyCrucible.Create); | ||||
|       18: engine.RunAndFree(TLavaductLagoon.Create); | ||||
|       19: engine.RunAndFree(TAplenty.Create); | ||||
|       20: engine.RunAndFree(TPulsePropagation.Create); | ||||
|     end; | ||||
| 
 | ||||
|   engine.Free; | ||||
|   solvers.Free; | ||||
|   WriteLn; | ||||
| end; | ||||
| 
 | ||||
| procedure TAdventOfCode.DoRun; | ||||
| @ -79,7 +101,7 @@ var | ||||
|   ErrorMsg: String; | ||||
| begin | ||||
|   // quick check parameters | ||||
|   ErrorMsg := CheckOptions('h', 'help'); | ||||
|   ErrorMsg := CheckOptions('hp:', ['help', 'puzzle:']); | ||||
|   if ErrorMsg <> '' then | ||||
|   begin | ||||
|     ShowException(Exception.Create(ErrorMsg)); | ||||
| @ -95,7 +117,6 @@ begin | ||||
|     Exit; | ||||
|   end; | ||||
| 
 | ||||
|   { add your program here } | ||||
|   RunPuzzleSolutions; | ||||
| 
 | ||||
|   // stop program loop | ||||
| @ -115,8 +136,13 @@ end; | ||||
| 
 | ||||
| procedure TAdventOfCode.WriteHelp; | ||||
| begin | ||||
|   { add your help code here } | ||||
|   writeln('Usage: ', ExeName, ' -h'); | ||||
|   WriteLn('Usage: ', ExeName, ' [Options]'); | ||||
|   WriteLn('Options:'); | ||||
|   WriteLn('  --help, -h'); | ||||
|   WriteLn('      Shows this usage help.'); | ||||
|   WriteLn('  --puzzle=<n>, -p <n>'); | ||||
|   WriteLn('      Instead of running all solvers, only run the one for day <n>.'); | ||||
|   WriteLn('      Integer from 1 to 25. Can be specified multiple times.'); | ||||
| end; | ||||
| 
 | ||||
| var | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user