Recientemente, la tabla de clasificación de diseño PPCG ha tenido algunos problemas al analizar encabezados html de respuesta .
En este desafío, tendrás tu propia oportunidad de analizar los encabezados de respuesta.
Ejemplos de casos de prueba
Estas entradas de ejemplo ( NO casos de prueba reales), solo para que pueda hacerse una idea de cómo podrían ser las entradas
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>
Especificaciones
Su programa debe tener 150 bytes o menos
Se le dará una línea de html de encabezado de respuesta, deberá intentar hacer lo mejor para extraer el idioma con éxito. La entrada puede contener caracteres unicode.
El caso de salida es importante.
Pruebas
Github Gist con casos de prueba
Hay un caso de prueba por línea. El formato es:
<lang_name> - <rest_of_the_line_is_the_header>
Puntuación
Tu puntaje es:
Number Correct
----------------
Total Number
(que es un porcentaje)
El desempate es el código más corto.
code-challenge
parsing
test-battery
Downgoat
fuente
fuente
#
ni siquiera está presente en los casos de prueba?Respuestas:
Retina 0.8.2 , 100%,
757170686764595351 bytesEsto es esencialmente un código de golf ahora, así que tuve que cambiar de idioma.
Pruébalo en línea!
Verificación
Cómo funciona
El código consta de tres sustituciones simples (o eliminaciones). En lugar de tratar de hacer coincidir el nombre del idioma, nos deshacemos de todas las partes de la cadena de entrada que forman parte de él.
<.*?>
coincidirá con todas las etiquetas HTML, por lo que la sustitución las eliminará de la entrada..*?
coincide con cualquier cantidad de caracteres, pero dado que?
hace que el cuantificador sea flojo , coincidirá con la menor cantidad posible que aún permita que coincida todo el patrón. Esto evita eliminar toda la entrada, que siempre comenzará con a<
y finalizará con a>
.El nombre del idioma ahora comienza con el primer carácter de la cadena de entrada modificada restante.
Después del nombre del idioma, casi siempre encontraremos uno de los siguientes finales:
,
,-
,&
,(
,–
,5
, O un espacio seguido de dos dígitos.Las dos primeras terminaciones son bastante comunes y
Python 2 & PuLP...
deben analizarse comoPython 2
,Ruby (2.2.2p95)...
comoRuby
,>PHP – 3302 bytes
comoPHP
yPerl 5...
comoPerl
.(,| [-&(–5]| \d\d).*
coincidiría con todas estas terminaciones (y todos los caracteres después de ellas), pero generará algunos falsos positivos:,
coincidirá con la coma en el nombre del idiomaHelp, WarDoq!
.(
coincidirá con la versión deJavaScript (ESx)
yJava (1.8)
.\d\d
coincidirá con la versión enTi-Basic 84
.Podemos solucionar el tercer caso de problema usando en
[0-7]\d
lugar de\d\d
, para evitar hacer coincidir el8
in84
.Para los otros casos problemáticos, usamos la búsqueda anticipada negativa
(?! W|...\))
que evitará que el patrón anterior coincida si es seguido porW
(como enHelp, WarDoq!
) o exactamente por tres caracteres y un paréntesis de cierre (como en(ES6)
o(1.8)
).Poniendo todo junto,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
coincide con todo después del nombre del idioma.Nos quedan dos casos problemáticos:
se analiza como
Podemos arreglar el primero eliminando
2
y el segundo eliminando:
de la salida.Esto se logra reemplazando
2 |:
con la cadena vacía.fuente
Bash, 100%, 100 bytes
Pruébelo en línea en Ideone .
Verificación
fuente
CJam, 78,38% (76 bytes)
Pruébalo en línea! o contar los encabezados correctos .
fuente
Jolf, 13 bytes, 85.94%, sin competencia
Tenía esta actualización en mi computadora. Para mi disgusto, me había olvidado de actualizar el código respectivo para el intérprete. No tengo ganas de disparar al 100%. Tal vez todos deberían formatear sus encabezados de la misma manera ¯ \ _ (ツ) _ / ¯
fuente