AdventOfCode/AdventOfCode.Core/Shared/Grid.cs
Rob 3846b42b7e Massive code base change
partial completion of day 3
2023-12-03 19:09:26 +01:00

35 lines
1.1 KiB
C#

namespace AdventOfCode.Core.Shared
{
public class Grid<T> where T : Node
{
public List<T> DataGrid { get; set; } = [];
public Grid() { }
public Grid(T[] data) => DataGrid.AddRange(data);
public Grid(IEnumerable<T> data) : this(data.ToArray()) { }
public IEnumerable<T> GetRow(int rowNumber) => DataGrid.Where(n => n.X == rowNumber);
public IEnumerable<T> GetColumn(int columnNumber) => DataGrid.Where(n => n.Y == columnNumber);
public IEnumerable<T> GetNeighbors(T source, bool allowDiagonals = true)
{
IEnumerable <T> neighbors = DataGrid.Where(target => Math.Abs(source.X - target.X) <= 1 || Math.Abs(source.Y - target.Y) <= 1);
if (allowDiagonals)
{
return neighbors;
}
return neighbors.Where(target => !(Math.Abs(source.X - target.X) <= 1 && Math.Abs(source.Y - target.Y) <= 1));
}
public IEnumerable<T> GetSection(int fromX, int fromY, int toX, int toY)
{
return DataGrid.Where(node => node.X >= fromX && node.X <= toX && node.Y >= fromY && node.Y <= toY);
}
}
}