El objetivo es realmente simple. Al recibir una cadena como entrada, analice todas las entidades HTML que corresponden a los siguientes caracteres (incluidas sus variantes en mayúsculas):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Reglas de análisis:
- Cada entidad comienza con
&
y termina con;
- El primer carácter después del
&
será el carácter modificado (¡la mayúscula es importante!) - Los caracteres restantes se refieren al nombre del acento utilizar (
acute
,grave
,circ
,tilde
yuml
). ¡El nombre de acento DEBE estar en minúsculas! * * - Cualquier entidad HTML que produce un carácter que no está en esa lista, o que no es válido, se debe dejar intacto (Ej:
&
,&etilde;
,&a;
) - Las entidades numéricas deben ignorarse, ya que no se ajustan a las reglas anteriores.
Este cambio se introdujo a partir del 18-02-2016. Todas las respuestas existentes que aceptan entidades HTML con mayúsculas son válidas. Cualquier respuesta futura debe seguir esta regla.
Ejemplos:
á //á
Téhèh //Téhèh
an & //an &
Salida:
La salida puede estar en ISO-8859- X (1-15), windows-1252 o UTF-8/16/32.
Puede elegir una y solo una de las codificaciones válidas y usarla para cualquier salida. Puede asumir con seguridad que la entrada estará en ASCII.
Cualquiera de los siguientes es un resultado válido para á
:
á
(ISO-8859-1 / 15 o windows-1252, equivalente a\xE1
)á
(UTF-8, equivalente\xC3\xA1
o\u00E1
)aÌ
(UTF-8, equivalentea\xCC\x81
oa\u0301
)- Cualquier combinación de diacríticos, sin usar entidades HTML.
La salida debe ser visualmente similar, cuando se representa / muestra, a los caracteres de la lista.
Recuerde, todas las lagunas estándar e integradas * no están permitidas . Como se trata de código de golf , gana la respuesta más corta.
* Este cambio se realizó debido a la gran desaprobación de las bonificaciones y sanciones, y al momento de escribir, no invalida ninguna respuesta
Respuestas:
Japt,
8175 bytesLos seis
?
s representan caracteres no imprimibles. ¡Pruébalo en línea!Nota: Esto genera la tercera opción de codificación; es decir, la letra seguida de la codificación UTF-8 sin procesar de la marca diacrítica combinada correspondiente.
Cómo funciona
Hexdump del código:
fuente
Ý
solo, pero debe ser cambiado a Y ...JavaScript (ES6),
141122134 bytesSeguí el ejemplo de daavko usando signos diacríticos, y me siento como un idiota por no pensar en usarlo antes. En realidad se vuelve sorprendentemente corto para JavaScript.
EDITAR: Neil captó algunos casos graves de indefinido, que ahora se corrigen.
fuente
String.prototype.replace
es tan ridículamente golfable para el cruce de cuerdas.É
(lo que sea que sea lo correcto).Retina , 115 bytes
Soy nuevo en code-golf, pero creo que esto podría funcionar.
Esta versión se realizó antes de que se introdujera la regla, que no permite reemplazar entidades html en mayúsculas (por ejemplo
Á
).Bastante simple búsqueda y reemplazo. Utiliza UTF-8.
Utiliza el enfoque [letra] \ xCC \ x [código hexadecimal de marca diacrítica]. La marca diacrítica se agrega después de cada letra relevante.
Por alguna razón, la fuente Droid Sans Mono predeterminada en el intérprete no puede representar las letras "circ" y "uml" correctamente. Si lo cambia a través de herramientas de desarrollador a algo como DejaVu Sans, se muestra muy bien. Creo que esto es una limitación de la fuente, no del programa. Pero si es culpa del programa, intentaré solucionarlo.
Aquí hay una versión de 129 bytes, que no reemplaza las entradas HTML en mayúsculas (por ejemplo
Á
)Pruébalo en línea!
Pruébalo en línea! Versión de 129 bytes
fuente
JavaScript (ES6), 288 bytes
Crea un objeto de mapa de caracteres (con el código numérico de base para cada carácter) y usa compensaciones (o 0 si no existen) para determinar si una entidad debe convertirse y cuál es su código de caracteres. La simetría en los casos significa agregar 32 si es minúscula, excepto para
Ÿ
, donde usa un desplazamiento diferente para UTF8.fuente
Ÿ
UTF8: está en un lugar extraño. De todos modos, pensé que lo condensé y lo optimicé bastante bien, considerando que una lista de reemplazo literal sería más del doble. ¿Estás viendo algo que yo no soy?.toLowerCase()
. Ese nombre es ENORME !!! Además,String.fromCharCode
puede aceptar múltiples parámetros, o ser llamado comoString.fromCharCode.call([...])
i
bandera.