This commit is contained in:
Patrick Stevens
2022-12-24 13:41:03 +00:00
committed by GitHub
parent 34dab08fbf
commit 19fa3a96b0
12 changed files with 397 additions and 23 deletions

View File

@@ -33,6 +33,7 @@
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day21.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day22.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day23.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day24.txt" />
</ItemGroup>
<ItemGroup>

View File

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

View File

@@ -79,7 +79,7 @@ type Benchmark21To25 () =
[<GlobalSetup>]
member _.Setup () = Run.shouldWrite <- false
[<Params(21, 22, 23)>]
[<Params(21, 22, 23, 24)>]
member val Day = 0 with get, set
[<Params(false, true)>]

View File

@@ -332,6 +332,20 @@ module Run =
if shouldWrite then
printfn "%i" output
let day24 (partTwo : bool) (input : string) =
let day24 = StringSplitEnumerator.make '\n' input
if not partTwo then
let output = Day24.part1 day24
if shouldWrite then
printfn "%i" output
else
let output = Day24.part2 day24
if shouldWrite then
printfn "%i" output
let allRuns =
[|
day1
@@ -357,4 +371,5 @@ module Run =
day21
day22
day23
day24
|]

View File

@@ -31,6 +31,7 @@
<Compile Include="Day21.fs" />
<Compile Include="Day22.fs" />
<Compile Include="Day23.fs" />
<Compile Include="Day24.fs" />
<EmbeddedResource Include="Inputs\Day1.txt" />
<EmbeddedResource Include="Inputs\Day2.txt" />
<EmbeddedResource Include="Inputs\Day3.txt" />
@@ -54,6 +55,7 @@
<EmbeddedResource Include="Inputs\Day21.txt" />
<EmbeddedResource Include="Inputs\Day22.txt" />
<EmbeddedResource Include="Inputs\Day23.txt" />
<EmbeddedResource Include="Inputs\Day24.txt" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,38 @@
namespace AdventOfCode2022.Test
open NUnit.Framework
open FsUnitTyped
open AdventOfCode2022
[<TestFixture>]
module TestDay24 =
let input =
"""#.######
#>>.<^<#
#.<..<<#
#>v.><>#
#<^v^^>#
######.#
"""
[<Test>]
let ``Part 1, given`` () =
Day24.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 18
[<Test>]
let ``Part 1`` () =
let input = Assembly.readResource "Day24.txt"
Day24.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 283
[<Test>]
let ``Part 2, given`` () =
Day24.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 54
[<Test>]
let ``Part 2`` () =
let input = Assembly.readResource "Day24.txt"
Day24.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 883

View File

@@ -0,0 +1,27 @@
#.########################################################################################################################
#<^^^^v^><<v<v.v<>><^><v<vv^vv<^^.^v^.v.<<<<v.vv<.>^^><v.^>v^>^>^^v>>v^^^.<v<>v<>.<>v^^^^^^>>^^.^^>>vv><^v<^.<v><^^v^<<<>#
#<>>>^^v^>v>v>^^^^.<<<>><^^>>^^<>v^v^v>^v>v>^vv.vvv>v<^^<<v>v^^><^>.>^^^.><^^<v.<^^>.v<vv<^>^<<<<v^vv>>>>v^.^v.>>>^v.>.v>#
#.v^v>vv.v<<^v>^<^v<.v<<.>>^vv<.^v^<^^>^<vv^vv>><^vv<<v>^^^vvv<v.><^.<v<^>>>.^<^<.v<^<^v>><^^^><^>>v^<^<v>^>>v^v<><^vv<v<#
#>.>>^<^v>v^.><^^.>.^>v>^^><vv>v><.^v<>^<<vvvv.<>>>^v.v<vv>.v..v^>><<v.^.^^v>^^v<v>>>^v<vvv.<^^<<>^>^.>v^^>^v<^v^v<>.<v<<#
#<v^^>v>vvvv<^^.^<^v><v<>v^>v<^<^^^<>^<<v<^>^^.<^v^^<<>.>vvv^^^v<v.^^^^<<<>^v^><^>v>><^.<^^^<>^v^v>^^v>>v>v<v><>v.^><v>>>#
#<^v>..>^>vv>v<<v>.v>vv>v^v<<<<<<<<v^^<v<.v.^<>>^>^^<>^^<>v<v.<^<.vvvvv>v^.^><<v>v<>>v.v.v^^>v<^v<^>v^v><<.<^^>v^vv<^^vv>#
#>v^^v^v>.<.^vv.^<<<<.<v>>v>>v^<.<><>v><<<^.<>v><.v^<v><<.><<<^^vv>^>v<<<>^<.^v>vv^<<^.>^<^^v<<vvvvv><^>v>^.>>>.v^.v^vv<>#
#<<<>>...v^^>^v<^v>>><<<>>vv^^<^^>^v<.>v^.>>v<<v>>>>^><.>v^.^vv><v^<.^v<^v<<<.^v^^^^<>^v>^>>>vv^<<.^>>v><vvvv<>v^<>><v<v>#
#>.>><vvv<<>v<><^><v>>.^<>.>^v^.<^.<>^>v^.><<^>><v><>..v<>^^<^.>><<^<<^<.^>^.vv^^>^.^>^.v^>v<>^^vv<.<>>><<^v>v<<>>v><^^<>#
#<<>.v<<<>^.vv<^v>.>^<><>v^.v<>v<>>vv<<.^^<<>^>>.><v<^<v^.>^vvv<vv.^^.^><v^v^v^<>v.vv>v>.>v.vv<<v^<>^^^^<v^^^.>v.vv^<..><#
#>.<<<v<>vv>>^v>vvv<^<>.vvv^<^>v<>^^<v^..><.<^<><>^^^^<^>.<v^>>v>^>v>^<><<v>v>v<^^<v>v>v>><>^v<.^v^><v^^<v^>v><..^.v<^<v>#
#>>^<^<v<<^vv>^^<>^<<>.<<v<^v^^v>.vv<><<v>^<>^><v^>.>>v^^<^^^^>v^^^^vv<>>><<^^<<><<<>v^<v^v<^.<>>>>^v>^><<<^^><vv<<<^<.<>#
#<^>.vv>>^.v.>^^v>.^<>>^<<..<v><^><><^v<v<^v^>^^^>v<^^.<>v.<<v<vv.>v^^<^<>>>vvv<^<^v><v>v>v^>..^<v<vv<<^^^v>.^><v<>^>><>>#
#>^<><<>^<<v><^>v^.v><>.<<^>>.<^^<v<<^>.>v.>v>><^^<>vv<<<>v.<vv><v<<.<>v<<.vv<><>>^vv<>v>vv^.<v<v<>><.v^v><.v^.v^v>>v>>v<#
#<<>><^^<v.v<<vv>>.<>v>>^^<^v.<v^<vv.vvv<><<<^v.^^<.><v<v<..v^>v^.^v^>v<>^v<<^<>vvv><>>v^^^>v<<<>.^<vv^>^>v^v^^.><<.>>^^>#
#<^.v^>^v>^<^><<^v^>v^<><<^^^v<<^.v^v<>^.>.v<<<v^vv^^v.<v<^^<^v^.><^^>v.<v<<^^<vv<>>>.<>^.^v>v>v><^><<<>.^^<>v.<.v><><v><#
#><<^>^<v<>^^^vv^>>.vv>vvv^v^>^^>v<<>^^^^>^>v<>>v^v>v><>.^vv^<>>>><<<>^>^.>..vv>^^^<^>v<>>^v><v<>^vv>v>^^vv<><^>^^^..>>>>#
#><vv^<v^^>><<v<v.<.v^..v><^v<<>^v>.^><v><^^v^<^<v><vvv^^v^><^v.><vv><^>^<v^v><v<.>^><^<<<v>>>v<><.^<^>^v<<^^>.<>vv<^.<v>#
#<.^^>><>><>><><>^.^>.vv^>>><<><vvvvv^v<<^^>.^..>><<<v>>.<>v<^<vv<^^.v^>>v<>vv^>vv<^<><<.vv><.<^^><>.vv<<><v>><>v<vvvv^.>#
#<v<<.^..v<>v><v<>>^<<.><^<v<^vv>vv>>v>^^<^^^>v^^>><^v<^.<<^^v<^v>>^.^<v.<>^v<^v^>v><v<>>^.>v.>>v>.>^v<>v<v>v<v<.>vv><.>>#
#<v^vv>>v<<.<v^<<.>^<^v<>v^^<>.v^>^v<v>>>vv>^^>>>v<<<><<^^.>>^><>^<v<>>.v>^>v^^>^^>>>v>v^>>v>^^.v>.vvv>.v<>.^^<<<^vv^>^^>#
#>v^^.v^<.<^v<>.^<><>^^^.v.<<.^<^v<vv^v^>v^>^v.^.v^>vvv<^<>^>^^v>v>v^.v^^>^>>^>^v^>^v^^.><^.^^>^^<^><>>^>.>.^^^v<<<v.>v>.#
#<v><>v<^^<><<vv.v><v>.vv^><.v^.<v^v.><>^<>.^<<vvv^vv^>v.^v>.><^^<.>>vvv><^<^<v>v<^v.^^><>>>.<^^<v<v^^.^v<^>^<v^<>>v>>>><#
#><^^v>>>vv>^<<<<>>v>vv<vv<>>>><v>.v<<.<>><v^.<>.<<^vv>^><v<^>^<<v^<^><>>.v<^vv<vv<><^<>.vv^v^^<>>vvv<>^<v<<v<<v^<v<^>^^>#
#<v..<.vv<v<>vvv^..v>^v^><^<^>>^.v^^<><>>v^>><><<v<v>><^^^v>vv><<^<.>>>v<v.><>v><>>^^<<.>>.><>vv>.^^vv>>>^vv^<^>^<^<^<<^>#
########################################################################################################################.#

View File

@@ -35,6 +35,7 @@
<Compile Include="Day21.fs" />
<Compile Include="Day22.fs" />
<Compile Include="Day23.fs" />
<Compile Include="Day24.fs" />
</ItemGroup>
<ItemGroup>

284
AdventOfCode2022/Day24.fs Normal file
View File

@@ -0,0 +1,284 @@
namespace AdventOfCode2022
open System
#if DEBUG
open Checked
#else
#nowarn "9"
#endif
[<RequireQualifiedAccess>]
module Day24 =
// byte % 2 is whether Up is in;
// byte % 4 is whether Down is in;
// byte % 8 is whether Left is in;
// byte % 16 is whether Right is in.
// This is logically a 2D array, but without having to give up ownership.
type Day24Board = byte[]
/// Returns the width and the height too. The resulting array is suitable to become an Arr2D.
let parse (line : StringSplitEnumerator) : byte[] * int * int =
use mutable enum = line.GetEnumerator ()
let output = ResizeArray ()
let mutable y = 0
let mutable width = 0
while enum.MoveNext () do
if not (enum.Current.IsWhiteSpace ()) then
let mutable x = 0
for c in enum.Current.TrimEnd () do
match c with
| '>' -> output.Add 8uy
| '^' -> output.Add 1uy
| 'v' -> output.Add 2uy
| '<' -> output.Add 4uy
| '.'
| '#' -> output.Add 0uy
| _ -> failwithf "unexpected char: %c" c
x <- x + 1
width <- x
y <- y + 1
output.ToArray (), width, y
let moveBlizzards (width : int) (height : int) (board : Day24Board) : Day24Board =
#if DEBUG
let board =
{
Elements = board
Width = width
}
#else
use boardPtr = fixed board
let board =
{
Elements = boardPtr
Width = width
Length = width * height
}
#endif
let resultArr = Array.zeroCreate<byte> (width * height)
#if DEBUG
let result =
{
Elements = resultArr
Width = width
}
#else
use ptr = fixed resultArr
let result =
{
Elements = ptr
Width = width
Length = resultArr.Length
}
#endif
for y = 1 to height - 2 do
for x = 1 to width - 2 do
let directions = Arr2D.get board x y
if directions % 2uy = 1uy then
let y = if y = 1 then height - 2 else y - 1
let prev = Arr2D.get result x y
Arr2D.set result x y (prev + 1uy)
if (directions / 2uy) % 2uy = 1uy then
let y = if y = height - 2 then 1 else y + 1
let prev = Arr2D.get result x y
Arr2D.set result x y (prev + 2uy)
if (directions / 4uy) % 2uy = 1uy then
let x = if x = 1 then width - 2 else x - 1
let prev = Arr2D.get result x y
Arr2D.set result x y (prev + 4uy)
if (directions / 8uy) % 2uy = 1uy then
let x = if x = width - 2 then 1 else x + 1
let prev = Arr2D.get result x y
Arr2D.set result x y (prev + 8uy)
resultArr
let boardAtTimeInner (store : Day24Board ResizeArray) (width : int) (height : int) (day : int) =
if store.Count > day then
store.[day]
else
for i = store.Count to day do
store.Add (moveBlizzards width height store.[i - 1])
store.[day]
let inline coordToInt' (width : int) (x : int) (y : int) : int = x + y * width
let inline coordToInt (width : int) (coord : Coordinate) : int = coordToInt' width coord.X coord.Y
let inline intToCoord (width : int) (coord : int) : Coordinate =
let x = coord % width
{
X = x
Y = (coord - x) / width
}
/// The buffer is an array of at least 5 Coordinates, except it's had coordToInt called on it.
let availableIndividualMoves
(buffer : int[])
(width : int)
(height : int)
(current : Coordinate)
(board : Arr2D<byte>)
: int
=
let mutable bufLen = 0
if current.X > 1 && current.Y <> 0 && current.Y <> height - 1 then
if Arr2D.get board (current.X - 1) current.Y = 0uy then
buffer.[bufLen] <- coordToInt' width (current.X - 1) current.Y
bufLen <- bufLen + 1
if Arr2D.get board current.X current.Y = 0uy then
buffer.[bufLen] <- coordToInt width current
bufLen <- bufLen + 1
if current.X < width - 2 && current.Y <> 0 then
if Arr2D.get board (current.X + 1) current.Y = 0uy then
buffer.[bufLen] <- coordToInt' width (current.X + 1) current.Y
bufLen <- bufLen + 1
if current.Y > 1 && current.X <> 0 then
if Arr2D.get board current.X (current.Y - 1) = 0uy then
buffer.[bufLen] <- coordToInt' width current.X (current.Y - 1)
bufLen <- bufLen + 1
if current.Y < height - 2 && current.X <> 0 then
if Arr2D.get board current.X (current.Y + 1) = 0uy then
buffer.[bufLen] <- coordToInt' width current.X (current.Y + 1)
bufLen <- bufLen + 1
bufLen
/// The buffer is an array of at least 5 Coordinates, except it's had coordToInt called on it.
let inline populateAvailableMoves
(width : int)
(height : int)
(boardsStore : Day24Board ResizeArray)
(buffer : int[])
(timeStep : int)
(currPos : Coordinate)
: int
=
let board = boardAtTimeInner boardsStore width height (timeStep + 1)
#if DEBUG
let board =
{
Elements = board
Width = width
}
#else
use ptr = fixed board
let board =
{
Elements = ptr
Width = width
Length = width * height
}
#endif
availableIndividualMoves buffer width height currPos board
let inline goFrom
(start : Coordinate)
(dest : Coordinate)
(width : int)
([<InlineIfLambda>] populateAvailableMoves : int[] -> int -> Coordinate -> int)
(timeStep : int)
=
let mutable buffer = ResizeArray ()
let movesBuffer = Array.zeroCreate 5
let dest = coordToInt width dest
let rec go (timeStep : int) (toExplore : int ResizeArray) =
if toExplore.Contains dest then
timeStep + 1
else
buffer.Clear ()
for currPos in toExplore do
let bufLen = populateAvailableMoves movesBuffer timeStep (intToCoord width currPos)
for move = 0 to bufLen - 1 do
let move = movesBuffer.[move]
if not (buffer.Contains move) then
buffer.Add move
let continueWith = buffer
buffer <- toExplore
go (timeStep + 1) continueWith
let set = ResizeArray ()
coordToInt width start |> set.Add
go timeStep set
let goToEnd width height =
goFrom
{
X = 1
Y = 0
}
{
X = width - 2
Y = height - 2
}
width
let goToStart width height =
goFrom
{
X = width - 2
Y = height - 1
}
{
X = 1
Y = 1
}
width
let part1 (lines : StringSplitEnumerator) : int =
let board, width, height = parse lines
let store = ResizeArray ()
store.Add board
let availableMoves = populateAvailableMoves width height store
goToEnd width height availableMoves 0
let part2 (lines : StringSplitEnumerator) : int =
let board, width, height = parse lines
let store = ResizeArray ()
store.Add board
let availableMoves = populateAvailableMoves width height store
let toEnd = goToEnd width height availableMoves 0
let backToStart = goToStart width height availableMoves toEnd
goToEnd width height availableMoves backToStart

View File

@@ -8,11 +8,13 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
```
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |-------------:|----------:|----------:|
| **Benchmark** | **21** | **False** | **720.1 μs** | **11.79 μs** | **11.03 μs** |
| **Benchmark** | **21** | **True** | **588.8 μs** | **3.52 μs** | **3.12 μs** |
| **Benchmark** | **22** | **False** | **336.7 μs** | **2.82 μs** | **2.50 μs** |
| **Benchmark** | **22** | **True** | **220.5 μs** | **1.51 μs** | **1.41 μs** |
| **Benchmark** | **23** | **False** | **333,927.6 μs** | **577.75 μs** | **512.16 μs** |
| **Benchmark** | **23** | **True** | **2,782.4 μs** | **7.04 μs** | **6.58 μs** |
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |-------------:|------------:|------------:|
| **Benchmark** | **21** | **False** | **640.9 μs** | **1.31 μs** | **1.23 μs** |
| **Benchmark** | **21** | **True** | **579.0 μs** | **8.23 μs** | **7.70 μs** |
| **Benchmark** | **22** | **False** | **326.6 μs** | **2.11 μs** | **1.97 μs** |
| **Benchmark** | **22** | **True** | **217.7 μs** | **1.04 μs** | **0.97 μs** |
| **Benchmark** | **23** | **False** | **318,993.7 μs** | **4,929.31 μs** | **4,610.88 μs** |
| **Benchmark** | **23** | **True** | **2,714.7 μs** | **4.32 μs** | **3.61 μs** |
| **Benchmark** | **24** | **False** | **65,379.9 μs** | **159.24 μs** | **124.32 μs** |
| **Benchmark** | **24** | **True** | **21,290.9 μs** | **34.03 μs** | **28.41 μs** |

View File

@@ -1,7 +1,9 @@
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,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,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,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.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,"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,"2,782.4 μs",7.04 μs,6.58 μ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,640.9 μs,1.31 μs,1.23 μ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,579.0 μs,8.23 μs,7.70 μ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,326.6 μs,2.11 μs,1.97 μ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,217.7 μs,1.04 μs,0.97 μ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,"318,993.7 μs","4,929.31 μs","4,610.88 μ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,714.7 μs",4.32 μs,3.61 μ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,24,False,"65,379.9 μs",159.24 μs,124.32 μ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,24,True,"21,290.9 μs",34.03 μs,28.41 μ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 720.1 μs 640.9 μs 11.79 μs 1.31 μs 11.03 μs 1.23 μ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 588.8 μs 579.0 μs 3.52 μs 8.23 μs 3.12 μs 7.70 μ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 336.7 μs 326.6 μs 2.82 μs 2.11 μs 2.50 μs 1.97 μ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.5 μs 217.7 μs 1.51 μs 1.04 μs 1.41 μs 0.97 μ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 333,927.6 μs 318,993.7 μs 577.75 μs 4,929.31 μs 512.16 μs 4,610.88 μ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 2,782.4 μs 2,714.7 μs 7.04 μs 4.32 μs 6.58 μs 3.61 μ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 24 False 65,379.9 μs 159.24 μs 124.32 μ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 24 True 21,290.9 μs 34.03 μs 28.41 μs

View File

@@ -2,7 +2,7 @@
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>AdventOfCode2022.App.Benchmark21To25-20221223-140756</title>
<title>AdventOfCode2022.App.Benchmark21To25-20221224-133430</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -24,12 +24,14 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
<table>
<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>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>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>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.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>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>2,782.4 &mu;s</td><td>7.04 &mu;s</td><td>6.58 &mu;s</td>
</thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>640.9 &mu;s</td><td>1.31 &mu;s</td><td>1.23 &mu;s</td>
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>579.0 &mu;s</td><td>8.23 &mu;s</td><td>7.70 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>326.6 &mu;s</td><td>2.11 &mu;s</td><td>1.97 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>217.7 &mu;s</td><td>1.04 &mu;s</td><td>0.97 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>318,993.7 &mu;s</td><td>4,929.31 &mu;s</td><td>4,610.88 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,714.7 &mu;s</td><td>4.32 &mu;s</td><td>3.61 &mu;s</td>
</tr><tr><td>Benchmark</td><td>24</td><td>False</td><td>65,379.9 &mu;s</td><td>159.24 &mu;s</td><td>124.32 &mu;s</td>
</tr><tr><td>Benchmark</td><td>24</td><td>True</td><td>21,290.9 &mu;s</td><td>34.03 &mu;s</td><td>28.41 &mu;s</td>
</tr></tbody></table>
</body>
</html>