Цель действительно проста. Получив строку в качестве входных данных, проанализируйте все объекты HTML, которые соответствуют следующим символам (включая их заглавные варианты):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Правила разбора:
- Каждая сущность начинается с
&
и заканчивается;
- Первый символ после
&
будет измененным символом (регистр букв важен!) - Остальные символы обозначают название акцента использовать (
acute
,grave
,circ
,tilde
иuml
). Название акцента ДОЛЖНО быть в нижнем регистре! * - Любой объект HTML, который создает символ, которого нет в этом списке или который является недопустимым, следует оставить нетронутым (например
&
,&etilde;
,&a;
) - Числовые объекты следует игнорировать, так как они не соответствуют приведенным выше правилам.
Это изменение было введено с 18-02-2016. Все существующие ответы, которые принимают объекты HTML с именами в верхнем регистре, действительны. Любой будущий ответ должен следовать этому правилу.
Примеры:
á //á
Téhèh //Téhèh
an & //an &
Выход:
Выход может быть в ISO-8859- X (1-15), Windows-1252 или UTF-8/16/32.
Вы можете выбрать одну и только одну из допустимых кодировок и использовать ее для любого вывода. Вы можете смело предположить, что вход будет в ASCII.
Любое из следующего является допустимым выводом для á
:
á
(ISO-8859-1 / 15 или windows-1252, эквивалентно\xE1
)á
(UTF-8, эквивалентный\xC3\xA1
или\u00E1
)aÌ
(UTF-8, эквивалентныйa\xCC\x81
илиa\u0301
)- Любая комбинация диакритических знаков без использования HTML-сущностей.
Вывод должен быть визуально похожим, при визуализации / отображении, на символы в списке.
Помните, что все стандартные лазейки и встроенные модули * запрещены . Так как это код-гольф , выигрывает самый короткий ответ.
* Это изменение было внесено из-за большого неодобрения бонусов и штрафов, и на момент написания не отменял никакого ответа
Ответы:
Japt,
8175 байтШесть
?
с представляют непечатаемые символы.Проверьте это онлайн!Примечание: выводит третий вариант кодирования; то есть буква, за которой следует необработанная кодировка UTF-8 соответствующей объединяющей диакритической метки.
Как это работает
Hexdump кода:
источник
Ý
остался один, но его следует изменить на Ý ...JavaScript (ES6),
141122134 байтаЯ последовал примеру Даавко, используя диакритические знаки, и я чувствую себя идиотом, который не думает использовать его раньше. На самом деле становится удивительно коротким для JavaScript.
РЕДАКТИРОВАТЬ: Нил обнаружил несколько плохих случаев неопределенных, которые теперь исправлены.
источник
String.prototype.replace
настолько смешно для игры в гольф для обхода строки.É
(независимо от того, что это правильно).Сетчатка , 115 байт
Я новичок в код-гольфе, но я думаю, что это может сработать.
Эта версия была создана до того, как
Á
было введено правило, которое не позволяет заменять заглавные html-сущности (например ).Довольно простой поиск и замена. Использует UTF-8.
Использует [буква] \ xCC \ x [диакритический знак шестнадцатеричный код] подход. Диакритический знак добавляется после каждого соответствующего письма.
По какой-то причине стандартный шрифт Droid Sans Mono в интерпретаторе не может правильно отображать буквы «circ» и «uml». Если вы измените его с помощью инструментов разработчика на что-то вроде DejaVu Sans, все будет хорошо. Я думаю, что это ограничение шрифта, а не программы. Но если это ошибка программы, я постараюсь это исправить.
Вот 129-байтовая версия, которая не заменяет заглавные буквы HTML (например
Á
)Попробуйте онлайн!
Попробуйте онлайн! 129-байтовая версия
источник
JavaScript (ES6), 288 байт
Создает объект карты символов (с базовым числовым кодом для каждого символа) и использует смещения (или 0, если он не существует), чтобы определить, следует ли преобразовывать объект и каков его код символа. Симметрия в случаях означает добавление 32 в нижнем регистре, за исключением случаев
Ÿ
, когда для UTF8 используется другое смещение.источник
Ÿ
в UTF8: это просто в странном месте. Тем не менее, я подумал, что я достаточно хорошо его сжал и оптимизировал, учитывая, что буквальный список замены будет вдвое длиннее. Ты видишь что-то, чем я не являюсь?.toLowerCase()
. Это имя ОГРОМНОЕ !!! ТакжеString.fromCharCode
может принимать несколько параметров или называтьсяString.fromCharCode.call([...])
i
флаг.