namespace Day10; public record Tile(char Pipe, GridPoint Position) { private int? _display; public bool HasDisplay => _display != null; public string? Display => _display == null ? Pipe.ToString() : (_display % 10).ToString(); public IEnumerable GetConnections() { switch (Pipe) { case '|': yield return Position.North(); yield return Position.South(); break; case '-': yield return Position.East(); yield return Position.West(); break; case 'L': yield return Position.North(); yield return Position.East(); break; case 'J': yield return Position.North(); yield return Position.West(); break; case '7': yield return Position.South(); yield return Position.West(); break; case 'F': yield return Position.South(); yield return Position.East(); break; case 'S': yield return Position.North(); yield return Position.East(); yield return Position.South(); yield return Position.West(); break; default: yield break; } } public void SetDisplay(int display) { _display = display; } public bool ConnectsTo(GridPoint other) { return Pipe == 'S' || GetConnections().Any(c => c == other); } }