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