code: def gen_table(contents):
      
      xlengths = []
      ylengths = []
      for column in contents:
          col_len = 0
          for entry in column:
              lines = entry.split('\n')
              for line in lines:
                  col_len = max(len(line) + 2, col_len)
          xlengths.append(col_len)
      for i in range(len(contents[0])):
          ymax = 0
          for j in range(len(contents)):
              ymax = max(ymax, len(contents[j][i].split('\n')))
          ylengths.append(ymax)
  
      table_divider = '+' + ''.join(['-' * i + '+' for i in xlengths]) + '\n'
      table = table_divider
      for i in range(len(ylengths)):
          row = [column[i] for column in contents]
          row = [entry + '\n' * (ylengths[i]-len(entry.split('\n'))) for entry in row]
          row = [entry.split('\n') for entry in row]
          for j in range(ylengths[i]):
              k = 0
              for entry in row:
                  width = xlengths[k]
                  table += ''.join(['| {:{}}'.format(entry[j], width - 1)])
                  k += 1
              table += '|\n'
          table += table_divider
      return table + '\n'
docs: creates a table given any set of columns