code: def alphabeta(game, alpha_beta=(-float('inf'), float('inf')),
                player=dominoes.players.identity):
      '''
      Runs minimax search with alpha-beta pruning on the provided game.
      :param Game game: game to search
      :param tuple alpha_beta: a tuple of two floats that indicate
                               the initial values of alpha and beta,
                               respectively. The default is (-inf, inf).
      :param callable player: player used to sort moves to be explored.
                              Ordering better moves first may significantly
                              reduce the amount of moves that need to be
                              explored. The identity player is the default.
      '''
      if game.result is not None:
          return [], game.result.points
      if game.turn % 2:
          best_value = float('inf')
          op = operator.lt
          update = lambda ab, v: (ab[0], min(ab[1], v))
      else:
          best_value = -float('inf')
          op = operator.gt
          update = lambda ab, v: (max(ab[0], v), ab[1])
      for move, new_game in make_moves(game, player):
          moves, value = alphabeta(new_game, alpha_beta, player)
          if op(value, best_value):
              best_value = value
              best_moves = moves
              best_moves.insert(0, move)
              alpha_beta = update(alpha_beta, best_value)
              if alpha_beta[1] <= alpha_beta[0]:
                  break
      return best_moves, best_value