Los golfistas
Juntos, nos hemos unido para producir código conciso, funcionalmente hermoso y más feo que el Fantasma de la Ópera de la novela original.
Ha llegado el momento de devolver la belleza al mundo de la programación. Con color. De una manera concisa, funcionalmente hermosa es más fea que el Fantasma de la Ópera de la novela original.
Vamos a codificar un marcador de sintaxis colorido. En la menor cantidad de código posible.
Recibirá a través de un archivo de entrada o Stdin un archivo C válido. El archivo C utilizará la convención de línea que elija y solo contendrá caracteres ASCII 32-126. Debe convertirlo en un archivo HTML que se muestre correctamente al menos en Chrome, que muestre el código fuente con resaltado de sintaxis. La salida puede estar en un archivo o en Stdout.
Debe resaltar:
Todas las cadenas y caracteres (incluidos los caracteres de comillas) en verde (# 00FF00). Las cadenas pueden contener caracteres escapados.
Todas las palabras C reservadas en azul (# 0000FF).
Todos los comentarios en amarillo (# FFFF00).
Todas las directivas de preprocesador C en rosa (# FF00FF).
La salida cuando se muestra en Chrome debe:
Estar en una fuente de ancho fijo
Mostrar nuevas líneas donde aparecieron en la fuente original
Reproduzca con precisión los espacios en blanco. Un carácter de tabulación debe tomarse como 4 espacios.
Bonos
x 0.9 si incluye números de línea. Los números de línea deben poder alcanzar al menos 99999. Toda la fuente debe estar alineada, por lo tanto, el código fuente con números de línea más pequeños debe comenzar en la misma posición que el código fuente con números de línea más altos.
x 0.8 si el fondo de cada línea se alterna entre gris claro (# C0C0C0) y blanco (#FFFFFF)
x 0.9 si su código fuente está escrito en C y puede formatearse correctamente.
Puntuación
Este es el código de golf. Su puntaje es la cantidad de bytes de su código fuente multiplicado por cualquier bonificación. El ganador es el golfista con la puntuación más baja.
Respuestas:
Perl 769 caracteres * 0.9 * 0.8 = 554
Probablemente todavía se deben hacer algunas mejoras en algunas de las expresiones regulares, ¡pero está llegando lentamente!
Versión ligeramente menos ofuscada con comentarios:
Ahora resalta con éxito la entrada de @ xfix.
Tomó prestada la idea de abandonar
</tr>
la entrada de @ xfix, ¡gracias!Ejemplo de salida para la solución de @ xfix .
fuente
</tr>
y</td>
son completamente opcionales, así que simplemente los ignoré.if|int
es un char menos quei(f|nt)
. Od(efault|o|ouble)
es otro char menos qued(efault|o(uble)?)
.<style>
bloque al final y omite la etiqueta final. Entonces también puede omitir el último}
del estilo. Claro, es completamente inválido, ¡pero funciona en Chrome!C -
16051200 caracteres * 0.9 * 0.8 * 0.9 = 777 caracteresDefinitivamente demasiado largo, pero lo que sea. 264 utilizado por la lista de palabras clave en sí. La versión larga de un revestimiento. No usa asignaciones de memoria, por lo que el uso de memoria es muy bajo (y todo es global, por lo que la pila no se usa realmente). HTML de muestra en JSFiddle . En mi opinión, el soporte de comentarios fue lo más complejo en el código.
Y la versión más larga (que es tan legible como un programa real, aparte de algunos trucos de golf de código que no pensé que podría aplicar fácilmente mientras jugaba el programa.
fuente
PHP 606 bytes × 0.9 × 0.8 = 436
Formateado:
Lee desde stdin y escribe en stdout.
Las terminaciones de línea aceptadas son \ n y \ r \ n.
Hace números de línea y alternancia de color de línea.
Utilicé colores ligeramente diferentes para poder mirarlo, aunque no de una manera que afecte el recuento de bytes.
No tengo Chrome para probarlo, aunque está bien en Firefox.
fuente
C ++ -
5067 bytes4612 * 0.9 * 0.8 = 3320 (* 0.9 = 2988 si poder formatearse cuenta - está escrito en C ++)Me doy cuenta de que esto es más grande que las soluciones ya presentadas aquí, pero he decidido publicar esto de todos modos porque comencé a trabajar en mi versión antes de que se publicara la solución C de xfix.
La mitad de esto es la gran variedad de palabras clave C y C ++.
Versión legible:
fuente
__
(dos guiones bajos) es una palabra clave, ya que la especificación dice que está reservada para fines de implementación.