Recentemente, o cabeçalho do projeto do PPCG tem tido alguns problemas ao analisar os cabeçalhos html da resposta .
Neste desafio, você estará tentando analisar cabeçalhos de resposta.
Casos de teste de exemplo
Estes exemplos de entradas ( NÃO casos de teste reais), apenas para que você possa ter uma idéia de como as entradas podem ser
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>
Spec
Seu programa deve ter 150 bytes ou menos
Você receberá uma linha do html do cabeçalho da resposta; precisará fazer o possível para extrair o idioma com sucesso. A entrada pode conter caracteres unicode.
O caso de saída é importante.
Testes
Github Gist com casos de teste
Há um caso de teste por linha. O formato é:
<lang_name> - <rest_of_the_line_is_the_header>
Pontuação
Sua pontuação é:
Number Correct
----------------
Total Number
(que é um percentual)
O desempatador é o código mais curto.
code-challenge
parsing
test-battery
Downgoat
fonte
fonte
#
nem está presente nos casos de teste ?!Respostas:
Retina 0.8.2 , 100%,
757170686764595351 bytesIsso é essencialmente código de golfe agora, então tive que trocar de idioma.
Experimente online!
Verificação
Como funciona
O código consiste em três substituições simples (ou eliminações). Em vez de tentar corresponder ao nome do idioma, nos livramos de todas as partes da string de entrada que fazem parte dela.
<.*?>
corresponderá a todas as tags HTML, portanto a substituição as eliminará da entrada..*?
corresponde a qualquer quantidade de caracteres, mas, como?
torna o quantificador preguiçoso , ele corresponderá à menor quantidade possível que ainda permita que todo o padrão corresponda. Isso evita excluir toda a entrada, que sempre começa com a<
e termina com a>
.O nome do idioma agora começa com o primeiro caractere da sequência de entrada modificada restante.
Após o nome do idioma, quase sempre encontramos um dos seguintes finais:
,
,-
,&
,(
,–
,5
, Ou um espaço seguido de dois dígitos.Os dois primeiros finais são bastante comuns e
Python 2 & PuLP...
devem ser analisados comoPython 2
,Ruby (2.2.2p95)...
comoRuby
,>PHP – 3302 bytes
comoPHP
ePerl 5...
comoPerl
.(,| [-&(–5]| \d\d).*
corresponderia a todos esses finais (e todos os caracteres após eles), mas resultará em alguns falsos positivos:,
coincidirá com a vírgula no nome do idiomaHelp, WarDoq!
.(
corresponderá à versão deJavaScript (ESx)
eJava (1.8)
.\d\d
corresponderá à versão emTi-Basic 84
.Podemos corrigir o terceiro caso de problema usando, em
[0-7]\d
vez de\d\d
, para evitar a correspondência de8
in84
.Para os outros casos de problemas, usamos o indicador negativo
(?! W|...\))
que impedirá a correspondência do padrão anterior se for seguido porW
(como emHelp, WarDoq!
) ou por exatamente três caracteres e um parêntese de fechamento (como em(ES6)
ou(1.8)
).Juntando tudo,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
corresponde tudo depois do nome do idioma.Ficamos com dois casos de problemas:
é analisado como
Podemos corrigir o primeiro removendo
2
e o segundo removendo:
da saída.Isso é obtido substituindo
2 |:
-o pela sequência vazia.fonte
Bash, 100%, 100 bytes
Experimente online no Ideone .
Verificação
fonte
CJam, 78,38% (76 bytes)
Experimente online! ou conte os cabeçalhos corretos .
fonte
Jolf, 13 bytes, 85,94%, não-competitivo
Eu tive essa atualização no meu computador. Foi para meu desgosto que me esqueci de atualizar o respectivo código para o intérprete. Não sinto vontade de fotografar 100%. Talvez todos devam formatar seus cabeçalhos da mesma forma ¯ \ _ (ツ) _ / ¯
fonte