| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- namespace Day22;
- public class Brick
- {
- private static int _count = 0;
-
- public Vec Start { get; private set; }
- public Vec End { get; private set; }
- public Vec Axis { get; }
- public long Size { get; }
- public char Label { get; }
- public long MinZ { get; private set; }
-
- public Brick(Vec start, Vec end)
- {
- Start = start;
- End = end;
- Label = (char)('A' + _count % 26);
- _count++;
- Axis = End.Subtract(Start);
- Size = Axis.Magnitude();
- MinZ = Math.Min(Start.Z, End.Z);
- }
- public IEnumerable<Vec> Points()
- {
- var p = Start;
- var v = Axis.Normalize();
- for (var i = 0; i <= Size; i++)
- {
- yield return p;
- p = p.Add(v);
- }
- }
- public void MoveDown(long count)
- {
- Start = Start.Add(Vec.Down.Multiply(count));
- End = End.Add(Vec.Down.Multiply(count));
- MinZ = Math.Min(Start.Z, End.Z);
- }
- }
|