input: Write a function to perform an edit distance calculation using dynamic programming. The function should take two strings as input and return the minimum number of operations (insertions, deletions, or substitutions) required to change one string into the other.
  assert edit_distance("kitten", "sitting")==3
  assert edit_distance("geek", "gesek")==1
  assert edit_distance("sunday", "saturday")==3
  assert edit_distance("cat", "cut")==1
  assert edit_distance("horse", "ros")==3
output: def edit_distance(str1, str2):
      m, n = len(str1), len(str2)
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      for i in range(m + 1):
          for j in range(n + 1):
              if i == 0:
                  dp[i][j] = j
              elif j == 0:
                  dp[i][j] = i
              elif str1[i-1] == str2[j-1]:
                  dp[i][j] = dp[i-1][j-1]
              else:
                  dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])
      
      return dp[m][n]