code: def time_recommendation(move_num, seconds_per_move=5, time_limit=15 * 60,
                          decay_factor=0.98):
      
  
      # Divide by two since you only play half the moves in a game.
      player_move_num = move_num / 2
  
      # Sum of geometric series maxes out at endgame_time seconds.
      endgame_time = seconds_per_move / (1 - decay_factor)
  
      if endgame_time > time_limit:
          # There is so little main time that we're already in 'endgame' mode.
          base_time = time_limit * (1 - decay_factor)
          core_moves = 0
      else:
          # Leave over endgame_time seconds for the end, and play at
          # seconds_per_move for as long as possible.
          base_time = seconds_per_move
          core_moves = (time_limit - endgame_time) / seconds_per_move
  
      return base_time * decay_factor ** max(player_move_num - core_moves, 0)
docs: Given the current move number and the 'desired' seconds per move, return
      how much time should actually be used. This is intended specifically for
      CGOS time controls, which has an absolute 15-minute time limit.
  
      The strategy is to spend the maximum possible moves using seconds_per_move,
      and then switch to an exponentially decaying time usage, calibrated so that
      we have enough time for an infinite number of moves.