input: Write a function to perform an edit distance calculation using dynamic programming. Given two strings, the function should return the minimum number of operations required to convert str1 to str2, where the allowed operations are insert, delete, or modify a character.
  assert edit_distance("kitten", "sitting")==3
  assert edit_distance("geek", "gesek")==1
  assert edit_distance("saturday", "sunday")==3
  assert edit_distance("intention", "execution")==5
  assert edit_distance("hello", "hola")==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]