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


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
Зараз занадто пізно виправляти питання, оскільки на нього є відповідь, але насправді rr теж був одним листом. Я вважаю, що вона втратила статус однієї букви пізніше, ніж ll і ch, тому пояснення у Вікіпедії не стільки неправильне, скільки часткове.
Пітер Тейлор

"твіо"? filler +
CalculatorFeline

3
@PeterTaylor Офіційна академія (RAE) не розглянула 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
Algy Taylor

Відповіді:


7

Pyth, 14 13 байт

Оновлення: побачив, що це прийняли, і помітив тривіальний гольф на 1 байт. Уопс.

:D"ll|ch|."1Q

Спробуйте в Інтернеті. Тестовий набір.

Для кожного слова знайдіть усі збіги, що не перетинаються, для регулярного вираження ll|ch|.. Це розбиває слово на «літери». Потім просто сортуйте слова за розділеними списками.


Чудовий підхід! (Тепер, коли я нарешті це зрозумів) :-)
Луїс Мендо

Цей код абсолютно захоплюючий:D
Ерік Атголфер

3

PowerShell, 46 44 51 50 байт

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

The ΑХарактер грецької букви альфа , яка в прибуває після всіх букв латинського алфавіту в порядку сортування по замовчуванням PowerShell (принаймні , на моїй машині, я не впевнений , якщо він відрізняється в інших місцях). В кодуванні UTF8 він рахується як 2 байти.

Приклад використання, якщо припустимо, що цей рядок збережено у файлі з назвою es-sort.ps1:

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

luego
lzego
llama

2

Математика, 81 байт

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

Той самий підхід, що і у відповіді ТімміД.


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))

Я все ще відчуваю, що тут безумовно є місце для вдосконалення.



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]}"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.