O objetivo é realmente simples. Recebendo uma sequência como entrada, analise todas as entidades HTML que correspondem aos seguintes caracteres (incluindo suas variantes em maiúsculas):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Regras de análise:
- Cada entidade começa com
&
e termina com;
- O primeiro caractere após o
&
será o caractere modificado (maiúsculas e minúsculas são importantes!) - Os restantes caracteres referem-se ao nome do acento para usar (
acute
,grave
,circ
,tilde
euml
). O nome do acento DEVE estar em minúsculas! * - Qualquer entidade HTML que produz um caractere que não está nessa lista, ou que é inválido, deve ser deixado intocado (Ex:
&
,&etilde;
,&a;
) - Entidades numéricas devem ser ignoradas, pois não se enquadram nas regras acima
Esta alteração foi introduzida em 18-02-2016. Todas as respostas existentes que aceitam entidades HTML com nomes de acento em maiúsculas são válidas. Qualquer resposta futura deve seguir esta regra.
Exemplos:
á //á
Téhèh //Téhèh
an & //an &
Resultado:
A saída pode estar em ISO-8859- X (1-15), windows-1252 ou UTF-8/16/32.
Você pode escolher uma e apenas uma das codificações válidas e usá-la para qualquer saída. Você pode assumir com segurança que a entrada estará em ASCII.
Qualquer uma das seguintes opções é uma saída válida para á
:
á
(ISO-8859-1 / 15 ou windows-1252, equivalente a\xE1
)á
(UTF-8, equivalente a\xC3\xA1
ou\u00E1
)aÌ
(UTF-8, equivalente aa\xCC\x81
oua\u0301
)- Qualquer combinação de sinais diacríticos, sem usar entidades HTML.
A saída deve ser visualmente semelhante, quando renderizada / exibida, aos caracteres da lista.
Lembre-se de que todas as brechas padrão e os embutidos * não são permitidos . Como se trata de código-golfe , a resposta mais curta vence.
* Essa alteração foi feita devido à grande reprovação de bônus e penalidades e, no momento da redação, não invalida nenhuma resposta
Respostas:
Japonês,
8175 bytesOs seis
?
s representam caracteres não imprimíveis. Teste online!Nota: Isso gera a terceira opção de codificação; isto é, a letra seguida pela codificação UTF-8 bruta da marca diacrítica combinada correspondente.
Como funciona
Hexdump do código:
fonte
Ý
sozinho, mas ele deve ser alterado para Y ...JavaScript (ES6),
141122134 bytesSegui o exemplo de daavko usando marcas diacríticas e me sinto um idiota por não pensar em usá-lo mais cedo. Na verdade, é surpreendentemente curto para JavaScript.
Edição: Neil pegou alguns casos ruins de indefinido, que agora estão corrigidos.
fonte
String.prototype.replace
é tão ridiculamente jogável para travessia de cordas.É
(seja lá o que for).Retina , 115 bytes
Eu sou novo no código-golfe, mas acho que isso pode funcionar.
Esta versão foi criada antes da
Á
introdução da regra, que não permite a substituição de entidades html maiúsculas (por exemplo ).Pesquisa bastante simples e substitua. Usa UTF-8.
Usa a abordagem [letra] \ xCC \ x [código hexadecimal de marca diacrítica]. A marca diacrítica é adicionada após cada letra relevante.
Por alguma razão, a fonte Droid Sans Mono padrão no intérprete não pode processar as letras "circ" e "uml" corretamente. Se você alterá-lo através de ferramentas de desenvolvedor para algo como DejaVu Sans, isso mostra muito bem. Eu acho que isso é uma limitação da fonte, não do programa. Mas se a culpa for do programa, tentarei corrigi-lo.
Aqui está uma versão de 129 bytes, que não substitui os caracteres HTML maiúsculos (por exemplo
Á
)Experimente online!
Experimente online! Versão de 129 bytes
fonte
JavaScript (ES6), 288 bytes
Cria um objeto de mapa de caracteres (com o código numérico base para cada caractere) e usa deslocamentos (ou 0, se não existentes) para determinar se uma entidade deve ser convertida e qual é o código de caractere. Simetria nos casos significa adicionar 32 se estiver em minúscula, exceto
Ÿ
onde ele usa um deslocamento diferente para UTF8.fonte
Ÿ
em UTF8: é apenas em um lugar estranho. Mesmo assim, eu pensei que havia condensado e otimizado bastante, considerando que uma lista de substituições literal seria duas vezes maior. Você está vendo algo que eu não sou?.toLowerCase()
. Esse nome é enorme !!! Além disso,String.fromCharCode
pode aceitar vários parâmetros, ou ser chamado comoString.fromCharCode.call([...])
i
bandeira.