mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-05 17:48:40 +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
|
- 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
1
.gitignore
vendored
@@ -6,3 +6,4 @@ riderModule.iml
|
|||||||
.idea/
|
.idea/
|
||||||
*.sln.DotSettings.user
|
*.sln.DotSettings.user
|
||||||
.vs/
|
.vs/
|
||||||
|
*.log
|
||||||
|
@@ -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>
|
||||||
|
@@ -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]
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|]
|
|]
|
||||||
|
@@ -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>
|
||||||
|
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>
|
<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
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
|
## 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 |
|
|
||||||
```
|
|
||||||
|
Reference in New Issue
Block a user