private void ValidKey(Position[] key) { if (key.Length < 2) throw new ArgumentException(); if (key.Length != 4) throw new ArgumentException(); if (key.Max(p => Math.Max(p.Row, p.Column)) != 4) throw new ArgumentException(); }
protected override void ElementAction(Position tablePosition) { if (messagePosition != 0 && messagePosition % matrixSize == 0) message.Shift += matrixSize; decryptMessage[messagePosition++] = message[tablePosition]; }
protected abstract void ElementAction(Position tablePosition);
private void TurnPosition(Position position) { int row = position.Row; position.Row = position.Column; position.Column = -row; }
private void TurnPositions(Position[] positions) { for (var i = 0; i < positions.Length; i++) TurnPosition(positions[i]); }
private void TransformeIndexes(Position[] positions, int order) { var halfOrder = order / 2; var orderEven = order % 2 == 0; for (var i = 0; i < positions.Length; i++) { positions[i].Row = positions[i].Row - halfOrder; if (orderEven && positions[i].Row >= 0) positions[i].Row = positions[i].Row + 1; positions[i].Column = positions[i].Column - halfOrder; if (orderEven && positions[i].Column >= 0) positions[i].Column = positions[i].Column + 1; } }
public char this[Position position] { get { return this[position.Row, position.Column]; } set { this[position.Row, position.Column] = value; } }