Estoy seguro de que la mayoría de nosotros hemos visto resultados de SQL en un terminal, todos perfectamente formateados en filas y columnas. Si no lo has hecho, aquí hay un ejemplo:
+----------+-----------+----------------+
| column 1 | column 2 | column 3 |
+----------+-----------+----------------+
| data | more data | even more data |
| etc | just goes | on and on |
+----------+-----------+----------------+
Su objetivo para este desafío es, dadas las columnas y los datos de fila de una tabla, dibujar la tabla en este estilo. Debe haber una línea horizontal en la parte superior e inferior de la tabla, y una justo debajo de la fila del encabezado. Debe haber líneas verticales entre cada columna y una a ambos lados de la tabla. Debe usar tuberías para líneas verticales, guiones para líneas horizontales y más para donde se cruzan.
Detalles específicos:
- Los datos se pueden ingresar a través de stdin, o como argumento para una función, pero deben estar en alguna forma de cadena
- Los datos deben dividirse por el delimitador de cadena
;
- Los datos constarán solo de caracteres ASCII, no se citan y no contendrán el delimitador.
- La primera fila de los datos se utilizará para los encabezados de columna.
- Los datos siempre tendrán el mismo número de columnas.
- La entrada siempre contendrá al menos dos filas (un encabezado, un dato). No tiene que manejar conjuntos vacíos.
- Se permite una nueva línea al final o anterior
- Cada columna debe ser tan ancha como el elemento más ancho, rellenando los elementos más cortos a la derecha (bonificación -5% si rellena los números a la izquierda)
- Debe haber 1 espacio de relleno antes y después de los encabezados y datos, excepto cuando la columna es más ancha
- No tiene permiso para usar el
mysql
programa real para generar la tabla - Se aplican lagunas estándar
Entrada de muestra:
column 1;column 2;column 3
hello;world;test
longer data;foo;bar
Salida
+-------------+----------+----------+
| column 1 | column 2 | column 3 |
+-------------+----------+----------+
| hello | world | test |
| longer data | foo | bar |
+-------------+----------+----------+
Puntuación:
El menor número de bytes gana, por supuesto. -5% de bonificación para los números de relleno a la izquierda (ver detalles).