This commit is contained in:
Patrick Stevens
2022-12-12 13:02:30 +00:00
committed by GitHub
parent 65cc8ac65a
commit a2cc226bb2
16 changed files with 442 additions and 33 deletions

View File

@@ -58,8 +58,16 @@ jobs:
- name: Run ShellCheck - name: Run ShellCheck
uses: ludeeus/action-shellcheck@master uses: ludeeus/action-shellcheck@master
linkcheck:
name: Check links
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: gaurav-nelson/github-action-markdown-link-check@v1
name: Run link checker
all-required-checks-complete: all-required-checks-complete:
needs: [check-format, build, shellcheck] needs: [check-format, build, shellcheck, linkcheck]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- run: echo "All required checks complete." - run: echo "All required checks complete."

1
.gitignore vendored
View File

@@ -6,3 +6,4 @@ riderModule.iml
.idea/ .idea/
*.sln.DotSettings.user *.sln.DotSettings.user
.vs/ .vs/
*.log

View File

@@ -21,6 +21,7 @@
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day9.txt" /> <EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day9.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day10.txt" /> <EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day10.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day11.txt" /> <EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day11.txt" />
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day12.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

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

View File

@@ -12,12 +12,12 @@ type Benchmarks () =
[<GlobalSetup>] [<GlobalSetup>]
member _.Setup () = Run.shouldWrite <- false member _.Setup () = Run.shouldWrite <- false
[<Params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)>]
member val Day = 0 with get, set
[<Params(false, true)>] [<Params(false, true)>]
member val IsPartOne = false with get, set member val IsPartOne = false with get, set
[<Params(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)>]
member val Day = 0 with get, set
[<Benchmark>] [<Benchmark>]
member this.Benchmark () : unit = member this.Benchmark () : unit =
Run.allRuns.[this.Day - 1] this.IsPartOne (Inputs.day this.Day) Run.allRuns.[this.Day - 1] this.IsPartOne (Inputs.day this.Day)

View File

@@ -158,6 +158,21 @@ module Run =
if shouldWrite then if shouldWrite then
printfn "%i" output printfn "%i" output
let day12 (partTwo : bool) (input : string) =
let day12 = StringSplitEnumerator.make '\n' input
if not partTwo then
let output = Day12.part1 day12
if shouldWrite then
printfn "%i" output
else
let output = Day12.part2 day12
if shouldWrite then
printfn "%i" output
let allRuns = let allRuns =
[| [|
day1 day1
@@ -171,4 +186,5 @@ module Run =
day9 day9
day10 day10
day11 day11
day12
|] |]

View File

@@ -19,6 +19,7 @@
<Compile Include="Day9.fs" /> <Compile Include="Day9.fs" />
<Compile Include="Day10.fs" /> <Compile Include="Day10.fs" />
<Compile Include="Day11.fs" /> <Compile Include="Day11.fs" />
<Compile Include="Day12.fs" />
<EmbeddedResource Include="Inputs\Day1.txt" /> <EmbeddedResource Include="Inputs\Day1.txt" />
<EmbeddedResource Include="Inputs\Day2.txt" /> <EmbeddedResource Include="Inputs\Day2.txt" />
<EmbeddedResource Include="Inputs\Day3.txt" /> <EmbeddedResource Include="Inputs\Day3.txt" />
@@ -30,6 +31,7 @@
<EmbeddedResource Include="Inputs\Day9.txt" /> <EmbeddedResource Include="Inputs\Day9.txt" />
<EmbeddedResource Include="Inputs\Day10.txt" /> <EmbeddedResource Include="Inputs\Day10.txt" />
<EmbeddedResource Include="Inputs\Day11.txt" /> <EmbeddedResource Include="Inputs\Day11.txt" />
<EmbeddedResource Include="Inputs\Day12.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -0,0 +1,36 @@
namespace AdventOfCode2022.Test
open NUnit.Framework
open FsUnitTyped
open AdventOfCode2022
[<TestFixture>]
module TestDay12 =
let input =
"""Sabqponm
abcryxxl
accszExk
acctuvwj
abdefghi
"""
[<Test>]
let ``Part 1, given`` () =
Day12.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 31
[<Test>]
let ``Part 1`` () =
let input = Assembly.readResource "Day12.txt"
Day12.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 456
[<Test>]
let ``Part 2, given`` () =
Day12.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 29
[<Test>]
let ``Part 2`` () =
let input = Assembly.readResource "Day12.txt"
Day12.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 454

View File

@@ -0,0 +1,41 @@
abcccccccccccccccccccccccccccccccccccccaaaaaaacccccccaaaaaaaaaaaccccccccccccccccccccaaacaaaaaaaacccccccccccccccccccccccccccccccccccaaaaa
abccccccccccccccccccaaccaacccccccccccccaaaaaaaccccccccaaaaaaaaaaacccccccaaaaccccccccaaaaaaaaaaaaacccccccccccccccccccccccccccccccccaaaaaa
abccccccccccccccccccaaaaaaccccccccccaaaccaaaaaacccccccaaaaaaaaaaccccccccaaaaccccccaaaaaaaaaaaaaaacccccccccccccccccccaaacccccccccccaaaaaa
abcccccccccccccccccccaaaaacccccccccccaaccaacaaaccccccaaaaaaaaaaaccccccccaaaacccccaaaaaaaaacaaaaaaacccccccccccccccccaaaacccccccccccaaacaa
abccccccccccccccccccaaaaaaccccccccaacaaaaaacccccccccaaaaaaaaaaaaacaaaccccaaccccccaaaaaaaaacaacccccccccccccccccaaaccaaaacccccccccccccccaa
abcccccccccccccccccaaaaaaaacccccccaaaaaaaaccccccaaaaaaaacaaaacaaaaaaacccccccccaaccccaaaaaacaaacccccccccccccccaaaakkkaaccccccccccccccccaa
abcccccccccccccccccaaaaaaaaccccccccaaaaaccccaacccaaaaaaaaaaaacaaaaaaccccccccccaacccaaaaaaaaaaaacccccccccccccccakkkkkklcccccccccccccccccc
abaaacccccccccccaaccccaaccccccccccccaaaaaccaaacccaaaaaaaaaaaaaaaaaaaaccccccaaaaaaaacaacccaaaaaaccccccccccccccckkkkkkkllcccccccaaaccccccc
abaaaacccccccaacaaccccaacccccccccccaaacaaaaaaaccccaaaaaaaaaaaaaaaaaaaacccccaaaaaaaaaaaccccaaaaacccccccccccccckkkksssllllccccccaaaaaacccc
abaaaacccccccaaaaacccccccccccaaaccccaacaaaaaaccccaaaaaacaaaaaaaaaaaaaacccccccaaaaccccccccaaaaacccccccccccccckkkksssssllllcccccaaaaaacccc
abaaacccccccccaaaaaaccccccccaaaaccccccccaaaaaaaacaaaaaaaaaaaaacaaacaaacccccccaaaaacccccccaaaaacccccccccccccjkkkrssssssllllccccccaaaccccc
abccccccccccaaaaaaaaccccccccaaaacccccccaaaaaaaaacaacaaaaaaaaaacaaaccccccccccaaacaaccccccccccccccccccccccccjjkkrrsuuussslllllcccccaaccccc
abccaaacccccaaaaacccccccccccaaaaccccccaaaaaaaaaacccccaaaaaaaaaacaaccccccccccaacccacccccccccccccccccccccjjjjjjrrrsuuuussslllllmcccddacccc
abcccaaaccaccacaaaccccccccccccccccccccaaaaaaaccccccccccaaaaaaaaccccccaacccccccccccaaaaacccccccccccccccjjjjjjrrrruuuuuusssllmmmmmddddcccc
abccaaaaaaaacccaaaccccccccccccccccaaacccccaaaccccccccccccaaacccccccccaacccccccccccaaaaacccccccccccccjjjjjrrrrrruuuxuuussqqqqmmmmmdddcccc
abcaaaaaaaacccaaaaaacaaaaaccccccaaaaaaccccaaacccaaccccccccaaccccccaaaaaaaaccaaacccaaaaaaccccccccccccjjjjrrrrrruuuxxxuuuqqqqqqqmmmdddcccc
abaaaaaaaaaccccaaaaacaaaaaccccccaaaaaaaaccccccaaaaaaccccccccccccccaaaaaaaaccaaacaaaaaaaacccccccccccjjjjrrrtttuuuuxxxyvvvvvqqqqmmmdddcccc
abaaaaaaaaaccaaaaaaacaaaaaaccccccaaaaaaaacccccaaaaaaccccccccccccccccaaaaccaaaaaaaaaaaaaacccccccccaaiijqqqrttttuuuxxyyvvvvvvvqqmmmdddcccc
abcaaaaaaaaccaaaaaaaaaaaaaacccccaaaaaaaacccccccaaaacccccaaaaccccccccaaaaacaaaaaaaaccaaccccccccccaaaiiiqqqttttxxxxxxyyyyyyvvvqqmmmdddcccc
abcccaaaaaaacaaaaaaaaaaaaaacccccaaaaaaaaaaaccccaaaaccccaaaaacccccccaaaaaacaaaaaaacccccccccccccccaaaiiiqqqtttxxxxxxxyyyyyyvvqqqmmmdddcccc
SbcccaacccaccccaaacacccaaacccccccccaaaaaaaaacccaccaccccaaaaaaccccccaaccaacccaaaaaccccccccccccccccaaiiiiqqtttxxxxEzzzyyyyvvvqqqmmmddccccc
abccaaaccccccccaaccccccccccccccccccaaaaaaaaccccccccccccaaaaaaccccccccccccccaaacaaaccaacccccccccccccciiiqqqttttxxxyyyyyvvvvqqqmmmdddccccc
abccccccccccccccccccccccccccccccccaaaaaaaccccccccccccccaaaaaacccccccccccccccaacccccaaaaaaaccccccccccciiiqqqttttxxyyyyyvvvrrrnnneeecccccc
abcaaaaccccccccccccccccccccccccccaaaaaaaaccccccccccccccccaacccccccccccccccccccccccccaaaaacccccccccccciiiqqqqttxxyyyyyyyvvrrnnnneeecccccc
abcaaaaacccccccccccccccccccccccccaaaacaaacccaccaaacccccccccccccccccccccccccaaaccccaaaaaaaccccccccccccciiiqqqttwwyywwyyywwrrnnneeeccccccc
abaaaaaacccaccaccccccccccccccccccaaaaccaacccaaaaaaccccccccccccccccaaaccccaaaaaacccaaaaaaaacccccccccccciiiqqqtswwwwwwwwwwwrrnnneeeccccccc
abaaaaaacccaaaaccccccccaaaacccccccaaacccccccaaaaaacccccccccccccccaaaaaaccaaaaaacccaaaaaaaacaaccccccaaciiiqppsswwwwsswwwwwrrrnneeeccccccc
abcaaaaacccaaaaacccccccaaaacccccccccccccccccaaaaaaaccccccccccccccaaaaaaccaaaaaacccccaaaaaaaaaccccccaaaahhpppssswwsssswwwwrrrnneeeacccccc
abcaaaccccaaaaaacccccccaaaaccccccccccccccccaaaaaaaaccccccccccccccaaaaacccaaaaaccccccaacaaaaaaaaccaaaaaahhpppsssssssssrrrrrrnnneeeacccccc
abccccccccaaaaaaccccccccaacccccccccccccccccaaaaaaaaccccaacccccccccaaaaaccaaaaacccccccccaaaaaaaaccaaaaachhpppssssssoosrrrrrrnnneeeaaacccc
abccccccccccaaccccccccccccccccaaaaaccccccaacccaaacccaaaaacccccccccaacaacccccccccccccccccaaaaaaacccaaaaahhhppppssppooooorroonnffeaaaacccc
abaaccccccccccccccccccccccccccaaaaaccccccaacccaaaccccaaaaacccccccccccccccccccccccccccaacaaaaacccccaacaahhhppppppppoooooooooonfffaaaacccc
abaccccccccccccccccccccccccccaaaaaacccaaaaaaaacccccccaaaaaccccccccccccccccccccccccaaaaaaaaaaaccccccccccchhhpppppppgggoooooooffffaacccccc
abaccccccccccccccccccccccccccaaaaaacccaaaaaaaaccccccaaaaaccccccacccaacccccccccccccaaaaaccccaaccccccccccchhhhhhggggggggfffffffffaaacccccc
abaacccccccccccccccccccccccccaaaaaacccccaaaacccccccccaaaacccaacaacaaacccccccccccccaaaaaaacccccccccccccccchhhhgggggggggffffffffccaacccccc
abcccccccaacccccccccccccccccccaaaccccccaaaaaccccccccaaaaccaaaacaaaaacccccccccccccaaaaaaaaccccccccccccccccchhhggggaaaagffffffcccccccccccc
abcccccccaacccccccccccccaacccccccccccccaaaaaaccaaccccaaaaaaaaacaaaaaacccccccaaaacaaaaaaaacccccccccccaacccccccaaaacaaaacccccccccccccccccc
abccccaaaaaaaacccccccaacaaaccccccccccccaaccaacaaaacccaaaaaaaacaaaaaaaaccccccaaaaccacaaaccaaaccccaaaaaacccccccaacccaaaacccccccccccccaaaaa
abccccaaaaaaaacccccccaaaaaccccccccccccccccccccaaaaccccaaaaaaacaaaaaaaaccccccaaaaccccaaaccaaaaaccaaaaaaaacccccccccccaaaccccccccccccccaaaa
abccccccaaaaccccccccccaaaaaaccccccccccccccccccaaaacccaaaaaaaaaaccaaccccccccccaacccccccccaaaaacccaaaaaaaacccccccccccaaaccccccccccccccaaaa
abcccccaaaaaacccccccaaaaaaaacccccccccccccccccccccccaaaaaaaaaaaaaaaacccccccccccccccccccccaaaaaacccaaaaaaaccccccccccccccccccccccccccaaaaaa

View File

@@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="EfficientString.fs" /> <Compile Include="EfficientString.fs" />
<Compile Include="Arr2D.fs" />
<Compile Include="Day1.fs" /> <Compile Include="Day1.fs" />
<Compile Include="Day2.fs" /> <Compile Include="Day2.fs" />
<Compile Include="Day3.fs" /> <Compile Include="Day3.fs" />
@@ -20,6 +21,7 @@
<Compile Include="Day9.fs" /> <Compile Include="Day9.fs" />
<Compile Include="Day10.fs" /> <Compile Include="Day10.fs" />
<Compile Include="Day11.fs" /> <Compile Include="Day11.fs" />
<Compile Include="Day12.fs" />
</ItemGroup> </ItemGroup>
</Project> </Project>

46
AdventOfCode2022/Arr2D.fs Normal file
View File

@@ -0,0 +1,46 @@
namespace AdventOfCode2022
type Arr2D<'a> =
{
Elements : 'a[]
Width : int
Height : int
}
[<RequireQualifiedAccess>]
module Arr2D =
/// It's faster to iterate forward over the first argument, `x`.
let inline get (arr : Arr2D<'a>) (x : int) (y : int) : 'a = arr.Elements.[y * arr.Width + x]
let inline set (arr : Arr2D<'a>) (x : int) (y : int) (newVal : 'a) : unit =
arr.Elements.[y * arr.Width + x] <- newVal
let create<'a> (width : int) (height : int) (value : 'a) : Arr2D<'a> =
{
Elements = Array.create (width * height) value
Width = width
Height = height
}
[<RequiresExplicitTypeArguments>]
let zeroCreate<'a> (width : int) (height : int) : Arr2D<'a> =
{
Elements = Array.zeroCreate (width * height)
Width = width
Height = height
}
/// The closure is given x and then y.
let inline init<'a> (width : int) (height : int) (f : int -> int -> 'a) : Arr2D<'a> =
let result = zeroCreate<'a> width height
for y in 0 .. height - 1 do
for x in 0 .. width - 1 do
set result x y (f x y)
result
let inline clear (a : Arr2D<'a>) : unit = System.Array.Clear a.Elements
let inline setAll (a : Arr2D<'a>) (v : 'a) : unit = System.Array.Fill (a.Elements, v)

169
AdventOfCode2022/Day12.fs Normal file
View File

@@ -0,0 +1,169 @@
namespace AdventOfCode2022
open System
#if DEBUG
open Checked
#endif
[<RequireQualifiedAccess>]
module Day12 =
let private charToByte (c : char) = byte c - byte 'a'
[<Struct>]
type Coordinate =
{
X : int
Y : int
}
let parse (lines : StringSplitEnumerator) : Arr2D<byte> * Coordinate * Coordinate =
use mutable enum = lines
let output = ResizeArray ()
let mutable startPos = Unchecked.defaultof<Coordinate>
let mutable endPos = Unchecked.defaultof<Coordinate>
let mutable row = 0
while enum.MoveNext () do
if not (enum.Current.IsWhiteSpace ()) then
let current = enum.Current.TrimEnd ()
let arr = Array.zeroCreate current.Length
for i in 0 .. arr.Length - 1 do
if current.[i] = 'S' then
startPos <-
{
X = i
Y = row
}
arr.[i] <- 0uy
elif current.[i] = 'E' then
endPos <-
{
X = i
Y = row
}
arr.[i] <- 25uy
else
arr.[i] <- charToByte current.[i]
arr |> output.Add
row <- row + 1
let output = Arr2D.init output.[0].Length output.Count (fun x y -> output.[y].[x])
output, startPos, endPos
/// The input arrays must all have the same dimensions.
/// `nodes` will not be mutated; `distances` and `isVisited` will be mutated.
/// (As a result of these arguments, `dijkstra` is intended to be allocation-free.)
let dijkstra
(distances : Arr2D<int>)
(isVisited : Arr2D<bool>)
(nodes : Arr2D<byte>)
(start : Coordinate)
(dest : Coordinate)
=
let mutable currentX = start.X
let mutable currentY = start.Y
let mutable currentDistance = 0
Arr2D.clear isVisited
Arr2D.setAll distances Int32.MaxValue
Arr2D.set distances start.X start.Y 0
let mutable stillGoing = true
while stillGoing && currentDistance < Int32.MaxValue do
let currentNode = Arr2D.get nodes currentX currentY
if currentX < distances.Width - 1 then
if
not (Arr2D.get isVisited (currentX + 1) currentY)
&& Arr2D.get nodes (currentX + 1) currentY <= 1uy + currentNode
then
let newDistance = 1 + currentDistance
if newDistance < Arr2D.get distances (currentX + 1) currentY then
Arr2D.set distances (currentX + 1) currentY newDistance
if currentX > 0 then
if
not (Arr2D.get isVisited (currentX - 1) currentY)
&& Arr2D.get nodes (currentX - 1) currentY <= 1uy + currentNode
then
let newDistance = 1 + currentDistance
if newDistance < Arr2D.get distances (currentX - 1) currentY then
Arr2D.set distances (currentX - 1) currentY newDistance
if currentY > 0 then
if
not (Arr2D.get isVisited currentX (currentY - 1))
&& Arr2D.get nodes currentX (currentY - 1) <= 1uy + currentNode
then
let newDistance = 1 + currentDistance
if newDistance < Arr2D.get distances currentX (currentY - 1) then
Arr2D.set distances currentX (currentY - 1) newDistance
if currentY < distances.Height - 1 then
if
not (Arr2D.get isVisited currentX (currentY + 1))
&& Arr2D.get nodes currentX (currentY + 1) <= 1uy + currentNode
then
let newDistance = 1 + currentDistance
if newDistance < Arr2D.get distances currentX (currentY + 1) then
Arr2D.set distances currentX (currentY + 1) newDistance
Arr2D.set isVisited currentX currentY true
if currentX = dest.X && currentY = dest.Y then
stillGoing <- false
else
let mutable smallestDistance = Int32.MaxValue
for nextX in 0 .. isVisited.Width - 1 do
for nextY in 0 .. isVisited.Height - 1 do
if
not (Arr2D.get isVisited nextX nextY)
&& Arr2D.get distances nextX nextY <= smallestDistance
then
currentX <- nextX
currentY <- nextY
smallestDistance <- Arr2D.get distances nextX nextY
currentDistance <- smallestDistance
Arr2D.get distances dest.X dest.Y
let part1 (lines : StringSplitEnumerator) : int64 =
let data, start, endPoint = parse lines
let distances = Arr2D.create data.Width data.Height Int32.MaxValue
let isVisited = Arr2D.zeroCreate<bool> data.Width data.Height
dijkstra distances isVisited data start endPoint
let part2 (lines : StringSplitEnumerator) : int =
let data, _, endPoint = parse lines
let mutable best = Int32.MaxValue
let distances = Arr2D.zeroCreate<int32> data.Width data.Height
let isVisited = Arr2D.zeroCreate<bool> data.Width data.Height
for y in 0 .. data.Height - 1 do
for x in 0 .. data.Width - 1 do
if Arr2D.get data x y = 0uy then
let coord =
{
X = x
Y = y
}
let d = dijkstra distances isVisited data coord endPoint
if d < best then
best <- d
best

View File

@@ -0,0 +1,36 @@
``` ini
BenchmarkDotNet=v0.13.2, OS=macOS 13.0.1 (22A400) [Darwin 22.1.0]
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
.NET SDK=7.0.100
[Host] : .NET 7.0.0 (7.0.22.51805), Arm64 RyuJIT AdvSIMD DEBUG
DefaultJob : .NET 7.0.0 (7.0.22.51805), Arm64 RyuJIT AdvSIMD
```
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |-----------------:|---------------:|---------------:|
| **Benchmark** | **1** | **False** | **32.603 μs** | **0.1156 μs** | **0.1025 μs** |
| **Benchmark** | **1** | **True** | **32.631 μs** | **0.0869 μs** | **0.0771 μs** |
| **Benchmark** | **2** | **False** | **82.653 μs** | **0.1401 μs** | **0.1170 μs** |
| **Benchmark** | **2** | **True** | **80.848 μs** | **0.1771 μs** | **0.1657 μs** |
| **Benchmark** | **3** | **False** | **32.453 μs** | **0.3211 μs** | **0.3004 μs** |
| **Benchmark** | **3** | **True** | **73.870 μs** | **0.4218 μs** | **0.3945 μs** |
| **Benchmark** | **4** | **False** | **68.849 μs** | **0.2764 μs** | **0.2585 μs** |
| **Benchmark** | **4** | **True** | **56.220 μs** | **0.4178 μs** | **0.3262 μs** |
| **Benchmark** | **5** | **False** | **96.159 μs** | **0.8042 μs** | **0.7129 μs** |
| **Benchmark** | **5** | **True** | **82.477 μs** | **0.3252 μs** | **0.3042 μs** |
| **Benchmark** | **6** | **False** | **87.074 μs** | **0.4153 μs** | **0.3885 μs** |
| **Benchmark** | **6** | **True** | **171.234 μs** | **0.6468 μs** | **0.6050 μs** |
| **Benchmark** | **7** | **False** | **469.857 μs** | **9.0091 μs** | **8.8482 μs** |
| **Benchmark** | **7** | **True** | **467.825 μs** | **1.4685 μs** | **1.2263 μs** |
| **Benchmark** | **8** | **False** | **766.520 μs** | **2.0220 μs** | **1.8914 μs** |
| **Benchmark** | **8** | **True** | **381.438 μs** | **7.2321 μs** | **6.7649 μs** |
| **Benchmark** | **9** | **False** | **521.262 μs** | **2.5656 μs** | **2.3999 μs** |
| **Benchmark** | **9** | **True** | **946.909 μs** | **2.6168 μs** | **2.4478 μs** |
| **Benchmark** | **10** | **False** | **7.632 μs** | **0.0200 μs** | **0.0177 μs** |
| **Benchmark** | **10** | **True** | **8.494 μs** | **0.0227 μs** | **0.0201 μs** |
| **Benchmark** | **11** | **False** | **7.377 μs** | **0.0141 μs** | **0.0117 μs** |
| **Benchmark** | **11** | **True** | **2,929.034 μs** | **20.6688 μs** | **17.2594 μs** |
| **Benchmark** | **12** | **False** | **26,970.013 μs** | **43.1843 μs** | **36.0608 μs** |
| **Benchmark** | **12** | **True** | **4,996,237.958 μs** | **30,838.7917 μs** | **28,846.6248 μs** |

View File

@@ -0,0 +1,25 @@
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,1,False,32.603 μs,0.1156 μs,0.1025 μ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,1,True,32.631 μs,0.0869 μs,0.0771 μ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,2,False,82.653 μs,0.1401 μs,0.1170 μ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,2,True,80.848 μs,0.1771 μs,0.1657 μ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,3,False,32.453 μs,0.3211 μs,0.3004 μ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,3,True,73.870 μs,0.4218 μs,0.3945 μ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,4,False,68.849 μs,0.2764 μs,0.2585 μ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,4,True,56.220 μs,0.4178 μs,0.3262 μ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,5,False,96.159 μs,0.8042 μs,0.7129 μ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,5,True,82.477 μs,0.3252 μs,0.3042 μ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,6,False,87.074 μs,0.4153 μs,0.3885 μ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,6,True,171.234 μs,0.6468 μs,0.6050 μ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,7,False,469.857 μs,9.0091 μs,8.8482 μ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,7,True,467.825 μs,1.4685 μs,1.2263 μ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,8,False,766.520 μs,2.0220 μs,1.8914 μ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,8,True,381.438 μs,7.2321 μs,6.7649 μ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,9,False,521.262 μs,2.5656 μs,2.3999 μ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,9,True,946.909 μs,2.6168 μs,2.4478 μ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,10,False,7.632 μs,0.0200 μs,0.0177 μ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,10,True,8.494 μs,0.0227 μs,0.0201 μ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,7.377 μs,0.0141 μs,0.0117 μ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,929.034 μs",20.6688 μs,17.2594 μ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,"26,970.013 μs",43.1843 μs,36.0608 μ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,"4,996,237.958 μs","30,838.7917 μs","28,846.6248 μ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 1 False 32.603 μs 0.1156 μs 0.1025 μ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 1 True 32.631 μs 0.0869 μs 0.0771 μ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 2 False 82.653 μs 0.1401 μs 0.1170 μ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 2 True 80.848 μs 0.1771 μs 0.1657 μ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 3 False 32.453 μs 0.3211 μs 0.3004 μ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 3 True 73.870 μs 0.4218 μs 0.3945 μ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 4 False 68.849 μs 0.2764 μs 0.2585 μ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 4 True 56.220 μs 0.4178 μs 0.3262 μ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 5 False 96.159 μs 0.8042 μs 0.7129 μ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 5 True 82.477 μs 0.3252 μs 0.3042 μs
12 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 6 False 87.074 μs 0.4153 μs 0.3885 μs
13 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 6 True 171.234 μs 0.6468 μs 0.6050 μs
14 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 7 False 469.857 μs 9.0091 μs 8.8482 μs
15 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 7 True 467.825 μs 1.4685 μs 1.2263 μs
16 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 8 False 766.520 μs 2.0220 μs 1.8914 μs
17 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 8 True 381.438 μs 7.2321 μs 6.7649 μs
18 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 9 False 521.262 μs 2.5656 μs 2.3999 μs
19 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 9 True 946.909 μs 2.6168 μs 2.4478 μs
20 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 10 False 7.632 μs 0.0200 μs 0.0177 μs
21 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 10 True 8.494 μs 0.0227 μs 0.0201 μs
22 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.377 μs 0.0141 μs 0.0117 μs
23 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,929.034 μs 20.6688 μs 17.2594 μs
24 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 26,970.013 μs 43.1843 μs 36.0608 μs
25 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 4,996,237.958 μs 30,838.7917 μs 28,846.6248 μs

View File

@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>AdventOfCode2022.App.Benchmarks-20221212-123338</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
tr { background-color: #fff; border-top: 1px solid #ccc; }
tr:nth-child(even) { background: #f8f8f8; }
</style>
</head>
<body>
<pre><code>
BenchmarkDotNet=v0.13.2, OS=macOS 13.0.1 (22A400) [Darwin 22.1.0]
Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
.NET SDK=7.0.100
[Host] : .NET 7.0.0 (7.0.22.51805), Arm64 RyuJIT AdvSIMD DEBUG
DefaultJob : .NET 7.0.0 (7.0.22.51805), Arm64 RyuJIT AdvSIMD
</code></pre>
<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>
</tr>
</thead><tbody><tr><td>Benchmark</td><td>1</td><td>False</td><td>32.603 &mu;s</td><td>0.1156 &mu;s</td><td>0.1025 &mu;s</td>
</tr><tr><td>Benchmark</td><td>1</td><td>True</td><td>32.631 &mu;s</td><td>0.0869 &mu;s</td><td>0.0771 &mu;s</td>
</tr><tr><td>Benchmark</td><td>2</td><td>False</td><td>82.653 &mu;s</td><td>0.1401 &mu;s</td><td>0.1170 &mu;s</td>
</tr><tr><td>Benchmark</td><td>2</td><td>True</td><td>80.848 &mu;s</td><td>0.1771 &mu;s</td><td>0.1657 &mu;s</td>
</tr><tr><td>Benchmark</td><td>3</td><td>False</td><td>32.453 &mu;s</td><td>0.3211 &mu;s</td><td>0.3004 &mu;s</td>
</tr><tr><td>Benchmark</td><td>3</td><td>True</td><td>73.870 &mu;s</td><td>0.4218 &mu;s</td><td>0.3945 &mu;s</td>
</tr><tr><td>Benchmark</td><td>4</td><td>False</td><td>68.849 &mu;s</td><td>0.2764 &mu;s</td><td>0.2585 &mu;s</td>
</tr><tr><td>Benchmark</td><td>4</td><td>True</td><td>56.220 &mu;s</td><td>0.4178 &mu;s</td><td>0.3262 &mu;s</td>
</tr><tr><td>Benchmark</td><td>5</td><td>False</td><td>96.159 &mu;s</td><td>0.8042 &mu;s</td><td>0.7129 &mu;s</td>
</tr><tr><td>Benchmark</td><td>5</td><td>True</td><td>82.477 &mu;s</td><td>0.3252 &mu;s</td><td>0.3042 &mu;s</td>
</tr><tr><td>Benchmark</td><td>6</td><td>False</td><td>87.074 &mu;s</td><td>0.4153 &mu;s</td><td>0.3885 &mu;s</td>
</tr><tr><td>Benchmark</td><td>6</td><td>True</td><td>171.234 &mu;s</td><td>0.6468 &mu;s</td><td>0.6050 &mu;s</td>
</tr><tr><td>Benchmark</td><td>7</td><td>False</td><td>469.857 &mu;s</td><td>9.0091 &mu;s</td><td>8.8482 &mu;s</td>
</tr><tr><td>Benchmark</td><td>7</td><td>True</td><td>467.825 &mu;s</td><td>1.4685 &mu;s</td><td>1.2263 &mu;s</td>
</tr><tr><td>Benchmark</td><td>8</td><td>False</td><td>766.520 &mu;s</td><td>2.0220 &mu;s</td><td>1.8914 &mu;s</td>
</tr><tr><td>Benchmark</td><td>8</td><td>True</td><td>381.438 &mu;s</td><td>7.2321 &mu;s</td><td>6.7649 &mu;s</td>
</tr><tr><td>Benchmark</td><td>9</td><td>False</td><td>521.262 &mu;s</td><td>2.5656 &mu;s</td><td>2.3999 &mu;s</td>
</tr><tr><td>Benchmark</td><td>9</td><td>True</td><td>946.909 &mu;s</td><td>2.6168 &mu;s</td><td>2.4478 &mu;s</td>
</tr><tr><td>Benchmark</td><td>10</td><td>False</td><td>7.632 &mu;s</td><td>0.0200 &mu;s</td><td>0.0177 &mu;s</td>
</tr><tr><td>Benchmark</td><td>10</td><td>True</td><td>8.494 &mu;s</td><td>0.0227 &mu;s</td><td>0.0201 &mu;s</td>
</tr><tr><td>Benchmark</td><td>11</td><td>False</td><td>7.377 &mu;s</td><td>0.0141 &mu;s</td><td>0.0117 &mu;s</td>
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>2,929.034 &mu;s</td><td>20.6688 &mu;s</td><td>17.2594 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>26,970.013 &mu;s</td><td>43.1843 &mu;s</td><td>36.0608 &mu;s</td>
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>4,996,237.958 &mu;s</td><td>30,838.7917 &mu;s</td><td>28,846.6248 &mu;s</td>
</tr></tbody></table>
</body>
</html>

View File

@@ -5,31 +5,4 @@ Just `dotnet build` and `dotnet test`.
## Perf ## Perf
As of Day 11: See [BenchmarkDotNet report](./BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmarks-report-github.md).
```
| Method | IsPartOne | Day | Mean | Error | StdDev |
|---------- |---------- |---- |-------------:|-----------:|-----------:|
| Benchmark | False | 1 | 32.663 us | 0.4192 us | 0.3921 us |
| Benchmark | False | 2 | 82.502 us | 0.4576 us | 0.4281 us |
| Benchmark | False | 3 | 33.273 us | 0.5546 us | 0.5188 us |
| Benchmark | False | 4 | 66.689 us | 0.3763 us | 0.2938 us |
| Benchmark | False | 5 | 96.317 us | 1.4445 us | 1.3511 us |
| Benchmark | False | 6 | 90.087 us | 0.7930 us | 0.6622 us |
| Benchmark | False | 7 | 466.332 us | 5.0471 us | 4.7211 us |
| Benchmark | False | 8 | 759.873 us | 4.3523 us | 4.0712 us |
| Benchmark | False | 9 | 507.427 us | 5.8451 us | 5.4675 us |
| Benchmark | False | 10 | 7.615 us | 0.0300 us | 0.0280 us |
| Benchmark | False | 11 | 12.617 us | 0.0716 us | 0.0670 us |
| Benchmark | True | 1 | 33.206 us | 0.1680 us | 0.1572 us |
| Benchmark | True | 2 | 80.874 us | 0.3673 us | 0.3436 us |
| Benchmark | True | 3 | 72.505 us | 0.8570 us | 0.8016 us |
| Benchmark | True | 4 | 56.584 us | 0.5950 us | 0.5565 us |
| Benchmark | True | 5 | 84.942 us | 0.4420 us | 0.4135 us |
| Benchmark | True | 6 | 167.142 us | 1.0515 us | 0.9836 us |
| Benchmark | True | 7 | 454.487 us | 3.4531 us | 2.8835 us |
| Benchmark | True | 8 | 370.147 us | 2.0985 us | 1.9630 us |
| Benchmark | True | 9 | 938.836 us | 10.7999 us | 9.0184 us |
| Benchmark | True | 10 | 8.446 us | 0.0685 us | 0.0641 us |
| Benchmark | True | 11 | 3,768.481 us | 15.3375 us | 14.3467 us |
```