Skip to content

Commit 8417fd8

Browse files
Use inline-array
1 parent 6c57543 commit 8417fd8

File tree

2 files changed

+18
-48
lines changed

2 files changed

+18
-48
lines changed

AdventOfCode.Common/ValueArray.cs

+8-38
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,18 @@
1-
using System.Runtime.InteropServices;
1+
using System.Runtime.CompilerServices;
22

33
namespace AdventOfCode.Common;
44

5-
[StructLayout(LayoutKind.Sequential)]
5+
#pragma warning disable IDE0044 // Add readonly modifier
6+
#pragma warning disable IDE0051 // Remove unused private members
7+
8+
[InlineArray(4)]
69
public record struct ValueArray4<T>
710
{
8-
public T _0, _1, _2, _3;
9-
10-
public readonly T this[int i] =>
11-
i switch
12-
{
13-
0 => _0,
14-
1 => _1,
15-
2 => _2,
16-
3 => _3,
17-
_ => throw new ArgumentOutOfRangeException(nameof(i)),
18-
};
11+
private T _0;
1912
}
2013

21-
[StructLayout(LayoutKind.Sequential)]
14+
[InlineArray(8)]
2215
public record struct ValueArray8<T>
2316
{
24-
public T _0, _1, _2, _3, _4, _5, _6, _7;
25-
26-
public readonly T this[int i] =>
27-
i switch
28-
{
29-
0 => _0,
30-
1 => _1,
31-
2 => _2,
32-
3 => _3,
33-
4 => _4,
34-
5 => _5,
35-
6 => _6,
36-
7 => _7,
37-
_ => throw new ArgumentOutOfRangeException(nameof(i)),
38-
};
39-
}
40-
41-
public static class ValueArrayExtensions
42-
{
43-
public static Span<T> Span<T>(ref this ValueArray4<T> array) =>
44-
MemoryMarshal.CreateSpan(ref array._0, 4);
45-
46-
public static Span<T> Span<T>(ref this ValueArray8<T> array) =>
47-
MemoryMarshal.CreateSpan(ref array._0, 8);
17+
private T _0;
4818
}

AdventOfCode.Puzzles/2021/day23.original.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ public class Day_23_Original : IPuzzle
1212
var start = new Board() { Padding = 0, };
1313
for (var i = 0; i < 4; i++)
1414
{
15-
var room = start.Rooms.Span()[i].Span();
15+
var room = start.Rooms[i];
1616
room[0] = map[2][(i * 2) + 3];
1717
room[1] = map[3][(i * 2) + 3];
1818
}
1919

2020
var goal = new Board();
2121
for (var i = 0; i < 4; i++)
2222
{
23-
var room = goal.Rooms.Span()[i].Span();
23+
var room = goal.Rooms[i];
2424
room[0] = (byte)('A' + i);
2525
room[1] = (byte)('A' + i);
2626
}
@@ -40,12 +40,12 @@ public class Day_23_Original : IPuzzle
4040

4141
for (var i = 0; i < 4; i++)
4242
{
43-
var room = start.Rooms.Span()[i].Span();
43+
var room = start.Rooms[i];
4444
room[3] = room[1];
4545
room[1] = insert[i][0];
4646
room[2] = insert[i][1];
4747

48-
room = goal.Rooms.Span()[i].Span();
48+
room = goal.Rooms[i];
4949
room[2] = (byte)('A' + i);
5050
room[3] = (byte)('A' + i);
5151
}
@@ -70,8 +70,8 @@ private static int GetCost(byte b) =>
7070

7171
private static (Board, int) MoveTokenToHallway(Board board, int cost, int room, int i, int hallway)
7272
{
73-
var roomSpan = board.Rooms.Span()[room].Span();
74-
var hallwaySpan = board.Hallway.Span();
73+
var roomSpan = board.Rooms[room];
74+
var hallwaySpan = board.Hallway;
7575

7676
var moveCost = GetCost(roomSpan[i]);
7777
var steps = GetSteps(room, hallway) + i + 1;
@@ -83,8 +83,8 @@ private static (Board, int) MoveTokenToHallway(Board board, int cost, int room,
8383

8484
private static (Board, int) MoveTokenToRoom(Board board, int cost, int room, int i, int hallway)
8585
{
86-
var roomSpan = board.Rooms.Span()[room].Span();
87-
var hallwaySpan = board.Hallway.Span();
86+
var roomSpan = board.Rooms[room];
87+
var hallwaySpan = board.Hallway;
8888

8989
var moveCost = GetCost(hallwaySpan[hallway]);
9090
var steps = GetSteps(room, hallway) + i + 1;
@@ -96,8 +96,8 @@ private static (Board, int) MoveTokenToRoom(Board board, int cost, int room, int
9696

9797
private static (Board, int) MoveTokenToRoom(Board board, int cost, int from, int i, int to, int j)
9898
{
99-
var fromSpan = board.Rooms.Span()[from].Span();
100-
var toSpan = board.Rooms.Span()[to].Span();
99+
var fromSpan = board.Rooms[from];
100+
var toSpan = board.Rooms[to];
101101

102102
var moveCost = GetCost(fromSpan[i]);
103103
var steps = (Math.Abs(from - to) * 2) + i + 1 + j + 1;

0 commit comments

Comments
 (0)