input: Write a function named optimize that takes a function fn and a Params object as input and returns a dictionary of optimized parameters. The function should iterate over possible values for a, b, and c within a range of ±10 from the original values and return the parameters that give the highest score when passed to fn. Additionally, provide the following assert test cases and their expected outputs:
  
  assert optimize(get_result, Params(1, 2, 3)) == {'a': 1, 'b': 2, 'c': 3}
  assert optimize(get_result, Params(10, 20, 30)) == {'a': 10, 'b': 20, 'c': 30}
  assert optimize(get_result, Params(-5, -5, -5)) == {'a': 5, 'b': 5, 'c': 5}
output: def optimize(fn, params):
      best_score = float('-inf')
      best_params = {}
      for a in range(params.a - 10, params.a + 11):
          for b in range(params.b - 10, params.b + 11):
              for c in range(params.c - 10, params.c + 11):
                  score = fn(a, b, c)
                  if score > best_score:
                      best_score = score
                      best_params = {'a': a, 'b': b, 'c': c}
      return best_params