input: Write a python function to render an ASCII table given columns and rows.
  assert render_ascii_table(['col1', 'col2', 'col3'], [['data1', 'data2', 'data3'], ['data4', 'data5', 'data6']]) == '   col1   |   col2   |   col3   \n----------|----------|----------\n   data1  |   data2  |   data3  \n   data4  |   data5  |   data6  '
  assert render_ascii_table(['name', 'age'], [['Alice', '23'], ['Bob', '30']]) == '   name   |   age    \n----------|----------\n  Alice   |    23    \n   Bob    |    30    '
output: def render_ascii_table(columns, rows):
      col_widths = [max(len(str(item)) for item in col) for col in zip(*([columns] + rows))]
      format_row = lambda row: ' | '.join(f' {str(item).center(width)} ' for item, width in zip(row, col_widths))
      separator = '-'.join('-' * (width + 2) for width in col_widths)
  
      table = [format_row(columns), separator] + [format_row(row) for row in rows]
      return '\n'.join(table)