Tile.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. namespace Day23;
  2. public class Tile
  3. {
  4. public char Value { get; }
  5. public Vec Position { get; }
  6. public bool IsPath => Value == '.' || IsArrow;
  7. public bool IsArrow => Value == '<' || Value == '>' || Value == '^' || Value == 'v';
  8. public Tile(char value, Vec position)
  9. {
  10. Value = value;
  11. Position = position;
  12. }
  13. public IEnumerable<Vec> Neighbors()
  14. {
  15. yield return Position.Add(Vec.Up);
  16. yield return Position.Add(Vec.Right);
  17. yield return Position.Add(Vec.Down);
  18. yield return Position.Add(Vec.Left);
  19. }
  20. public Vec Previous()
  21. {
  22. return Position.Subtract(ArrowDirection());
  23. }
  24. public Vec Next()
  25. {
  26. return Position.Add(ArrowDirection());
  27. }
  28. public Vec ArrowDirection()
  29. {
  30. return Value switch
  31. {
  32. '^' => Vec.Up,
  33. 'v' => Vec.Down,
  34. '<' => Vec.Left,
  35. '>' => Vec.Right,
  36. _ => Vec.Zero
  37. };
  38. }
  39. }