public List <INode <int> > Extract(List <List <int> > matrix, int m, int n) { var result = new List <INode <int> >(); Node <int> lastNode = null; for (var i = 0; i < m / 2 && i < n / 2; i++) { var x = i; var y = i; var started = false; while (!started || !(x == i && y == i)) { var nextNode = new Node <int> { Value = matrix[y][x] }; if (!started) { result.Add(nextNode); started = true; } else { lastNode.Next = nextNode; } lastNode = nextNode; var direction = _directionGenerator.Get(x, y, m, n); switch (direction) { case Direction.Up: y--; break; case Direction.Down: y++; break; case Direction.Left: x--; break; case Direction.Right: x++; break; case Direction.None: break; } } } return(result); }
public void DirectionGenerationTest(int x, int y, int m, int n, Direction result) { _directionGenerator.Get(x, y, m, n).Should().BeEquivalentTo(result); }