В последнее время в таблице лидеров дизайна PPCG возникли проблемы с разбором заголовков html- ответов .
В этом задании вы будете сами разбирать заголовки ответов.
Примеры тестовых случаев
Эти примеры входных данных ( НЕ фактические тестовые случаи), просто чтобы вы могли понять, как могут быть входные данные
Input: <h1>Python 3, 32 bytes</h1>
Desired Output: Python 3
Input: <h1>JavaScript, 13 chars / 32 bytes</h1>
Desired Output: JavaScript
Input: <b>VeryBadlyFormattedHeader v3 : (32 bytes)</b>
спекуляция
Ваша программа должна быть 150 байтов или ниже
Вам будет дана строка HTML-кода заголовка ответа, вам нужно будет постараться сделать все возможное для успешного извлечения языка. Входные данные могут содержать символы Юникода.
Выходной регистр имеет значение.
тесты
Github Gist с тестовыми примерами
В каждой строке есть один тест. Формат такой:
<lang_name> - <rest_of_the_line_is_the_header>
счет
Ваш счет:
Number Correct
----------------
Total Number
(это процент)
Тай-брейк - самый короткий код.
code-challenge
parsing
test-battery
Downgoat
источник
источник
#
даже не присутствует в тестовых случаях ?!Ответы:
Сетчатка 0,8,2 , 100%,
757170686764595351 байтТеперь это по сути код гольф, поэтому мне пришлось переключать языки.
Попробуйте онлайн!
верификация
Как это устроено
Код состоит из трех простых замен (или исключений). Вместо того, чтобы пытаться сопоставить имя языка, мы избавляемся от всех частей входной строки, которые являются его частью.
<.*?>
будет соответствовать всем тегам HTML, поэтому подстановка исключит их из ввода..*?
соответствует любому количеству символов, но поскольку?
квантификатор делает ленивым , он будет соответствовать наименьшему возможному количеству, которое позволяет сопоставить весь шаблон. Это позволит избежать удаления всего ввода, который всегда будет начинаться с а<
и заканчиваться на а>
.Имя языка теперь начинается с первого символа оставшейся измененной входной строки.
После названия языка мы почти всегда найдем одно из следующих окончаний:
,
,-
,&
,(
,–
,5
, Или пробел следуют две цифры.Первые два окончания довольно распространены и
Python 2 & PuLP...
должны быть проанализированы какPython 2
,Ruby (2.2.2p95)...
какRuby
,>PHP – 3302 bytes
какPHP
иPerl 5...
какPerl
.(,| [-&(–5]| \d\d).*
будет соответствовать всем этим окончаниям (и всем символам после них), но это приведет к нескольким ложным срабатываниям:,
будет соответствовать запятой в названии языкаHelp, WarDoq!
.(
будет соответствовать версииJavaScript (ESx)
иJava (1.8)
.\d\d
будет соответствовать версии вTi-Basic 84
.Мы можем исправить дело третьей проблемы, используя
[0-7]\d
вместо того\d\d
, чтобы избежать согласований8
по прибытию84
.Для других проблемных случаев мы используем отрицательный прогноз
(?! W|...\))
, который предотвратит совпадение предыдущего шаблона, если за ним следуетW
(как вHelp, WarDoq!
) или точно три символа и закрывающая скобка (как в(ES6)
или(1.8)
).Собрав все вместе,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
сопоставим все после названия языка.У нас осталось два проблемных случая:
анализируется как
Мы можем исправить первое, удалив
2
и второе, удалив:
из вывода.Это достигается путем замены
2 |:
на пустую строку.источник
Bash, 100%, 100 байт
Попробуйте онлайн на Ideone .
верификация
источник
CJam, 78,38% (76 байт)
Попробуйте онлайн! или посчитайте правильные заголовки .
источник
Jolf, 13 байт, 85,94%, неконкурентный
У меня было это обновление на моем компьютере. К моему огорчению, я забыл обновить соответствующий код для переводчика. Мне не хочется стрелять на 100%. Может быть, каждый должен отформатировать свои заголовки одинаково ¯ \ _ (ツ) _ / ¯
источник