This commit is contained in:
Patrick Stevens
2022-12-15 21:54:26 +00:00
committed by GitHub
parent 7b966eaa18
commit 5984daee58
12 changed files with 379 additions and 31 deletions

View File

@@ -24,6 +24,7 @@
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day12.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day13.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day14.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day15.txt" />
</ItemGroup>
<ItemGroup>

View File

@@ -2,5 +2,5 @@ namespace AdventOfCode2022.App
[<RequireQualifiedAccess>]
module Inputs =
let days = Array.init 14 (fun day -> Assembly.readResource $"Day%i{day + 1}.txt")
let days = Array.init 15 (fun day -> Assembly.readResource $"Day%i{day + 1}.txt")
let inline day (i : int) = days.[i - 1]

View File

@@ -47,7 +47,7 @@ type Benchmark11To15 () =
[<GlobalSetup>]
member _.Setup () = Run.shouldWrite <- false
[<Params(11, 12, 13, 14)>]
[<Params(11, 12, 13, 14, 15)>]
member val Day = 0 with get, set
[<Params(false, true)>]
@@ -55,7 +55,7 @@ type Benchmark11To15 () =
[<Benchmark>]
member this.Benchmark () : unit =
Run.allRuns.[this.Day - 1] this.IsPartOne (Inputs.day this.Day)
Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day)
[<GlobalCleanup>]
member _.Cleanup () = Run.shouldWrite <- true

View File

@@ -204,6 +204,20 @@ module Run =
printfn "%i" output
let day15 (partTwo : bool) (input : string) =
let day15 = StringSplitEnumerator.make '\n' input
if not partTwo then
let output = Day15.part1 2000000 day15
if shouldWrite then
printfn "%i" output
else
let output = Day15.part2 4000000 day15
if shouldWrite then
printfn "%i" output
let allRuns =
[|
day1
@@ -220,4 +234,5 @@ module Run =
day12
day13
day14
day15
|]

View File

@@ -22,6 +22,7 @@
<Compile Include="Day12.fs" />
<Compile Include="Day13.fs" />
<Compile Include="Day14.fs" />
<Compile Include="Day15.fs" />
<EmbeddedResource Include="Inputs\Day1.txt" />
<EmbeddedResource Include="Inputs\Day2.txt" />
<EmbeddedResource Include="Inputs\Day3.txt" />
@@ -36,6 +37,7 @@
<EmbeddedResource Include="Inputs\Day12.txt" />
<EmbeddedResource Include="Inputs\Day13.txt" />
<EmbeddedResource Include="Inputs\Day14.txt" />
<EmbeddedResource Include="Inputs\Day15.txt" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,48 @@
namespace AdventOfCode2022.Test
open NUnit.Framework
open FsUnitTyped
open AdventOfCode2022
[<TestFixture>]
module TestDay15 =
let input =
"""Sensor at x=2, y=18: closest beacon is at x=-2, y=15
Sensor at x=9, y=16: closest beacon is at x=10, y=16
Sensor at x=13, y=2: closest beacon is at x=15, y=3
Sensor at x=12, y=14: closest beacon is at x=10, y=16
Sensor at x=10, y=20: closest beacon is at x=10, y=16
Sensor at x=14, y=17: closest beacon is at x=10, y=16
Sensor at x=8, y=7: closest beacon is at x=2, y=10
Sensor at x=2, y=0: closest beacon is at x=2, y=10
Sensor at x=0, y=11: closest beacon is at x=2, y=10
Sensor at x=20, y=14: closest beacon is at x=25, y=17
Sensor at x=17, y=20: closest beacon is at x=21, y=22
Sensor at x=16, y=7: closest beacon is at x=15, y=3
Sensor at x=14, y=3: closest beacon is at x=15, y=3
Sensor at x=20, y=1: closest beacon is at x=15, y=3
"""
[<Test>]
let ``Part 1, given`` () =
Day15.part1 10 (StringSplitEnumerator.make '\n' input) |> shouldEqual 26
[<Test>]
let ``Part 1`` () =
let input = Assembly.readResource "Day15.txt"
Day15.part1 2000000 (StringSplitEnumerator.make '\n' input)
|> shouldEqual 6275922
[<Test>]
let ``Part 2, given`` () =
Day15.part2 20 (StringSplitEnumerator.make '\n' input) |> shouldEqual 56000011
[<Test>]
let ``Part 2`` () =
let input = Assembly.readResource "Day15.txt"
Day15.part2 4000000 (StringSplitEnumerator.make '\n' input)
|> shouldEqual 11747175442119L

View File

@@ -0,0 +1,23 @@
Sensor at x=3289936, y=2240812: closest beacon is at x=3232809, y=2000000
Sensor at x=30408, y=622853: closest beacon is at x=-669401, y=844810
Sensor at x=3983196, y=3966332: closest beacon is at x=3232807, y=4625568
Sensor at x=929672, y=476353: closest beacon is at x=-669401, y=844810
Sensor at x=1485689, y=3597734: closest beacon is at x=1951675, y=3073734
Sensor at x=69493, y=1886070: closest beacon is at x=-669401, y=844810
Sensor at x=2146060, y=3999371: closest beacon is at x=2300657, y=4128792
Sensor at x=3228558, y=3890086: closest beacon is at x=3232807, y=4625568
Sensor at x=3031444, y=2295853: closest beacon is at x=2928827, y=2611422
Sensor at x=374444, y=3977240: closest beacon is at x=-888612, y=4039783
Sensor at x=1207660, y=2710720: closest beacon is at x=1951675, y=3073734
Sensor at x=3851310, y=61626: closest beacon is at x=4807592, y=976495
Sensor at x=3195193, y=3022787: closest beacon is at x=2928827, y=2611422
Sensor at x=1784895, y=2111901: closest beacon is at x=1951675, y=3073734
Sensor at x=2894075, y=2427030: closest beacon is at x=2928827, y=2611422
Sensor at x=3301867, y=803327: closest beacon is at x=3232809, y=2000000
Sensor at x=2506616, y=3673347: closest beacon is at x=2300657, y=4128792
Sensor at x=2628426, y=3054377: closest beacon is at x=1951675, y=3073734
Sensor at x=2521975, y=1407505: closest beacon is at x=3232809, y=2000000
Sensor at x=2825447, y=2045173: closest beacon is at x=3232809, y=2000000
Sensor at x=2261212, y=2535886: closest beacon is at x=2928827, y=2611422
Sensor at x=3956000, y=1616443: closest beacon is at x=3232809, y=2000000
Sensor at x=3870784, y=2872668: closest beacon is at x=2928827, y=2611422

View File

@@ -24,6 +24,7 @@
<Compile Include="Day12.fs" />
<Compile Include="Day13.fs" />
<Compile Include="Day14.fs" />
<Compile Include="Day15.fs" />
</ItemGroup>
</Project>

252
AdventOfCode2022/Day15.fs Normal file
View File

@@ -0,0 +1,252 @@
namespace AdventOfCode2022
open System
open System.Collections.Generic
#if DEBUG
open Checked
#endif
[<RequireQualifiedAccess>]
module Day15 =
let parse (lines : StringSplitEnumerator) : Coordinate ResizeArray * Coordinate ResizeArray =
use mutable enum = lines
let sensors = ResizeArray ()
let beacons = ResizeArray ()
while enum.MoveNext () do
if not (enum.Current.IsWhiteSpace ()) then
let line = enum.Current.TrimEnd ()
let mutable equalsSplit = StringSplitEnumerator.make' '=' line
StringSplitEnumerator.chomp "Sensor at x" &equalsSplit
if not (equalsSplit.MoveNext ()) then
failwith "expected another entry"
let x = Int32.Parse (equalsSplit.Current.Slice (0, equalsSplit.Current.IndexOf ','))
if not (equalsSplit.MoveNext ()) then
failwith "expected another entry"
let y = Int32.Parse (equalsSplit.Current.Slice (0, equalsSplit.Current.IndexOf ':'))
let sensor =
{
X = x
Y = y
}
if not (equalsSplit.MoveNext ()) then
failwith "expected another entry"
let x = Int32.Parse (equalsSplit.Current.Slice (0, equalsSplit.Current.IndexOf ','))
if not (equalsSplit.MoveNext ()) then
failwith "expected another entry"
let y = Int32.Parse equalsSplit.Current
let closest =
{
X = x
Y = y
}
sensors.Add sensor
beacons.Add closest
sensors, beacons
let inline manhattan (p1 : Coordinate) (p2 : Coordinate) : int = abs (p1.X - p2.X) + abs (p1.Y - p2.Y)
let inline cantorBijection (x : int) (y : int) : int64 =
let sum = x + y
let major =
if sum % 2 = 0 then
int64 (sum / 2) * int64 (sum + 1)
else
int64 sum * int64 ((sum + 1) / 2)
major + int64 y
let inline couldBeBeacon
(sensors : ResizeArray<Coordinate>)
(closestManhattans : int[])
(point : Coordinate)
: bool
=
let mutable keepGoing = true
let mutable i = 0
while keepGoing && i < sensors.Count do
if manhattan point sensors.[i] <= closestManhattans.[i] then
keepGoing <- false
i <- i + 1
keepGoing
let toHashSet (arr : Coordinate ResizeArray) : Coordinate HashSet =
let output = HashSet ()
for beacon in arr do
output.Add beacon |> ignore
output
let part1 (y : int) (lines : StringSplitEnumerator) : int =
let sensors, beacons = parse lines
// The ith sensor has no beacons with Manhattan distance smaller than closestManhattans.[i]
let closestManhattans =
Array.init sensors.Count (fun i -> manhattan sensors.[i] beacons.[i])
let mutable minX = Int32.MaxValue
let mutable maxX = Int32.MinValue
let mutable i = 0
for point in sensors do
minX <- min minX (point.X - closestManhattans.[i])
maxX <- max maxX (point.X + closestManhattans.[i])
i <- i + 1
let mutable count = 0
for x in minX..maxX do
let point =
{
X = x
Y = y
}
if not (couldBeBeacon sensors closestManhattans point) then
count <- count + 1
// We've overcounted by the number of beacons in the row - they not only *could* be beacons, they *are* beacons!
let beacons = toHashSet beacons
for beacon in beacons do
if minX <= beacon.X && beacon.X <= maxX && beacon.Y = y then
count <- count - 1
count
let part2 (maxSearch : int) (lines : StringSplitEnumerator) : int64 =
let sensors, beacons = parse lines
let sensorXCoords =
let arr = Array.zeroCreate (sensors.Count + 2)
for i in 0 .. sensors.Count - 1 do
arr.[i] <- sensors.[i].X
arr.[sensors.Count] <- maxSearch
Array.sortInPlace arr
arr
let sensorYCoords =
let arr = Array.zeroCreate (sensors.Count + 2)
for i in 0 .. sensors.Count - 1 do
arr.[i] <- sensors.[i].Y
arr.[sensors.Count] <- maxSearch
Array.sortInPlace arr
arr
let mutable answer = -1L
let mutable xIndex = 0
while answer = -1L && xIndex < sensorXCoords.Length - 1 do
let xMin = sensorXCoords.[xIndex]
xIndex <- xIndex + 1
let xMax = sensorXCoords.[xIndex]
let mutable yIndex = 0
while answer = -1L && yIndex < sensorYCoords.Length - 1 do
let yMin = sensorYCoords.[yIndex]
yIndex <- yIndex + 1
let yMax = sensorYCoords.[yIndex]
let mutable minusXMinusYConstraint = Int32.MaxValue
let mutable minusXPlusYConstraint = Int32.MaxValue
let mutable plusXMinusYConstraint = Int32.MaxValue
let mutable plusXPlusYConstraint = Int32.MaxValue
for i in 0 .. sensors.Count - 1 do
let sensor = sensors.[i]
let beacon = beacons.[i]
let manhattan = abs (sensor.X - beacon.X) + abs (sensor.Y - beacon.Y)
if sensor.X <= xMax then
if sensor.Y <= yMax then
minusXMinusYConstraint <- min minusXMinusYConstraint (-manhattan - sensor.X - sensor.Y - 1)
else
minusXPlusYConstraint <- min minusXPlusYConstraint (-manhattan - sensor.X + sensor.Y - 1)
else if sensor.Y <= yMax then
plusXMinusYConstraint <- min plusXMinusYConstraint (-manhattan + sensor.X - sensor.Y - 1)
else
plusXPlusYConstraint <- min plusXPlusYConstraint (-manhattan + sensor.X + sensor.Y - 1)
// (fst constraints).{x, y} <= (snd constraints), and also xMin <= x <= xMax and
// yMin <= y <= yMax.
let mutable falsified = false
if minusXMinusYConstraint <> Int32.MaxValue then
// Have -x-y <= upperBound1, i.e. -upperBound1 <= x+y,
// which we could falsify if -upperBound1 > x+y.
if xMax + yMax < -minusXMinusYConstraint then
falsified <- true
if minusXPlusYConstraint <> Int32.MaxValue then
// Have -x + y <= upperBound1, which we could falsify if y > upperBound1 + x
if yMin > minusXPlusYConstraint + xMax then
falsified <- true
if plusXPlusYConstraint <> Int32.MaxValue then
// Have x + y <= upperBound1, which we could falsify always if xMin + yMin > upperBound1.
if xMin + yMin > plusXPlusYConstraint then
falsified <- true
if plusXMinusYConstraint <> Int32.MaxValue then
// Have x - y <= upperBound1, which we could falsify if x > upperBound1 + y
if xMin > plusXMinusYConstraint + yMax then
falsified <- true
if not falsified then
// The most likely way for there to be no slack is if equality holds throughout both conjugate pairs
// of constraints.
// (It's also possible for there to be no slack by having one of the "x <= 33" constraints binding.
// See below for the treatment of this case.)
if
minusXMinusYConstraint = -plusXPlusYConstraint
&& plusXMinusYConstraint = -minusXPlusYConstraint
then
let y = (plusXPlusYConstraint - plusXMinusYConstraint) / 2
let x = (plusXPlusYConstraint - minusXPlusYConstraint) / 2
if xMin <= x && x <= xMax && yMin <= y && y <= yMax then
answer <- int64 x * 4000000L + int64 y
if answer = -1L then
// In fact one of the xMax/xMin or yMax/yMin constraints binds.
let mutable xIndex = 0
while answer = -1 && xIndex < sensorXCoords.Length do
xIndex <- xIndex + 1
// Try with this x.
let _x = sensorXCoords.Length
for _sensor in sensors do
// Construct the necessary inequalities, then solve them.
failwith "I couldn't be bothered to implement this"
answer

View File

@@ -8,13 +8,15 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
```
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |--------------:|-----------:|-----------:|
| **Benchmark** | **11** | **False** | **7.227 μs** | **0.0235 μs** | **0.0220 μs** |
| **Benchmark** | **11** | **True** | **2,870.251 μs** | **5.5620 μs** | **5.2027 μs** |
| **Benchmark** | **12** | **False** | **20,360.326 μs** | **56.7953 μs** | **50.3475 μs** |
| **Benchmark** | **12** | **True** | **21,665.562 μs** | **63.5696 μs** | **56.3528 μs** |
| **Benchmark** | **13** | **False** | **335.692 μs** | **1.3893 μs** | **1.2995 μs** |
| **Benchmark** | **13** | **True** | **615.878 μs** | **1.9194 μs** | **1.6028 μs** |
| **Benchmark** | **14** | **False** | **357.696 μs** | **1.3375 μs** | **1.1169 μs** |
| **Benchmark** | **14** | **True** | **4,645.477 μs** | **11.4562 μs** | **10.1556 μs** |
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |---------------:|------------:|------------:|
| **Benchmark** | **11** | **False** | **2,862.919 μs** | **19.7895 μs** | **16.5251 μs** |
| **Benchmark** | **11** | **True** | **7.262 μs** | **0.0519 μs** | **0.0460 μs** |
| **Benchmark** | **12** | **False** | **20,219.075 μs** | **39.5568 μs** | **35.0661 μs** |
| **Benchmark** | **12** | **True** | **18,677.669 μs** | **198.5503 μs** | **176.0097 μs** |
| **Benchmark** | **13** | **False** | **646.469 μs** | **9.7092 μs** | **8.6069 μs** |
| **Benchmark** | **13** | **True** | **351.817 μs** | **1.0058 μs** | **0.8916 μs** |
| **Benchmark** | **14** | **False** | **4,311.168 μs** | **9.2836 μs** | **7.7522 μs** |
| **Benchmark** | **14** | **True** | **376.619 μs** | **0.8042 μs** | **0.6715 μs** |
| **Benchmark** | **15** | **False** | **33.923 μs** | **0.1404 μs** | **0.1313 μs** |
| **Benchmark** | **15** | **True** | **180,017.411 μs** | **448.7256 μs** | **374.7062 μs** |

View File

@@ -1,9 +1,11 @@
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,11,False,7.227 μs,0.0235 μs,0.0220 μ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,11,True,"2,870.251 μs",5.5620 μs,5.2027 μ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,12,False,"20,360.326 μs",56.7953 μs,50.3475 μ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,12,True,"21,665.562 μs",63.5696 μs,56.3528 μ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,13,False,335.692 μs,1.3893 μs,1.2995 μ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,13,True,615.878 μs,1.9194 μs,1.6028 μ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,14,False,357.696 μs,1.3375 μs,1.1169 μ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,14,True,"4,645.477 μs",11.4562 μs,10.1556 μ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,11,False,"2,862.919 μs",19.7895 μs,16.5251 μ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,11,True,7.262 μs,0.0519 μs,0.0460 μ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,12,False,"20,219.075 μs",39.5568 μs,35.0661 μ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,12,True,"18,677.669 μs",198.5503 μs,176.0097 μ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,13,False,646.469 μs,9.7092 μs,8.6069 μ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,13,True,351.817 μs,1.0058 μs,0.8916 μ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,14,False,"4,311.168 μs",9.2836 μs,7.7522 μ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,14,True,376.619 μs,0.8042 μs,0.6715 μ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,15,False,33.923 μs,0.1404 μs,0.1313 μ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,15,True,"180,017.411 μs",448.7256 μs,374.7062 μ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 11 False 7.227 μs 2,862.919 μs 0.0235 μs 19.7895 μs 0.0220 μs 16.5251 μ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 11 True 2,870.251 μs 7.262 μs 5.5620 μs 0.0519 μs 5.2027 μs 0.0460 μ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 12 False 20,360.326 μs 20,219.075 μs 56.7953 μs 39.5568 μs 50.3475 μs 35.0661 μ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 12 True 21,665.562 μs 18,677.669 μs 63.5696 μs 198.5503 μs 56.3528 μs 176.0097 μ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 13 False 335.692 μs 646.469 μs 1.3893 μs 9.7092 μs 1.2995 μs 8.6069 μ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 13 True 615.878 μs 351.817 μs 1.9194 μs 1.0058 μs 1.6028 μs 0.8916 μs
8 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 14 False 357.696 μs 4,311.168 μs 1.3375 μs 9.2836 μs 1.1169 μs 7.7522 μs
9 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 14 True 4,645.477 μs 376.619 μs 11.4562 μs 0.8042 μs 10.1556 μs 0.6715 μs
10 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 15 False 33.923 μs 0.1404 μs 0.1313 μs
11 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 15 True 180,017.411 μs 448.7256 μs 374.7062 μs

View File

@@ -2,7 +2,7 @@
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>AdventOfCode2022.App.Benchmark11To15-20221214-091719</title>
<title>AdventOfCode2022.App.Benchmark11To15-20221215-214031</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -22,16 +22,18 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
<pre><code></code></pre>
<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>
</thead><tbody><tr><td>Benchmark</td><td>11</td><td>False</td><td>7.227 &mu;s</td><td>0.0235 &mu;s</td><td>0.0220 &mu;s</td>
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>2,870.251 &mu;s</td><td>5.5620 &mu;s</td><td>5.2027 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>20,360.326 &mu;s</td><td>56.7953 &mu;s</td><td>50.3475 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>21,665.562 &mu;s</td><td>63.5696 &mu;s</td><td>56.3528 &mu;s</td>
</tr><tr><td>Benchmark</td><td>13</td><td>False</td><td>335.692 &mu;s</td><td>1.3893 &mu;s</td><td>1.2995 &mu;s</td>
</tr><tr><td>Benchmark</td><td>13</td><td>True</td><td>615.878 &mu;s</td><td>1.9194 &mu;s</td><td>1.6028 &mu;s</td>
</tr><tr><td>Benchmark</td><td>14</td><td>False</td><td>357.696 &mu;s</td><td>1.3375 &mu;s</td><td>1.1169 &mu;s</td>
</tr><tr><td>Benchmark</td><td>14</td><td>True</td><td>4,645.477 &mu;s</td><td>11.4562 &mu;s</td><td>10.1556 &mu;s</td>
</thead><tbody><tr><td>Benchmark</td><td>11</td><td>False</td><td>2,862.919 &mu;s</td><td>19.7895 &mu;s</td><td>16.5251 &mu;s</td>
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>7.262 &mu;s</td><td>0.0519 &mu;s</td><td>0.0460 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>20,219.075 &mu;s</td><td>39.5568 &mu;s</td><td>35.0661 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>18,677.669 &mu;s</td><td>198.5503 &mu;s</td><td>176.0097 &mu;s</td>
</tr><tr><td>Benchmark</td><td>13</td><td>False</td><td>646.469 &mu;s</td><td>9.7092 &mu;s</td><td>8.6069 &mu;s</td>
</tr><tr><td>Benchmark</td><td>13</td><td>True</td><td>351.817 &mu;s</td><td>1.0058 &mu;s</td><td>0.8916 &mu;s</td>
</tr><tr><td>Benchmark</td><td>14</td><td>False</td><td>4,311.168 &mu;s</td><td>9.2836 &mu;s</td><td>7.7522 &mu;s</td>
</tr><tr><td>Benchmark</td><td>14</td><td>True</td><td>376.619 &mu;s</td><td>0.8042 &mu;s</td><td>0.6715 &mu;s</td>
</tr><tr><td>Benchmark</td><td>15</td><td>False</td><td>33.923 &mu;s</td><td>0.1404 &mu;s</td><td>0.1313 &mu;s</td>
</tr><tr><td>Benchmark</td><td>15</td><td>True</td><td>180,017.411 &mu;s</td><td>448.7256 &mu;s</td><td>374.7062 &mu;s</td>
</tr></tbody></table>
</body>
</html>