docs: def compute_qwerty_distance(c1, c2):
      '''
      Provides a score representing the distance between two characters on a
      QWERTY keyboard, utilizing a simple matrix to represent the keyboard:
  
          | 0   1   2   3   4   5   6   7   8   9   10  11  12  13
        --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
        0 | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |   |
        1 |   | q | w | e | r | t | y | u | i | o | p | [ | ] | \ |
        2 |   | a | s | d | f | g | h | j | k | l | ; | ' |   |   |
        3 |   |   | z | x | c | v | b | n | m | , | . | / |   |   |
        --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
  
      For example, a score of 0 means the characters are the same, while a score
      of 5 means that it takes 5 position changes to get from c1 to c2. However,
      for characters that are 1 diagonal move away (such as q to s), the score is
      reduced from 2 to 1 to prevent any horizontal / vertical bias.
  
      Arguments:
          - c1 (str) Character to compare to 'c2'
          - c2 (str) Character to compare to 'c1'
  
      Returns:
          - (int) Number representing distance between two characters
  
      Raises:
          - ValueError: If the length of c1 or c2 is greater than 1
      '''
  
      # build table
      keyboard = [
          ['`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', ''],
          ['', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\'],
          ['', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '', ''],
          ['', '', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', '', '']
      ]
  
      loc_c1 = find_in_matrix_2d(c1, keyboard)
      loc_c2 = find_in_matrix_2d(c2, keyboard)
  
      # euclidean distance
      distance = ((loc_c2[0] - loc_c1[0])**2 + (loc_c2[1] - loc_c1[1])**2)**0.5
  
      return distance