Day 23 speedup (#38)

This commit is contained in:
Patrick Stevens
2022-12-23 14:13:26 +00:00
committed by GitHub
parent 486c36db21
commit 34dab08fbf
4 changed files with 32 additions and 23 deletions

View File

@@ -48,11 +48,12 @@ module Day23 =
proposedEndSteps.Clear () proposedEndSteps.Clear ()
for elf in board do for elf in board do
let mutable hasAdjacentElf = false let mutable adjacentElfOffsetX = Int32.MinValue
let mutable adjacentElfOffsetY = Int32.MinValue
for xOffset = -1 to 1 do for xOffset = -1 to 1 do
for yOffset = -1 to 1 do for yOffset = -1 to 1 do
if not hasAdjacentElf && (xOffset <> 0 || yOffset <> 0) then if adjacentElfOffsetX = Int32.MinValue && (xOffset <> 0 || yOffset <> 0) then
let adjacentElf = let adjacentElf =
{ {
X = elf.X + xOffset X = elf.X + xOffset
@@ -60,12 +61,20 @@ module Day23 =
} }
if board.Contains adjacentElf then if board.Contains adjacentElf then
hasAdjacentElf <- true adjacentElfOffsetX <- xOffset
if hasAdjacentElf then adjacentElfOffsetY <- yOffset
if adjacentElfOffsetX <> Int32.MinValue then
let mutable proposedEndPlace = ValueNone let mutable proposedEndPlace = ValueNone
for struct (proposedX, proposedY) in proposedDirections do for struct (proposedX, proposedY) in proposedDirections do
if proposedX = 0 && proposedY = adjacentElfOffsetY then
()
elif proposedY = 0 && proposedX = adjacentElfOffsetX then
()
else
let mutable hasElfInDestination = false let mutable hasElfInDestination = false
if proposedEndPlace.IsNone then if proposedEndPlace.IsNone then

View File

@@ -10,9 +10,9 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
``` ```
| Method | Day | IsPartOne | Mean | Error | StdDev | | Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |-------------:|----------:|----------:| |---------- |---- |---------- |-------------:|----------:|----------:|
| **Benchmark** | **21** | **False** | **649.0 μs** | **4.46 μs** | **3.96 μs** | | **Benchmark** | **21** | **False** | **720.1 μs** | **11.79 μs** | **11.03 μs** |
| **Benchmark** | **21** | **True** | **584.9 μs** | **4.29 μs** | **3.80 μs** | | **Benchmark** | **21** | **True** | **588.8 μs** | **3.52 μs** | **3.12 μs** |
| **Benchmark** | **22** | **False** | **331.7 μs** | **2.26 μs** | **2.12 μs** | | **Benchmark** | **22** | **False** | **336.7 μs** | **2.82 μs** | **2.50 μs** |
| **Benchmark** | **22** | **True** | **220.6 μs** | **0.70 μs** | **0.62 μs** | | **Benchmark** | **22** | **True** | **220.5 μs** | **1.51 μs** | **1.41 μs** |
| **Benchmark** | **23** | **False** | **346,889.4 μs** | **900.55 μs** | **798.31 μs** | | **Benchmark** | **23** | **False** | **333,927.6 μs** | **577.75 μs** | **512.16 μs** |
| **Benchmark** | **23** | **True** | **3,128.1 μs** | **4.91 μs** | **4.35 μs** | | **Benchmark** | **23** | **True** | **2,782.4 μs** | **7.04 μs** | **6.58 μs** |

View File

@@ -1,7 +1,7 @@
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Day,IsPartOne,Mean,Error,StdDev Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Day,IsPartOne,Mean,Error,StdDev
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,False,649.0 μs,4.46 μs,3.96 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,False,720.1 μs,11.79 μs,11.03 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,True,584.9 μs,4.29 μs,3.80 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,True,588.8 μs,3.52 μs,3.12 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,False,331.7 μs,2.26 μs,2.12 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,False,336.7 μs,2.82 μs,2.50 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,True,220.6 μs,0.70 μs,0.62 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,True,220.5 μs,1.51 μs,1.41 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,False,"346,889.4 μs",900.55 μs,798.31 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,False,"333,927.6 μs",577.75 μs,512.16 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,True,"3,128.1 μs",4.91 μs,4.35 μs Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,True,"2,782.4 μs",7.04 μs,6.58 μs
1 Method Job AnalyzeLaunchVariance EvaluateOverhead MaxAbsoluteError MaxRelativeError MinInvokeCount MinIterationTime OutlierMode Affinity EnvironmentVariables Jit Platform PowerPlanMode Runtime AllowVeryLargeObjects Concurrent CpuGroups Force HeapAffinitizeMask HeapCount NoAffinitize RetainVm Server Arguments BuildConfiguration Clock EngineFactory NuGetReferences Toolchain IsMutator InvocationCount IterationCount IterationTime LaunchCount MaxIterationCount MaxWarmupIterationCount MemoryRandomization MinIterationCount MinWarmupIterationCount RunStrategy UnrollFactor WarmupCount Day IsPartOne Mean Error StdDev
2 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 21 False 649.0 μs 720.1 μs 4.46 μs 11.79 μs 3.96 μs 11.03 μs
3 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 21 True 584.9 μs 588.8 μs 4.29 μs 3.52 μs 3.80 μs 3.12 μs
4 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 22 False 331.7 μs 336.7 μs 2.26 μs 2.82 μs 2.12 μs 2.50 μs
5 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 22 True 220.6 μs 220.5 μs 0.70 μs 1.51 μs 0.62 μs 1.41 μs
6 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 23 False 346,889.4 μs 333,927.6 μs 900.55 μs 577.75 μs 798.31 μs 512.16 μs
7 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 23 True 3,128.1 μs 2,782.4 μs 4.91 μs 7.04 μs 4.35 μs 6.58 μs

View File

@@ -2,7 +2,7 @@
<html lang='en'> <html lang='en'>
<head> <head>
<meta charset='utf-8' /> <meta charset='utf-8' />
<title>AdventOfCode2022.App.Benchmark21To25-20221223-135302</title> <title>AdventOfCode2022.App.Benchmark21To25-20221223-140756</title>
<style type="text/css"> <style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; } table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -24,12 +24,12 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
<table> <table>
<thead><tr><th>Method</th><th>Day</th><th>IsPartOne</th><th> Mean</th><th>Error</th><th>StdDev</th> <thead><tr><th>Method</th><th>Day</th><th>IsPartOne</th><th> Mean</th><th>Error</th><th>StdDev</th>
</tr> </tr>
</thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>649.0 &mu;s</td><td>4.46 &mu;s</td><td>3.96 &mu;s</td> </thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>720.1 &mu;s</td><td>11.79 &mu;s</td><td>11.03 &mu;s</td>
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>584.9 &mu;s</td><td>4.29 &mu;s</td><td>3.80 &mu;s</td> </tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>588.8 &mu;s</td><td>3.52 &mu;s</td><td>3.12 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>331.7 &mu;s</td><td>2.26 &mu;s</td><td>2.12 &mu;s</td> </tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>336.7 &mu;s</td><td>2.82 &mu;s</td><td>2.50 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>220.6 &mu;s</td><td>0.70 &mu;s</td><td>0.62 &mu;s</td> </tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>220.5 &mu;s</td><td>1.51 &mu;s</td><td>1.41 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>346,889.4 &mu;s</td><td>900.55 &mu;s</td><td>798.31 &mu;s</td> </tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>333,927.6 &mu;s</td><td>577.75 &mu;s</td><td>512.16 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>3,128.1 &mu;s</td><td>4.91 &mu;s</td><td>4.35 &mu;s</td> </tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,782.4 &mu;s</td><td>7.04 &mu;s</td><td>6.58 &mu;s</td>
</tr></tbody></table> </tr></tbody></table>
</body> </body>
</html> </html>