diff --git a/AdventOfCode2022/Day23.fs b/AdventOfCode2022/Day23.fs index ae6fec6..6c876cd 100644 --- a/AdventOfCode2022/Day23.fs +++ b/AdventOfCode2022/Day23.fs @@ -41,7 +41,7 @@ module Day23 = // Returns true if an elf moved. let inline oneRound (board : HashSet) - (proposedEndSteps : Dictionary<_, _>) + (proposedEndSteps : Dictionary) (proposedDirections : _ array) : bool = @@ -104,15 +104,16 @@ module Day23 = match proposedEndPlace with | ValueNone -> () | ValueSome loc -> - if not (proposedEndSteps.TryAdd (loc, ValueSome elf)) then - proposedEndSteps.[loc] <- ValueNone + if not (proposedEndSteps.TryAdd (loc, elf)) then + // It's not possible for more than two elves to want to move into the same position. + // Indeed, otherwise that position would be surrounded by three elves orthogonally, + // but then the two of those elves who oppose each other would not want to move in this + // direction because of the third elf lying diagonal to them. + proposedEndSteps.Remove loc |> ignore for KeyValue (dest, source) in proposedEndSteps do - match source with - | ValueNone -> () - | ValueSome source -> - board.Remove source |> ignore - board.Add dest |> ignore + board.Remove source |> ignore + board.Add dest |> ignore let tmp = proposedDirections.[0] diff --git a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report-github.md b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report-github.md index 979aef0..6dd1331 100644 --- a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report-github.md +++ b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report-github.md @@ -8,11 +8,11 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores ``` -| Method | Day | IsPartOne | Mean | Error | StdDev | -|---------- |---- |---------- |-------------:|------------:|------------:| -| **Benchmark** | **21** | **False** | **646.1 μs** | **3.88 μs** | **3.63 μs** | -| **Benchmark** | **21** | **True** | **576.8 μs** | **4.40 μs** | **4.12 μs** | -| **Benchmark** | **22** | **False** | **328.5 μs** | **1.49 μs** | **1.39 μs** | -| **Benchmark** | **22** | **True** | **216.0 μs** | **1.63 μs** | **1.52 μs** | -| **Benchmark** | **23** | **False** | **357,191.8 μs** | **1,404.56 μs** | **1,313.82 μs** | -| **Benchmark** | **23** | **True** | **3,190.7 μs** | **7.80 μs** | **6.91 μs** | +| Method | Day | IsPartOne | Mean | Error | StdDev | +|---------- |---- |---------- |-------------:|----------:|----------:| +| **Benchmark** | **21** | **False** | **649.0 μs** | **4.46 μs** | **3.96 μs** | +| **Benchmark** | **21** | **True** | **584.9 μs** | **4.29 μs** | **3.80 μs** | +| **Benchmark** | **22** | **False** | **331.7 μs** | **2.26 μs** | **2.12 μs** | +| **Benchmark** | **22** | **True** | **220.6 μs** | **0.70 μs** | **0.62 μs** | +| **Benchmark** | **23** | **False** | **346,889.4 μs** | **900.55 μs** | **798.31 μs** | +| **Benchmark** | **23** | **True** | **3,128.1 μs** | **4.91 μs** | **4.35 μs** | diff --git a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.csv b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.csv index 7ba1ee2..36a2afb 100644 --- a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.csv +++ b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.csv @@ -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 -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,646.1 μs,3.88 μs,3.63 μ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,576.8 μs,4.40 μs,4.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,328.5 μs,1.49 μs,1.39 μ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,216.0 μs,1.63 μs,1.52 μ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,"357,191.8 μs","1,404.56 μs","1,313.82 μ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,190.7 μs",7.80 μs,6.91 μ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,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,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,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,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,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,True,"3,128.1 μs",4.91 μs,4.35 μs diff --git a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.html b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.html index 8453c1b..ebab15e 100644 --- a/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.html +++ b/BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmark21To25-report.html @@ -2,7 +2,7 @@ -AdventOfCode2022.App.Benchmark21To25-20221223-105901 +AdventOfCode2022.App.Benchmark21To25-20221223-135302