Игроки в гольф.
Вместе мы объединились, чтобы создать код, который является лаконичным, функционально красивым и более уродливым, чем Призрак Оперы из оригинального романа.
Пришло время вернуть красоту в мир программирования. С цветом. В некотором смысле, функционально красивый уродливее, чем Призрак Оперы из оригинального романа.
Мы собираемся написать красочную подсветку синтаксиса. В кратчайшие сроки кода возможно.
Вы получите через входной файл или Stdin действительный файл C. Файл C будет использовать выбранный вами формат строки и будет содержать только символы ASCII 32-126. Вы должны превратить его в HTML-файл, который отображается правильно, по крайней мере, в Chrome, который показывает исходный код с подсветкой синтаксиса. Вывод может быть в файле или в стандартный вывод.
Вы должны выделить:
Все строки и символы (включая символы кавычек) выделены зеленым цветом (# 00FF00). Строки могут содержать экранированные символы.
Все зарезервированные слова Си синим цветом (# 0000FF).
Все комментарии в желтом (# FFFF00).
Все директивы препроцессора C розового цвета (# FF00FF).
Вывод при отображении в Chrome должен:
Быть в шрифте фиксированной ширины
Отображать новые строки там, где они появились в оригинальном источнике
Точно воспроизвести пробелы. Символ табуляции должен быть принят за 4 пробела.
Бонусы
х 0,9, если вы включите номера строк. Номера строк должны быть не менее 99999. Все исходные тексты должны быть выровнены, поэтому исходный код с меньшими номерами строк должен начинаться с той же позиции, что и исходный код с более высокими номерами строк.
x 0,8, если фон каждой строки чередуется между светло-серым (# C0C0C0) и белым (#FFFFFF)
х 0,9, если ваш исходный код написан на C и может правильно отформатировать себя.
счет
Это код гольф. Ваша оценка - это количество байтов вашего исходного кода, умноженное на любые бонусы. Победителем становится игрок в гольф с самым низким счетом.
Ответы:
Perl 769 символов * 0,9 * 0,8 = 554
Вероятно, еще нужно внести некоторые улучшения в некоторые регулярные выражения, но это постепенно происходит!
Чуть менее запутанная версия с комментариями:
Теперь успешно выделяет запись @ xfix.
Заимствовал идею отказаться
</tr>
от записи @ xfix, спасибо!Пример вывода для решения @ xfix .
источник
</tr>
и</td>
вовсе не являются обязательными, поэтому я их просто проигнорировал.if|int
на один символ меньше, чемi(f|nt)
. Илиd(efault|o|ouble)
другой символ меньше, чемd(efault|o(uble)?)
.<style>
блок в конец и пропустите конечный тег. Затем вы также можете опустить последний}
стиль. Конечно, это совершенно недействительно, но работает в Chrome!C -
16051200 символов * 0,9 * 0,8 * 0,9 = 777 символовОпределенно слишком долго, но что угодно. 264 используется списком ключевых слов. Длинная версия лайнера. Не использует выделения памяти, поэтому использование памяти очень низкое (и все глобально, поэтому стек на самом деле не используется). Пример HTML на JSFiddle . На мой взгляд, поддержка комментариев была самой сложной вещью в коде.
И более длинная версия (которая так же удобочитаема, как и настоящая программа, кроме нескольких хитростей в коде, я не думаю, что смогу легко применить ее во время игры в гольф).
источник
PHP 606 байт × 0,9 × 0,8 = 436
отформатирован:
Читает из стандартного ввода и пишет в стандартный вывод.
Допустимые окончания строки: \ n и \ r \ n.
Есть ли номера строк и цвет линии чередование.
Я использовал немного разные цвета, чтобы я мог смотреть на это, но не так, чтобы это влияло на количество байтов.
У меня нет Chrome для тестирования, хотя в Firefox все нормально.
источник
C ++ -
5067 байт4612 * 0,9 * 0,8 = 3320 (* 0,9 = 2988, если возможность форматирования сама по себе имеет значение - написано на C ++)Я понимаю, что это больше, чем решения, уже представленные здесь, но я решил опубликовать это в любом случае, потому что я начал работать над своей версией до того, как было опубликовано решение C от xfix.
Половина из этого - большой массив ключевых слов C и C ++.
Читаемая версия:
источник
__
(два подчеркивания), является ключевым словом, поскольку спецификация говорит, что оно зарезервировано для целей реализации.