mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-06 18:18:40 +00:00
Day 15 (#24)
This commit is contained in:
@@ -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>
|
||||
|
@@ -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]
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|]
|
||||
|
@@ -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>
|
||||
|
48
AdventOfCode2022.Test/Day15.fs
Normal file
48
AdventOfCode2022.Test/Day15.fs
Normal 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
|
23
AdventOfCode2022.Test/Inputs/Day15.txt
Normal file
23
AdventOfCode2022.Test/Inputs/Day15.txt
Normal 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
|
@@ -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
252
AdventOfCode2022/Day15.fs
Normal 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
|
@@ -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** |
|
||||
|
@@ -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
|
||||
|
|
@@ -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 μs</td><td>0.0235 μs</td><td>0.0220 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>2,870.251 μs</td><td>5.5620 μs</td><td>5.2027 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>20,360.326 μs</td><td>56.7953 μs</td><td>50.3475 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>21,665.562 μs</td><td>63.5696 μs</td><td>56.3528 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>13</td><td>False</td><td>335.692 μs</td><td>1.3893 μs</td><td>1.2995 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>13</td><td>True</td><td>615.878 μs</td><td>1.9194 μs</td><td>1.6028 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>14</td><td>False</td><td>357.696 μs</td><td>1.3375 μs</td><td>1.1169 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>14</td><td>True</td><td>4,645.477 μs</td><td>11.4562 μs</td><td>10.1556 μs</td>
|
||||
</thead><tbody><tr><td>Benchmark</td><td>11</td><td>False</td><td>2,862.919 μs</td><td>19.7895 μs</td><td>16.5251 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>7.262 μs</td><td>0.0519 μs</td><td>0.0460 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>20,219.075 μs</td><td>39.5568 μs</td><td>35.0661 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>18,677.669 μs</td><td>198.5503 μs</td><td>176.0097 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>13</td><td>False</td><td>646.469 μs</td><td>9.7092 μs</td><td>8.6069 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>13</td><td>True</td><td>351.817 μs</td><td>1.0058 μs</td><td>0.8916 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>14</td><td>False</td><td>4,311.168 μs</td><td>9.2836 μs</td><td>7.7522 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>14</td><td>True</td><td>376.619 μs</td><td>0.8042 μs</td><td>0.6715 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>15</td><td>False</td><td>33.923 μs</td><td>0.1404 μs</td><td>0.1313 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>15</td><td>True</td><td>180,017.411 μs</td><td>448.7256 μs</td><td>374.7062 μs</td>
|
||||
</tr></tbody></table>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user