Старый испанский алфавитный порядок

22

До 1994 года , испанский словари используется алфавитный порядок с особенностью : диграфов llи chрассматривались , как если бы они были отдельные буквы. chнемедленно следовал c, и llнемедленно следовал l. Если добавить письмо ñ, которое следует nна испанском, то порядок был:

a, b, c, ch, d, e, f, g, h, i, j, k, l, ll, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z

Начиная с 1994 годом llи chрассматриваются как группы из двух букв ( l, lи c, hсоответственно), и , таким образом алфавитного порядка так же , как на английском языке, за исключением письма ñ.

Старый порядок был определенно интереснее .

Соревнование

Введите список из нуля или более слов и выведите список, отсортированный по старому испанскому алфавитному порядку. Сортировка происходит между словами (не между буквами в слове). То есть слова являются атомарными, и выходные данные будут содержать одни и те же слова в возможно другом порядке.

Для упрощения, мы не будем рассматривать письмо ñ, или акцентированные гласные á, é, í, ó, ú, или прописные буквы. Каждое слово будет представлять собой последовательность из одного или нескольких символов, взятых из включающего диапазона от ASCII 97 ( a) до ASCII 122 ( z).

Если lв строке более двух букв, они должны быть сгруппированы слева направо. То есть lllесть llи тогда l(а не lпотом ll).

Формат ввода может быть: слова, разделенные пробелами, символами новой строки или любым удобным символом. Слова могут быть заключены в кавычки или нет, по вашему выбору. Список или массив слов также приемлем. Любой разумный формат действителен; просто укажите это в своем ответе.

Аналогичным образом, вывод будет в любом приемлемом формате (не обязательно совпадает с вводом).

Код гольф, самые короткие выигрыши.

Контрольные примеры

В следующих примерах слова разделяются пробелами. Первая строка - это ввод, вторая -:

llama coche luego cocina caldo callar calma
caldo calma callar cocina coche luego llama

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

«Слова» тоже могут быть отдельными буквами:

b c a ch ll m l n
a b c ch l ll m n

или маловероятные комбинации (помните правило, lсгруппированное слева направо):

lll llc llz llll lllz
llc lll lllz llll llz

Пустой вход должен дать пустой вывод:



Конечно, этот порядок может быть применен и к другим языкам:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at
Луис Мендо
источник
5
Сейчас уже слишком поздно, чтобы исправить вопрос, потому что у него есть ответ, но на самом деле рр тоже была одной буквой. Я полагаю, что он потерял свой статус одной буквы позже, чем ll и ch, поэтому объяснение в Википедии не столько неверное, сколько частичное.
Питер Тейлор
"tweo"? filler +
CalculatorFeline
3
@PeterTaylor Официальная академия (РАЭ) не рассматривала rrни одного письма ; по крайней мере, с 1803 года. Но это правда, что, очевидно, это считалось одной буквой в Америке
Луис Мендо
1
Похоже, венгерский заслуживает отдельного, гораздо более сложного испытания :-)
Луис Мендо
1
Валлийский алфавит содержит множество их, и, вероятно, это интересно, поскольку они не в алфавитном порядке (на английском языке) или включают все латинские символы: a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y
Алджи Тейлор

Ответы:

7

Pyth, 14 13 байтов

Обновление: видел, что это было принято, и заметил тривиальный 1-байтовый гольф. Упс.

:D"ll|ch|."1Q

Попробуйте онлайн. Тестирование.

Для каждого слова найдите все непересекающиеся совпадения для регулярного выражения ll|ch|.. Это разбивает слово на «буквы». Затем просто отсортируйте слова по разделенным спискам.

PurkkaKoodari
источник
Отличный подход! (Теперь, когда я наконец понял это) :-)
Луис Мендо
Этот код абсолютно увлекателен:D
Эрик Outgolfer
3

PowerShell, 46 44 51 50 байт

$args|sort @{e={$_-replace'(?=ch|ll)(.).','$1Α'}}

ΑХарактер греческой буквы альфа , которая в прибывает после всех букв латинского алфавита в порядке сортировки по умолчанию PowerShell (по крайней мере , на моей машине, я не уверен , если он отличается в других местах). Это считается как 2 байта в кодировке UTF8.

Пример использования, при условии, что эта строка сохранена в файле с именем es-sort.ps1:

> es-sort.ps1 'lzego' 'luego' 'llama'

luego
lzego
llama
PSWG
источник
2

Mathematica, 81 байт

StringReplace[Sort@StringReplace[#,"ch"->"cZ","ll"->"lZ"],"cZ"->"ch","lZ"->"ll"]&

Тот же подход, что и в ответе TimmyD.

CalculatorFeline
источник
1

Python 2, 128 116 байтов

lambda p:map(''.join,sorted([{'!':'ll','?':'ch'}.get(c,c)for c in w.replace('ll','!').replace('ch','?')]for w in p))

Я все еще чувствую, что здесь определенно есть место для улучшения.

Orez
источник
1

Javascript, 95 байт

s=>s.map(a=>a.replace(/ll|ch/g,m=>m[0]+'~')).sort().map(a=>a.replace(/.~/g,m=>m>'d'?'ll':'ch'))
Чарли Винн
источник
1

Perl, 40 байт

Включает +1 для -p

Запустите со списком слов на STDIN:

perl -p spanisort.pl <<< "llama coche luego cocina caldo callar calma"

spanisort.pl

s/ll|ch|./\u$&/g;$_="\L@{[sort split]}"
Тон Хоспел
источник