namespace Day23; public class Tile { public char Value { get; } public Vec Position { get; } public bool IsPath => Value == '.' || IsArrow; public bool IsArrow => Value == '<' || Value == '>' || Value == '^' || Value == 'v'; public Tile(char value, Vec position) { Value = value; Position = position; } public IEnumerable Neighbors() { yield return Position.Add(Vec.Up); yield return Position.Add(Vec.Right); yield return Position.Add(Vec.Down); yield return Position.Add(Vec.Left); } public Vec Previous() { return Position.Subtract(ArrowDirection()); } public Vec Next() { return Position.Add(ArrowDirection()); } public Vec ArrowDirection() { return Value switch { '^' => Vec.Up, 'v' => Vec.Down, '<' => Vec.Left, '>' => Vec.Right, _ => Vec.Zero }; } }