mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-05 01:28:39 +00:00
Day 12 (#19)
This commit is contained in:
10
.github/workflows/dotnet.yaml
vendored
10
.github/workflows/dotnet.yaml
vendored
@@ -58,8 +58,16 @@ jobs:
|
||||
- name: Run ShellCheck
|
||||
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:
|
||||
needs: [check-format, build, shellcheck]
|
||||
needs: [check-format, build, shellcheck, linkcheck]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "All required checks complete."
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@ riderModule.iml
|
||||
.idea/
|
||||
*.sln.DotSettings.user
|
||||
.vs/
|
||||
*.log
|
||||
|
@@ -21,6 +21,7 @@
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day9.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day10.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day11.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day12.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -2,5 +2,5 @@ namespace AdventOfCode2022.App
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
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]
|
||||
|
@@ -12,12 +12,12 @@ type Benchmarks () =
|
||||
[<GlobalSetup>]
|
||||
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)>]
|
||||
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>]
|
||||
member this.Benchmark () : unit =
|
||||
Run.allRuns.[this.Day - 1] this.IsPartOne (Inputs.day this.Day)
|
||||
|
@@ -158,6 +158,21 @@ module Run =
|
||||
if shouldWrite then
|
||||
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 =
|
||||
[|
|
||||
day1
|
||||
@@ -171,4 +186,5 @@ module Run =
|
||||
day9
|
||||
day10
|
||||
day11
|
||||
day12
|
||||
|]
|
||||
|
@@ -19,6 +19,7 @@
|
||||
<Compile Include="Day9.fs" />
|
||||
<Compile Include="Day10.fs" />
|
||||
<Compile Include="Day11.fs" />
|
||||
<Compile Include="Day12.fs" />
|
||||
<EmbeddedResource Include="Inputs\Day1.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day2.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day3.txt" />
|
||||
@@ -30,6 +31,7 @@
|
||||
<EmbeddedResource Include="Inputs\Day9.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day10.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day11.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day12.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
36
AdventOfCode2022.Test/Day12.fs
Normal file
36
AdventOfCode2022.Test/Day12.fs
Normal 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
|
41
AdventOfCode2022.Test/Inputs/Day12.txt
Normal file
41
AdventOfCode2022.Test/Inputs/Day12.txt
Normal 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
|
@@ -8,6 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="EfficientString.fs" />
|
||||
<Compile Include="Arr2D.fs" />
|
||||
<Compile Include="Day1.fs" />
|
||||
<Compile Include="Day2.fs" />
|
||||
<Compile Include="Day3.fs" />
|
||||
@@ -20,6 +21,7 @@
|
||||
<Compile Include="Day9.fs" />
|
||||
<Compile Include="Day10.fs" />
|
||||
<Compile Include="Day11.fs" />
|
||||
<Compile Include="Day12.fs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
46
AdventOfCode2022/Arr2D.fs
Normal file
46
AdventOfCode2022/Arr2D.fs
Normal 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
169
AdventOfCode2022/Day12.fs
Normal 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
|
@@ -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** |
|
@@ -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"
|
|
@@ -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 μs</td><td>0.1156 μs</td><td>0.1025 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>1</td><td>True</td><td>32.631 μs</td><td>0.0869 μs</td><td>0.0771 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>2</td><td>False</td><td>82.653 μs</td><td>0.1401 μs</td><td>0.1170 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>2</td><td>True</td><td>80.848 μs</td><td>0.1771 μs</td><td>0.1657 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>3</td><td>False</td><td>32.453 μs</td><td>0.3211 μs</td><td>0.3004 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>3</td><td>True</td><td>73.870 μs</td><td>0.4218 μs</td><td>0.3945 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>4</td><td>False</td><td>68.849 μs</td><td>0.2764 μs</td><td>0.2585 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>4</td><td>True</td><td>56.220 μs</td><td>0.4178 μs</td><td>0.3262 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>5</td><td>False</td><td>96.159 μs</td><td>0.8042 μs</td><td>0.7129 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>5</td><td>True</td><td>82.477 μs</td><td>0.3252 μs</td><td>0.3042 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>6</td><td>False</td><td>87.074 μs</td><td>0.4153 μs</td><td>0.3885 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>6</td><td>True</td><td>171.234 μs</td><td>0.6468 μs</td><td>0.6050 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>7</td><td>False</td><td>469.857 μs</td><td>9.0091 μs</td><td>8.8482 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>7</td><td>True</td><td>467.825 μs</td><td>1.4685 μs</td><td>1.2263 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>8</td><td>False</td><td>766.520 μs</td><td>2.0220 μs</td><td>1.8914 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>8</td><td>True</td><td>381.438 μs</td><td>7.2321 μs</td><td>6.7649 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>9</td><td>False</td><td>521.262 μs</td><td>2.5656 μs</td><td>2.3999 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>9</td><td>True</td><td>946.909 μs</td><td>2.6168 μs</td><td>2.4478 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>10</td><td>False</td><td>7.632 μs</td><td>0.0200 μs</td><td>0.0177 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>10</td><td>True</td><td>8.494 μs</td><td>0.0227 μs</td><td>0.0201 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>11</td><td>False</td><td>7.377 μs</td><td>0.0141 μs</td><td>0.0117 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>11</td><td>True</td><td>2,929.034 μs</td><td>20.6688 μs</td><td>17.2594 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>False</td><td>26,970.013 μs</td><td>43.1843 μs</td><td>36.0608 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>12</td><td>True</td><td>4,996,237.958 μs</td><td>30,838.7917 μs</td><td>28,846.6248 μs</td>
|
||||
</tr></tbody></table>
|
||||
</body>
|
||||
</html>
|
29
README.md
29
README.md
@@ -5,31 +5,4 @@ Just `dotnet build` and `dotnet test`.
|
||||
|
||||
## Perf
|
||||
|
||||
As of Day 11:
|
||||
|
||||
```
|
||||
| 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 |
|
||||
```
|
||||
See [BenchmarkDotNet report](./BenchmarkDotNet.Artifacts/results/AdventOfCode2022.App.Benchmarks-report-github.md).
|
||||
|
Reference in New Issue
Block a user