public Map GenerateRandomMap()
        {
            while (true)
            {
                var mapBuilder = CreateMapBuilder();
                var directions = new List <Direction>();

                var seenPoints = new HashSet <Point>();

                var repeatedFailureCount = 0;

                var currentDirection = Direction.Top;
                while (repeatedFailureCount < 100)
                {
                    var previousDirection = currentDirection;
                    var newDirection      = directionHelper.GetRandomDirectionOtherThan(
                        previousDirection,
                        DirectionHelper.GetOppositeDirection(
                            previousDirection));

                    mapBuilder.MoveInDirection(newDirection);

                    repeatedFailureCount = 0;

                    var currentPoint = mapBuilder.CurrentPoint;
                    currentDirection = newDirection;

                    directions.Add(newDirection);
                    seenPoints.Add(currentPoint);

                    if (currentPoint.X == 0 && currentPoint.Y == 0)
                    {
                        if (directions.Count == 4)
                        {
                            break;
                        }

                        return(mapBuilder.Build());
                    }
                }
            }

            throw new NotImplementedException();
        }