La tarea es mostrar una tabla ascii para una matriz dada.
Entrada
La entrada es una matriz 2D. La longitud de la fila de la matriz es la misma que la longitud de una matriz. Alternativamente, puede tomar la entrada de una matriz 2D con la primera fila es un encabezado. La dimensión exterior es la fila.
Entrada de ejemplo:
[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]
Salida
El resultado de una tabla se ve a continuación.
+---------------------+-------------------+------------+------------+------------+------------+
| License | 2008-05-08 | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2 | 58.69% | 52.2% | 42.5% | 33% | 23% |
| GPLv3 | 1.64% | 4.15% | 6.5% | 12% | 9% |
| LGPL 2.1 | 11.39% | 9.84% | ? | 6% | 5% |
| LGPL 3.0 | ? (<0.64%) | 0.37% | ? | 3% | 2% |
| GPL family together | 71.72% (+ <0.64%) | 66.56% | ? | 54% | 39% |
+---------------------+-------------------+------------+------------+------------+------------+
Cada celda tiene exactamente un espacio a la izquierda y al menos un espacio a la derecha, rellenado hasta que las barras estén alineadas. Sin embargo, al menos una celda tiene solo un espacio a su derecha.
Casos de prueba
Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth", "CJam", "GolfScript"]]
Output:
+-------+-----------+------------+
| Hello | World | !!! |
+-------+-----------+------------+
| aa | bbbbbbbbb | CcC |
| Pyth | CJam | GolfScript |
+-------+-----------+------------+
Presentación de ejemplo
function ascii_table(array, header) {
var lengths = array[0].map(function(_, i) {
var col = array.map(function(row) {
if (row[i] != undefined) {
return row[i].length;
} else {
return 0;
}
});
return Math.max.apply(Math, col);
});
array = array.map(function(row) {
return '| ' + row.map(function(item, i) {
var size = item.length;
if (size < lengths[i]) {
item += new Array(lengths[i]-size+1).join(' ');
}
return item;
}).join(' | ') + ' |';
});
var sep = '+' + lengths.map(function(length) {
return new Array(length+3).join('-');
}).join('+') + '+';
if (header) {
return sep + '\n' + array[0] + '\n' + sep + '\n' +
array.slice(1).join('\n') + '\n' + sep;
} else {
return sep + '\n' + array.join('\n') + '\n' + sep;
}
}
Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Respuestas:
CJam, 58 bytes
Alguien sabe truco de golf en CJam?
fuente
vim,
139138134Acepta entradas en la forma que se muestra en los casos de prueba. Puede o no ser válido, ya que esto depende de la cadena de entrada no contiene ningún
"
,,
,]
, o|
caracteres.Si la entrada tiene que poder contener
]
s, entonces:%s/]/\t./<cr>
se puede reemplazarqe$s<Tab>.<esc>j@eq@e
por 2 caracteres adicionales. No hay una manera fácil de permitir",|
la entrada.Debe ejecutarse en un entorno Unix, ya que depende de la
column
herramienta de línea de comandos.Explicación ligeramente desactualizada (por una revisión, pero eso fue solo un poco de reorganización):
Gracias smpl por un byte!
fuente
:set
con:se
.JavaScript (ES6),
210212219Editar 2 bytes guardados gracias a @Neil
PRUEBA
fuente
a=>(
?(c,i)=>s[i]>(l=c.length)?0:s[i]=l
te ahorra dos bytes, creo.Pitón 2, 190
Esta solución hace uso de comprensiones de listas y expresiones generadoras. Acepta una lista de listas y devuelve una cadena en el formato requerido.
El código antes del minificador:
que salidas:
fuente
from tabulate import*;a=input();print tabulate(a[1:],a[0],'psql',numalign='left')
MATLAB,
244 239 229226Explicación a seguir.
Caso de prueba:
Entrada:
Salida:
fuente
Rubí,
129126127126 caracteresEjecución de muestra:
fuente