| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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<GridPoint> 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);
- }
- }
|