Golfistas.
Juntos, nos unimos para produzir um código conciso, funcionalmente bonito e mais feio do que o Fantasma da Ópera do romance original.
Chegou a hora de trazer a beleza de volta ao mundo da programação. Com cor. De uma maneira concisa, funcionalmente bonita é mais feia que o Fantasma da Ópera do romance original.
Vamos codificar um marcador de sintaxe colorido. Na menor quantidade de código possível.
Você receberá por um arquivo de entrada ou Stdin um arquivo C válido. O arquivo C usará a convenção de linha de sua escolha e conterá apenas caracteres ASCII 32-126. Você deve transformá-lo em um arquivo HTML que seja exibido corretamente, pelo menos no Chrome, que mostre o código-fonte com destaque de sintaxe. A saída pode estar em um arquivo ou no Stdout.
Você deve destacar:
Todas as cadeias e caracteres (incluindo os caracteres de aspas) em verde (# 00FF00). As cadeias podem conter caracteres de escape.
Todas as palavras C reservadas em azul (# 0000FF).
Todos os comentários em amarelo (# FFFF00).
Todas as diretivas do pré-processador C em rosa (# FF00FF).
A saída quando exibida no Chrome deve:
Estar em uma fonte de largura fixa
Exiba novas linhas sempre que aparecerem na fonte original
Reproduza com precisão o espaço em branco. Um caractere de tabulação deve ser considerado como sendo 4 espaços.
Bónus
x 0,9 se você incluir números de linha. Os números de linha devem poder atingir pelo menos 99999. Todas as fontes ainda devem estar alinhadas - portanto, o código-fonte com números de linhas menores ainda deve começar na mesma posição que o código-fonte com números de linhas mais altos
x 0,8 se o fundo de cada linha for alternado entre cinza claro (# C0C0C0) e branco (#FFFFFF)
x 0,9 se o seu código-fonte estiver escrito em C e puder se formatar corretamente.
Pontuação
Isso é código de golfe. Sua pontuação é a quantidade de bytes do seu código-fonte multiplicada por quaisquer bônus. O vencedor é o jogador com a menor pontuação.
Respostas:
Caracteres do Perl 769 * 0,9 * 0,8 = 554
Provavelmente ainda há algumas melhorias a serem feitas em algumas das expressões regulares, mas está lentamente chegando lá!
Versão um pouco menos ofuscada com comentários:
Agora destaca com sucesso a entrada do @ xfix.
</tr>
Foi emprestada a ideia de sair da entrada de @ xfix, obrigado!Exemplo de saída para a solução do @ xfix .
fonte
</tr>
e</td>
são completamente opcionais, então simplesmente os ignorei.if|int
é um caractere menor quei(f|nt)
. Oud(efault|o|ouble)
outro caractere é menor qued(efault|o(uble)?)
.<style>
bloco para o final e omitir a tag end. Você também pode omitir o último}
estilo. Claro, é completamente inválido, mas funciona no Chrome!C -
16051200 caracteres * 0,9 * 0,8 * 0,9 = 777 caracteresDefinitivamente muito tempo, mas tanto faz. 264 usado pela lista de palavras-chave em si. A versão longa de um forro. Não usa alocações de memória; portanto, o uso de memória é muito baixo (e tudo é global, portanto a pilha não é realmente usada). Exemplo de HTML no JSFiddle . Na minha opinião, o suporte a comentários foi a coisa mais complexa do código.
E a versão mais longa (que é tão legível quanto o programa real, além de alguns truques de código de golfe que eu não achava que poderia aplicar facilmente enquanto jogava no programa).
fonte
PHP 606 bytes × 0,9 × 0,8 = 436
Formatado:
Lê de stdin e grava em stdout.
As terminações de linha aceitas são \ n e \ r \ n.
Faz números de linha e alternância de cores de linha.
Usei cores levemente diferentes para poder olhar para ela, embora não de uma maneira que afete a contagem de bytes.
Não tenho o Chrome para testá-lo, embora esteja bem no Firefox.
fonte
C ++ -
5067 bytes4612 * 0,9 * 0,8 = 3320 (* 0,9 = 2988 se conseguir formatar-se conta - está escrito em C ++)Percebo que isso é maior do que as soluções já apresentadas aqui, mas decidi postar isso de qualquer maneira, porque comecei a trabalhar na minha versão antes da publicação da solução C pelo xfix.
Metade disso é a grande variedade de palavras-chave C e C ++.
Versão legível:
fonte
__
(dois sublinhados) seja uma palavra-chave, pois a especificação diz que ela é reservada para fins de implementação.