mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-05 01:28:39 +00:00
Day 24 (#39)
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day21.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day22.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day23.txt" />
|
||||
<EmbeddedResource Include="..\AdventOfCode2022.Test\Inputs\Day24.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@@ -2,5 +2,5 @@ namespace AdventOfCode2022.App
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module Inputs =
|
||||
let days = Array.init 23 (fun day -> Assembly.readResource $"Day%i{day + 1}.txt")
|
||||
let days = Array.init 24 (fun day -> Assembly.readResource $"Day%i{day + 1}.txt")
|
||||
let inline day (i : int) = days.[i - 1]
|
||||
|
@@ -79,7 +79,7 @@ type Benchmark21To25 () =
|
||||
[<GlobalSetup>]
|
||||
member _.Setup () = Run.shouldWrite <- false
|
||||
|
||||
[<Params(21, 22, 23)>]
|
||||
[<Params(21, 22, 23, 24)>]
|
||||
member val Day = 0 with get, set
|
||||
|
||||
[<Params(false, true)>]
|
||||
|
@@ -332,6 +332,20 @@ module Run =
|
||||
if shouldWrite then
|
||||
printfn "%i" output
|
||||
|
||||
let day24 (partTwo : bool) (input : string) =
|
||||
let day24 = StringSplitEnumerator.make '\n' input
|
||||
|
||||
if not partTwo then
|
||||
let output = Day24.part1 day24
|
||||
|
||||
if shouldWrite then
|
||||
printfn "%i" output
|
||||
else
|
||||
let output = Day24.part2 day24
|
||||
|
||||
if shouldWrite then
|
||||
printfn "%i" output
|
||||
|
||||
let allRuns =
|
||||
[|
|
||||
day1
|
||||
@@ -357,4 +371,5 @@ module Run =
|
||||
day21
|
||||
day22
|
||||
day23
|
||||
day24
|
||||
|]
|
||||
|
@@ -31,6 +31,7 @@
|
||||
<Compile Include="Day21.fs" />
|
||||
<Compile Include="Day22.fs" />
|
||||
<Compile Include="Day23.fs" />
|
||||
<Compile Include="Day24.fs" />
|
||||
<EmbeddedResource Include="Inputs\Day1.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day2.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day3.txt" />
|
||||
@@ -54,6 +55,7 @@
|
||||
<EmbeddedResource Include="Inputs\Day21.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day22.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day23.txt" />
|
||||
<EmbeddedResource Include="Inputs\Day24.txt" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
38
AdventOfCode2022.Test/Day24.fs
Normal file
38
AdventOfCode2022.Test/Day24.fs
Normal file
@@ -0,0 +1,38 @@
|
||||
namespace AdventOfCode2022.Test
|
||||
|
||||
open NUnit.Framework
|
||||
open FsUnitTyped
|
||||
open AdventOfCode2022
|
||||
|
||||
[<TestFixture>]
|
||||
module TestDay24 =
|
||||
|
||||
let input =
|
||||
"""#.######
|
||||
#>>.<^<#
|
||||
#.<..<<#
|
||||
#>v.><>#
|
||||
#<^v^^>#
|
||||
######.#
|
||||
"""
|
||||
|
||||
[<Test>]
|
||||
let ``Part 1, given`` () =
|
||||
Day24.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 18
|
||||
|
||||
[<Test>]
|
||||
let ``Part 1`` () =
|
||||
let input = Assembly.readResource "Day24.txt"
|
||||
|
||||
Day24.part1 (StringSplitEnumerator.make '\n' input) |> shouldEqual 283
|
||||
|
||||
|
||||
[<Test>]
|
||||
let ``Part 2, given`` () =
|
||||
Day24.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 54
|
||||
|
||||
[<Test>]
|
||||
let ``Part 2`` () =
|
||||
let input = Assembly.readResource "Day24.txt"
|
||||
|
||||
Day24.part2 (StringSplitEnumerator.make '\n' input) |> shouldEqual 883
|
27
AdventOfCode2022.Test/Inputs/Day24.txt
Normal file
27
AdventOfCode2022.Test/Inputs/Day24.txt
Normal file
@@ -0,0 +1,27 @@
|
||||
#.########################################################################################################################
|
||||
#<^^^^v^><<v<v.v<>><^><v<vv^vv<^^.^v^.v.<<<<v.vv<.>^^><v.^>v^>^>^^v>>v^^^.<v<>v<>.<>v^^^^^^>>^^.^^>>vv><^v<^.<v><^^v^<<<>#
|
||||
#<>>>^^v^>v>v>^^^^.<<<>><^^>>^^<>v^v^v>^v>v>^vv.vvv>v<^^<<v>v^^><^>.>^^^.><^^<v.<^^>.v<vv<^>^<<<<v^vv>>>>v^.^v.>>>^v.>.v>#
|
||||
#.v^v>vv.v<<^v>^<^v<.v<<.>>^vv<.^v^<^^>^<vv^vv>><^vv<<v>^^^vvv<v.><^.<v<^>>>.^<^<.v<^<^v>><^^^><^>>v^<^<v>^>>v^v<><^vv<v<#
|
||||
#>.>>^<^v>v^.><^^.>.^>v>^^><vv>v><.^v<>^<<vvvv.<>>>^v.v<vv>.v..v^>><<v.^.^^v>^^v<v>>>^v<vvv.<^^<<>^>^.>v^^>^v<^v^v<>.<v<<#
|
||||
#<v^^>v>vvvv<^^.^<^v><v<>v^>v<^<^^^<>^<<v<^>^^.<^v^^<<>.>vvv^^^v<v.^^^^<<<>^v^><^>v>><^.<^^^<>^v^v>^^v>>v>v<v><>v.^><v>>>#
|
||||
#<^v>..>^>vv>v<<v>.v>vv>v^v<<<<<<<<v^^<v<.v.^<>>^>^^<>^^<>v<v.<^<.vvvvv>v^.^><<v>v<>>v.v.v^^>v<^v<^>v^v><<.<^^>v^vv<^^vv>#
|
||||
#>v^^v^v>.<.^vv.^<<<<.<v>>v>>v^<.<><>v><<<^.<>v><.v^<v><<.><<<^^vv>^>v<<<>^<.^v>vv^<<^.>^<^^v<<vvvvv><^>v>^.>>>.v^.v^vv<>#
|
||||
#<<<>>...v^^>^v<^v>>><<<>>vv^^<^^>^v<.>v^.>>v<<v>>>>^><.>v^.^vv><v^<.^v<^v<<<.^v^^^^<>^v>^>>>vv^<<.^>>v><vvvv<>v^<>><v<v>#
|
||||
#>.>><vvv<<>v<><^><v>>.^<>.>^v^.<^.<>^>v^.><<^>><v><>..v<>^^<^.>><<^<<^<.^>^.vv^^>^.^>^.v^>v<>^^vv<.<>>><<^v>v<<>>v><^^<>#
|
||||
#<<>.v<<<>^.vv<^v>.>^<><>v^.v<>v<>>vv<<.^^<<>^>>.><v<^<v^.>^vvv<vv.^^.^><v^v^v^<>v.vv>v>.>v.vv<<v^<>^^^^<v^^^.>v.vv^<..><#
|
||||
#>.<<<v<>vv>>^v>vvv<^<>.vvv^<^>v<>^^<v^..><.<^<><>^^^^<^>.<v^>>v>^>v>^<><<v>v>v<^^<v>v>v>><>^v<.^v^><v^^<v^>v><..^.v<^<v>#
|
||||
#>>^<^<v<<^vv>^^<>^<<>.<<v<^v^^v>.vv<><<v>^<>^><v^>.>>v^^<^^^^>v^^^^vv<>>><<^^<<><<<>v^<v^v<^.<>>>>^v>^><<<^^><vv<<<^<.<>#
|
||||
#<^>.vv>>^.v.>^^v>.^<>>^<<..<v><^><><^v<v<^v^>^^^>v<^^.<>v.<<v<vv.>v^^<^<>>>vvv<^<^v><v>v>v^>..^<v<vv<<^^^v>.^><v<>^>><>>#
|
||||
#>^<><<>^<<v><^>v^.v><>.<<^>>.<^^<v<<^>.>v.>v>><^^<>vv<<<>v.<vv><v<<.<>v<<.vv<><>>^vv<>v>vv^.<v<v<>><.v^v><.v^.v^v>>v>>v<#
|
||||
#<<>><^^<v.v<<vv>>.<>v>>^^<^v.<v^<vv.vvv<><<<^v.^^<.><v<v<..v^>v^.^v^>v<>^v<<^<>vvv><>>v^^^>v<<<>.^<vv^>^>v^v^^.><<.>>^^>#
|
||||
#<^.v^>^v>^<^><<^v^>v^<><<^^^v<<^.v^v<>^.>.v<<<v^vv^^v.<v<^^<^v^.><^^>v.<v<<^^<vv<>>>.<>^.^v>v>v><^><<<>.^^<>v.<.v><><v><#
|
||||
#><<^>^<v<>^^^vv^>>.vv>vvv^v^>^^>v<<>^^^^>^>v<>>v^v>v><>.^vv^<>>>><<<>^>^.>..vv>^^^<^>v<>>^v><v<>^vv>v>^^vv<><^>^^^..>>>>#
|
||||
#><vv^<v^^>><<v<v.<.v^..v><^v<<>^v>.^><v><^^v^<^<v><vvv^^v^><^v.><vv><^>^<v^v><v<.>^><^<<<v>>>v<><.^<^>^v<<^^>.<>vv<^.<v>#
|
||||
#<.^^>><>><>><><>^.^>.vv^>>><<><vvvvv^v<<^^>.^..>><<<v>>.<>v<^<vv<^^.v^>>v<>vv^>vv<^<><<.vv><.<^^><>.vv<<><v>><>v<vvvv^.>#
|
||||
#<v<<.^..v<>v><v<>>^<<.><^<v<^vv>vv>>v>^^<^^^>v^^>><^v<^.<<^^v<^v>>^.^<v.<>^v<^v^>v><v<>>^.>v.>>v>.>^v<>v<v>v<v<.>vv><.>>#
|
||||
#<v^vv>>v<<.<v^<<.>^<^v<>v^^<>.v^>^v<v>>>vv>^^>>>v<<<><<^^.>>^><>^<v<>>.v>^>v^^>^^>>>v>v^>>v>^^.v>.vvv>.v<>.^^<<<^vv^>^^>#
|
||||
#>v^^.v^<.<^v<>.^<><>^^^.v.<<.^<^v<vv^v^>v^>^v.^.v^>vvv<^<>^>^^v>v>v^.v^^>^>>^>^v^>^v^^.><^.^^>^^<^><>>^>.>.^^^v<<<v.>v>.#
|
||||
#<v><>v<^^<><<vv.v><v>.vv^><.v^.<v^v.><>^<>.^<<vvv^vv^>v.^v>.><^^<.>>vvv><^<^<v>v<^v.^^><>>>.<^^<v<v^^.^v<^>^<v^<>>v>>>><#
|
||||
#><^^v>>>vv>^<<<<>>v>vv<vv<>>>><v>.v<<.<>><v^.<>.<<^vv>^><v<^>^<<v^<^><>>.v<^vv<vv<><^<>.vv^v^^<>>vvv<>^<v<<v<<v^<v<^>^^>#
|
||||
#<v..<.vv<v<>vvv^..v>^v^><^<^>>^.v^^<><>>v^>><><<v<v>><^^^v>vv><<^<.>>>v<v.><>v><>>^^<<.>>.><>vv>.^^vv>>>^vv^<^>^<^<^<<^>#
|
||||
########################################################################################################################.#
|
@@ -35,6 +35,7 @@
|
||||
<Compile Include="Day21.fs" />
|
||||
<Compile Include="Day22.fs" />
|
||||
<Compile Include="Day23.fs" />
|
||||
<Compile Include="Day24.fs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
284
AdventOfCode2022/Day24.fs
Normal file
284
AdventOfCode2022/Day24.fs
Normal file
@@ -0,0 +1,284 @@
|
||||
namespace AdventOfCode2022
|
||||
|
||||
open System
|
||||
|
||||
#if DEBUG
|
||||
open Checked
|
||||
#else
|
||||
#nowarn "9"
|
||||
#endif
|
||||
|
||||
[<RequireQualifiedAccess>]
|
||||
module Day24 =
|
||||
|
||||
// byte % 2 is whether Up is in;
|
||||
// byte % 4 is whether Down is in;
|
||||
// byte % 8 is whether Left is in;
|
||||
// byte % 16 is whether Right is in.
|
||||
// This is logically a 2D array, but without having to give up ownership.
|
||||
type Day24Board = byte[]
|
||||
|
||||
/// Returns the width and the height too. The resulting array is suitable to become an Arr2D.
|
||||
let parse (line : StringSplitEnumerator) : byte[] * int * int =
|
||||
use mutable enum = line.GetEnumerator ()
|
||||
let output = ResizeArray ()
|
||||
let mutable y = 0
|
||||
let mutable width = 0
|
||||
|
||||
while enum.MoveNext () do
|
||||
if not (enum.Current.IsWhiteSpace ()) then
|
||||
let mutable x = 0
|
||||
|
||||
for c in enum.Current.TrimEnd () do
|
||||
match c with
|
||||
| '>' -> output.Add 8uy
|
||||
| '^' -> output.Add 1uy
|
||||
| 'v' -> output.Add 2uy
|
||||
| '<' -> output.Add 4uy
|
||||
| '.'
|
||||
| '#' -> output.Add 0uy
|
||||
| _ -> failwithf "unexpected char: %c" c
|
||||
|
||||
x <- x + 1
|
||||
|
||||
width <- x
|
||||
|
||||
y <- y + 1
|
||||
|
||||
output.ToArray (), width, y
|
||||
|
||||
let moveBlizzards (width : int) (height : int) (board : Day24Board) : Day24Board =
|
||||
#if DEBUG
|
||||
let board =
|
||||
{
|
||||
Elements = board
|
||||
Width = width
|
||||
}
|
||||
#else
|
||||
use boardPtr = fixed board
|
||||
|
||||
let board =
|
||||
{
|
||||
Elements = boardPtr
|
||||
Width = width
|
||||
Length = width * height
|
||||
}
|
||||
#endif
|
||||
|
||||
let resultArr = Array.zeroCreate<byte> (width * height)
|
||||
#if DEBUG
|
||||
let result =
|
||||
{
|
||||
Elements = resultArr
|
||||
Width = width
|
||||
}
|
||||
#else
|
||||
use ptr = fixed resultArr
|
||||
|
||||
let result =
|
||||
{
|
||||
Elements = ptr
|
||||
Width = width
|
||||
Length = resultArr.Length
|
||||
}
|
||||
#endif
|
||||
|
||||
for y = 1 to height - 2 do
|
||||
for x = 1 to width - 2 do
|
||||
let directions = Arr2D.get board x y
|
||||
|
||||
if directions % 2uy = 1uy then
|
||||
let y = if y = 1 then height - 2 else y - 1
|
||||
let prev = Arr2D.get result x y
|
||||
Arr2D.set result x y (prev + 1uy)
|
||||
|
||||
if (directions / 2uy) % 2uy = 1uy then
|
||||
let y = if y = height - 2 then 1 else y + 1
|
||||
let prev = Arr2D.get result x y
|
||||
Arr2D.set result x y (prev + 2uy)
|
||||
|
||||
if (directions / 4uy) % 2uy = 1uy then
|
||||
let x = if x = 1 then width - 2 else x - 1
|
||||
let prev = Arr2D.get result x y
|
||||
Arr2D.set result x y (prev + 4uy)
|
||||
|
||||
if (directions / 8uy) % 2uy = 1uy then
|
||||
let x = if x = width - 2 then 1 else x + 1
|
||||
let prev = Arr2D.get result x y
|
||||
Arr2D.set result x y (prev + 8uy)
|
||||
|
||||
resultArr
|
||||
|
||||
let boardAtTimeInner (store : Day24Board ResizeArray) (width : int) (height : int) (day : int) =
|
||||
if store.Count > day then
|
||||
store.[day]
|
||||
else
|
||||
for i = store.Count to day do
|
||||
store.Add (moveBlizzards width height store.[i - 1])
|
||||
|
||||
store.[day]
|
||||
|
||||
let inline coordToInt' (width : int) (x : int) (y : int) : int = x + y * width
|
||||
let inline coordToInt (width : int) (coord : Coordinate) : int = coordToInt' width coord.X coord.Y
|
||||
|
||||
let inline intToCoord (width : int) (coord : int) : Coordinate =
|
||||
let x = coord % width
|
||||
|
||||
{
|
||||
X = x
|
||||
Y = (coord - x) / width
|
||||
}
|
||||
|
||||
/// The buffer is an array of at least 5 Coordinates, except it's had coordToInt called on it.
|
||||
let availableIndividualMoves
|
||||
(buffer : int[])
|
||||
(width : int)
|
||||
(height : int)
|
||||
(current : Coordinate)
|
||||
(board : Arr2D<byte>)
|
||||
: int
|
||||
=
|
||||
let mutable bufLen = 0
|
||||
|
||||
if current.X > 1 && current.Y <> 0 && current.Y <> height - 1 then
|
||||
if Arr2D.get board (current.X - 1) current.Y = 0uy then
|
||||
buffer.[bufLen] <- coordToInt' width (current.X - 1) current.Y
|
||||
bufLen <- bufLen + 1
|
||||
|
||||
if Arr2D.get board current.X current.Y = 0uy then
|
||||
buffer.[bufLen] <- coordToInt width current
|
||||
bufLen <- bufLen + 1
|
||||
|
||||
if current.X < width - 2 && current.Y <> 0 then
|
||||
if Arr2D.get board (current.X + 1) current.Y = 0uy then
|
||||
buffer.[bufLen] <- coordToInt' width (current.X + 1) current.Y
|
||||
bufLen <- bufLen + 1
|
||||
|
||||
if current.Y > 1 && current.X <> 0 then
|
||||
|
||||
if Arr2D.get board current.X (current.Y - 1) = 0uy then
|
||||
buffer.[bufLen] <- coordToInt' width current.X (current.Y - 1)
|
||||
bufLen <- bufLen + 1
|
||||
|
||||
if current.Y < height - 2 && current.X <> 0 then
|
||||
if Arr2D.get board current.X (current.Y + 1) = 0uy then
|
||||
buffer.[bufLen] <- coordToInt' width current.X (current.Y + 1)
|
||||
bufLen <- bufLen + 1
|
||||
|
||||
bufLen
|
||||
|
||||
/// The buffer is an array of at least 5 Coordinates, except it's had coordToInt called on it.
|
||||
let inline populateAvailableMoves
|
||||
(width : int)
|
||||
(height : int)
|
||||
(boardsStore : Day24Board ResizeArray)
|
||||
(buffer : int[])
|
||||
(timeStep : int)
|
||||
(currPos : Coordinate)
|
||||
: int
|
||||
=
|
||||
let board = boardAtTimeInner boardsStore width height (timeStep + 1)
|
||||
|
||||
#if DEBUG
|
||||
let board =
|
||||
{
|
||||
Elements = board
|
||||
Width = width
|
||||
}
|
||||
#else
|
||||
use ptr = fixed board
|
||||
|
||||
let board =
|
||||
{
|
||||
Elements = ptr
|
||||
Width = width
|
||||
Length = width * height
|
||||
}
|
||||
#endif
|
||||
|
||||
availableIndividualMoves buffer width height currPos board
|
||||
|
||||
let inline goFrom
|
||||
(start : Coordinate)
|
||||
(dest : Coordinate)
|
||||
(width : int)
|
||||
([<InlineIfLambda>] populateAvailableMoves : int[] -> int -> Coordinate -> int)
|
||||
(timeStep : int)
|
||||
=
|
||||
let mutable buffer = ResizeArray ()
|
||||
let movesBuffer = Array.zeroCreate 5
|
||||
|
||||
let dest = coordToInt width dest
|
||||
|
||||
let rec go (timeStep : int) (toExplore : int ResizeArray) =
|
||||
if toExplore.Contains dest then
|
||||
timeStep + 1
|
||||
else
|
||||
|
||||
buffer.Clear ()
|
||||
|
||||
for currPos in toExplore do
|
||||
let bufLen = populateAvailableMoves movesBuffer timeStep (intToCoord width currPos)
|
||||
|
||||
for move = 0 to bufLen - 1 do
|
||||
let move = movesBuffer.[move]
|
||||
|
||||
if not (buffer.Contains move) then
|
||||
buffer.Add move
|
||||
|
||||
let continueWith = buffer
|
||||
buffer <- toExplore
|
||||
|
||||
go (timeStep + 1) continueWith
|
||||
|
||||
let set = ResizeArray ()
|
||||
|
||||
coordToInt width start |> set.Add
|
||||
|
||||
go timeStep set
|
||||
|
||||
let goToEnd width height =
|
||||
goFrom
|
||||
{
|
||||
X = 1
|
||||
Y = 0
|
||||
}
|
||||
{
|
||||
X = width - 2
|
||||
Y = height - 2
|
||||
}
|
||||
width
|
||||
|
||||
let goToStart width height =
|
||||
goFrom
|
||||
{
|
||||
X = width - 2
|
||||
Y = height - 1
|
||||
}
|
||||
{
|
||||
X = 1
|
||||
Y = 1
|
||||
}
|
||||
width
|
||||
|
||||
let part1 (lines : StringSplitEnumerator) : int =
|
||||
let board, width, height = parse lines
|
||||
|
||||
let store = ResizeArray ()
|
||||
store.Add board
|
||||
|
||||
let availableMoves = populateAvailableMoves width height store
|
||||
|
||||
goToEnd width height availableMoves 0
|
||||
|
||||
let part2 (lines : StringSplitEnumerator) : int =
|
||||
let board, width, height = parse lines
|
||||
|
||||
let store = ResizeArray ()
|
||||
store.Add board
|
||||
|
||||
let availableMoves = populateAvailableMoves width height store
|
||||
|
||||
let toEnd = goToEnd width height availableMoves 0
|
||||
let backToStart = goToStart width height availableMoves toEnd
|
||||
goToEnd width height availableMoves backToStart
|
@@ -8,11 +8,13 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
|
||||
|
||||
|
||||
```
|
||||
| Method | Day | IsPartOne | Mean | Error | StdDev |
|
||||
|---------- |---- |---------- |-------------:|----------:|----------:|
|
||||
| **Benchmark** | **21** | **False** | **720.1 μs** | **11.79 μs** | **11.03 μs** |
|
||||
| **Benchmark** | **21** | **True** | **588.8 μs** | **3.52 μs** | **3.12 μs** |
|
||||
| **Benchmark** | **22** | **False** | **336.7 μs** | **2.82 μs** | **2.50 μs** |
|
||||
| **Benchmark** | **22** | **True** | **220.5 μs** | **1.51 μs** | **1.41 μs** |
|
||||
| **Benchmark** | **23** | **False** | **333,927.6 μs** | **577.75 μs** | **512.16 μs** |
|
||||
| **Benchmark** | **23** | **True** | **2,782.4 μs** | **7.04 μs** | **6.58 μs** |
|
||||
| Method | Day | IsPartOne | Mean | Error | StdDev |
|
||||
|---------- |---- |---------- |-------------:|------------:|------------:|
|
||||
| **Benchmark** | **21** | **False** | **640.9 μs** | **1.31 μs** | **1.23 μs** |
|
||||
| **Benchmark** | **21** | **True** | **579.0 μs** | **8.23 μs** | **7.70 μs** |
|
||||
| **Benchmark** | **22** | **False** | **326.6 μs** | **2.11 μs** | **1.97 μs** |
|
||||
| **Benchmark** | **22** | **True** | **217.7 μs** | **1.04 μs** | **0.97 μs** |
|
||||
| **Benchmark** | **23** | **False** | **318,993.7 μs** | **4,929.31 μs** | **4,610.88 μs** |
|
||||
| **Benchmark** | **23** | **True** | **2,714.7 μs** | **4.32 μs** | **3.61 μs** |
|
||||
| **Benchmark** | **24** | **False** | **65,379.9 μs** | **159.24 μs** | **124.32 μs** |
|
||||
| **Benchmark** | **24** | **True** | **21,290.9 μs** | **34.03 μs** | **28.41 μs** |
|
||||
|
@@ -1,7 +1,9 @@
|
||||
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Day,IsPartOne,Mean,Error,StdDev
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,False,720.1 μs,11.79 μs,11.03 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,True,588.8 μs,3.52 μs,3.12 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,False,336.7 μs,2.82 μs,2.50 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,True,220.5 μs,1.51 μs,1.41 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,False,"333,927.6 μs",577.75 μs,512.16 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,True,"2,782.4 μs",7.04 μs,6.58 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,False,640.9 μs,1.31 μs,1.23 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,True,579.0 μs,8.23 μs,7.70 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,False,326.6 μs,2.11 μs,1.97 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,True,217.7 μs,1.04 μs,0.97 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,False,"318,993.7 μs","4,929.31 μs","4,610.88 μs"
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,True,"2,714.7 μs",4.32 μs,3.61 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,24,False,"65,379.9 μs",159.24 μs,124.32 μs
|
||||
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,24,True,"21,290.9 μs",34.03 μs,28.41 μs
|
||||
|
|
@@ -2,7 +2,7 @@
|
||||
<html lang='en'>
|
||||
<head>
|
||||
<meta charset='utf-8' />
|
||||
<title>AdventOfCode2022.App.Benchmark21To25-20221223-140756</title>
|
||||
<title>AdventOfCode2022.App.Benchmark21To25-20221224-133430</title>
|
||||
|
||||
<style type="text/css">
|
||||
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
|
||||
@@ -24,12 +24,14 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
|
||||
<table>
|
||||
<thead><tr><th>Method</th><th>Day</th><th>IsPartOne</th><th> Mean</th><th>Error</th><th>StdDev</th>
|
||||
</tr>
|
||||
</thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>720.1 μs</td><td>11.79 μs</td><td>11.03 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>588.8 μs</td><td>3.52 μs</td><td>3.12 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>336.7 μs</td><td>2.82 μs</td><td>2.50 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>220.5 μs</td><td>1.51 μs</td><td>1.41 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>333,927.6 μs</td><td>577.75 μs</td><td>512.16 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,782.4 μs</td><td>7.04 μs</td><td>6.58 μs</td>
|
||||
</thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>640.9 μs</td><td>1.31 μs</td><td>1.23 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>579.0 μs</td><td>8.23 μs</td><td>7.70 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>326.6 μs</td><td>2.11 μs</td><td>1.97 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>217.7 μs</td><td>1.04 μs</td><td>0.97 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>318,993.7 μs</td><td>4,929.31 μs</td><td>4,610.88 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,714.7 μs</td><td>4.32 μs</td><td>3.61 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>24</td><td>False</td><td>65,379.9 μs</td><td>159.24 μs</td><td>124.32 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>24</td><td>True</td><td>21,290.9 μs</td><td>34.03 μs</td><td>28.41 μs</td>
|
||||
</tr></tbody></table>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user