Для тех, кто желает намного больше испытаний, чем старый испанский алфавитный порядок , давайте посмотрим, как упорядочен венгерский алфавит.
a, á, b, c, cs, d, dz, dzs, e, é, f, g, gy, h, i, í, j, k, l, ly, m, n, ny, o, ó, ö, ő, p, q, r, s, sz, t, ty, u, ú, ü, ű, v, w, x, y, z, zs
на самом деле, q
, w
, x
и y
не используются в венгерских слов, но они включены в заимствованных и иностранных имен. Иностранные акцентированные символы, которые не являются частью венгерского алфавита (например ñ
), имеют тот же приоритет, что и неакцентированные, но мы игнорируем их для этой задачи.
Правила обобщены:
- Диграфы (
cs
,sz
и т. Д.) И триграф (dzs
) рассматриваются как самостоятельные буквы.
cudar cukor cuppant csalit csata
- Если же орграф или триграф происходит дважды непосредственно друг за другом в слове, они написаны в упрощенном виде:
ssz
вместо тогоszsz
,ddzs
вместо того ,dzsdzs
но в алфавитном порядке используется не упростили порядок. Напримерkasza
<kaszinó
<kassza
, так какkassza
используется какk
+a
+sz
+sz
+a
ради упорядочения. Иногда вы можете найти несокращенную версию в слове, в случае составных слов.
kasza kaszinó kassza kaszt nagy naggyá nagygyakorlat naggyal nagyít
- использование заглавных букв не имеет значения, за исключением случаев, когда два слова были бы совершенно одинаковыми без использования заглавных букв, и в этом случае строчная буква имеет приоритет
jácint Jácint Zoltán zongora
- Короткие и длинные версии акцентированных гласными имеют одинаковый приоритет (
a - á
,e -é
,i - í
,o - ó
,ö - ő
,u - ú
ü - ű
), с одним исключением: если два слова , иначе было бы точно так же, короткий гласный имеет приоритет над долгими гласными. Обратите внимание, что гласные с умлаутом (ö
иü
) - это совершенно разные символы отo
иu
.
Eger egér író iroda irónia kerek kerék kérek szúr szül
- Дефисы или пробелы (например, в составных словах, именах и т. Д.) Полностью игнорируются
márvány márványkő márvány sírkő Márvány-tenger márványtömb
Задание
Ваша программа / функция получает строки, состоящие из символов венгерского алфавита (как в нижнем, так и в верхнем регистре), но строка может содержать пробелы или дефисы. Для простоты знак минус (ASCII 45) можно использовать в качестве дефиса. Обратите внимание, что некоторые символы (такие как ő
) не являются частью ASCII. Вы можете использовать любую кодировку, если пожелаете, если она поддерживает все необходимые символы.
Вы должны правильно упорядочить строки и отобразить / вернуть результат.
Вы можете использовать любое произвольно упорядоченное подмножество приведенных выше примеров для тестирования.
РЕДАКТИРОВАТЬ:
Пожалуйста, не используйте какой-либо встроенный или другой способ, который уже знает венгерский алфавитный порядок самостоятельно. Это сделало бы соревнование бессмысленным и взяло бы на себя все трудности, связанные с поиском лучшего регулярного выражения или лучших трюков в коде.
EDIT2:
Чтобы очистить пояснение, заданное isaacg: «две строки, которые отличаются только заглавными буквами и длинными и короткими гласными, но различаются в обоих направлениях»: хотя ни одно из правил в официальном документе явно не решает этот вопрос, пример можно найти в точках длины гласного, имеющего большее значение, чем капитализация.
malacsült
илиnyílászáró
. Интересно, есть ли они (но вам понадобится словарный запас, чтобы проверить это, что, по-видимому, не является частью этой задачи)Ответы:
Perl, 250
Включает в себя +11 для
-Mutf8 -CS
.Использует идиому decorate-sort-undecorate (AKA Schwartzian Transform ) и многоуровневую сортировку † , где уровни:
Внутренне
␜
(ASCII 0x1C Разделитель полей - значение которого меньше, чем любой символ в алфавите для этой задачи) используется в качестве разделителя уровня.Эта реализация имеет много ограничений, среди которых:
Расширенная версия:
†. Некоторыми известными многоуровневыми алгоритмами сопоставления являются Unicode Collation Algorithm (UCA, Unicode UTS # 10) , ISO 14651 (доступно на сайте ITTF ISO ), части LC_COLLATE в ISO TR 30112 (черновик доступен в ISO / IEC JTC1 / SC35 / WG5 home ), который устарел ISO / IEC TR 14652 (доступен в ISO / IEC JTC1 / SC22 / WG20 home ) и LC_COLLATE в POSIX.
‡. Чтобы сделать это правильно, потребуется словарь. ICU лечит Weirdly капитализированных групп , как не-сокращения / Non-орграфы / Non-триграфы, например: CCs < 3 CCs < 3 с Cs < 3 с CS < 3 C Cs < 3 сСт < 3 CS < 3 Cs < 3 CS < 3 ccs < 3 Ccs < 3 CCS
источник
Java 8, 742 байта
Может быть уменьшен еще на 3 байта, называя функцию
s
вместоsort
или еще на 16 байтов, если не считать определение класса.Можно использовать так:
Тестирование:
получая
Ungolfed:
Я использую Java-
List
тип иorder()
-функцию, но компаратор - мой.источник
<String>
и сохранить несколько символов за счет нескольких предупреждений?Object
как a и b. Я, вероятно, мог бы уйти от определения расширения общего параметра классаString
. Также я не ожидаю иметь самый короткий код. ;-)Python 3, 70
Сохранено 8 байтов благодаря shooqie.
Я люблю Python. : D
Ожидается список строк.
источник
from locale import*
экономит много байтов