def initialize(board, robots):
    for robot, url in robots:
        robot.robots = map(lambda r: r[0].position, robots)
        robot.allowedMoves = board.getAllowedMoves(robot.position)
        try:
            get_move(url, robot)
        except ValueError:
            pass
        except httplib.BadStatusLine:
            pass
def move(board, robot, robots, statistics, url):
    robot.robots = map(lambda r: r[0].position, robots)
    robot.allowedMoves = board.getAllowedMoves(robot.position)
    newPosition, newSpeed, newVelocity = get_move(url, robot)
    board.moveRobot(robot.position, newPosition, newSpeed, newVelocity)
    if robot.position != newPosition or robot.position not in robot.destination:
        statistics[robot.id] = statistics.get(robot.id, 0) + 1
    robot.setOwnPosition(newPosition)
    robot.setVelocity(newVelocity)
    robot.setSpeed(newSpeed)
    #board = Board(config.readline().strip('\n'), visualize)
    #    board = SimplePhysicsBoard(config.readline().strip('\n'), visualize)
#    board = PhysicsBoard(config.readline().strip('\n'), 'board', 4, 2, 4, visualize)
    board = NoPhysicsBoard(config.readline().strip('\n'), visualize)
    statistics = dict()
    robots = parse_config(board, config)
    shortest_paths = calculate_shortest_path_length(map(lambda r: r[0], robots), board)
    initialize(board, robots)
    print "initialized"
    while shouldContinue(robots):
    #   print map(lambda t: t[0].position, robots)
        moves = []
        for robot, url in robots:
            robot.robots = map(lambda r: r[0].position, robots)
            robot.allowedMoves = board.getAllowedMoves(robot.position)
            newPosition, newSpeed, newVelocity = get_move(url, robot)
            moves.append((robot, newPosition, newSpeed, newVelocity))
        for robot, newPosition, newSpeed, newVelocity in moves:
            board.moveRobot(robot.position, newPosition)
            if robot.position != newPosition or robot.position not in robot.destination:
                statistics[robot.id] = statistics.get(robot.id, 0) + 1
            robot.setOwnPosition(newPosition)
            robot.setVelocity(newVelocity)
            robot.setSpeed(newSpeed)
        if visualize:
            sleep(0.5)
            board.refreshBoard()
    print shortest_paths
    print statistics
    print calculate__metric(shortest_paths, statistics)
    if save: