Ordem alfabética espanhola antiga

22

Antes de 1994, os dicionários espanhóis usavam ordem alfabética com uma peculiaridade : dígrafos lle cheram considerados como se fossem letras únicas. chimediatamente seguido ce llimediatamente seguido l. Adicionando a carta ñ, que segue nem espanhol, a ordem era então:

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

Desde 1994 lle chsão considerados grupos de duas letras ( l, le c, hrespectivamente), e, portanto, a ordem alfabética é a mesma do inglês, com exceção da letra ñ.

A ordem antiga era definitivamente mais interessante .

O desafio

Insira uma lista de zero ou mais palavras e produza a lista classificada de acordo com a antiga ordem alfabética em espanhol. A classificação é entre palavras (não entre letras dentro de uma palavra). Ou seja, as palavras são atômicas e a saída conterá as mesmas palavras em uma ordem possivelmente diferente.

Para simplificar, não vamos considerar carta ñ, ou vogais acentuadas á, é, í, ó, ú, ou maiúscula letras. Cada palavra será uma sequência de um ou mais caracteres extraídos do intervalo inclusivo de ASCII 97 ( a) a ASCII 122 ( z).

Se houver mais de duas lletras seguidas, elas deverão ser agrupadas da esquerda para a direita. Ou seja, lllé lle então l(não le então ll).

O formato de entrada pode ser: palavras separadas por espaços, novas linhas ou qualquer caractere conveniente. As palavras podem estar entre aspas ou não, à sua escolha. Uma lista ou matriz de palavras também é aceitável. Qualquer formato razoável é válido; apenas diga na sua resposta.

De maneira semelhante, a saída terá qualquer formato razoável (não necessariamente o mesmo que a entrada).

Código de golfe, vitórias mais curtas.

Casos de teste

Nos exemplos a seguir, as palavras são separadas por espaços. A primeira linha é entrada, a segunda é saída:

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

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

"Palavras" também podem ser letras simples:

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

ou combinações improváveis ​​(lembre-se da regra que lestá agrupada da esquerda para a direita):

lll llc llz llll lllz
llc lll lllz llll llz

Uma entrada vazia deve fornecer uma saída vazia:



Obviamente, esse pedido também pode ser aplicado a outros idiomas:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at
Luis Mendo
fonte
5
É tarde demais para corrigir a pergunta agora, porque ela tem uma resposta, mas na verdade rr também era uma única letra. Eu acredito que ele perdeu seu status como uma única letra depois de ll e ch, então a explicação na Wikipedia não é tão errada quanto parcial.
Peter Taylor
"tweo"? enchimento +
CalculatorFeline
3
@PeterTaylor A academia oficial (RAE) não considerou rruma única letra ; pelo menos não desde 1803. Mas é verdade que, aparentemente, foi considerado uma única letra nas Américas
Luis Mendo
1
Looks como húngara merece um, muito mais difícil desafio separado :-)
Luis Mendo
1
O alfabeto galês tem muitos deles e provavelmente é interessante, pois não está em ordem alfabética (inglesa) ou inclui todos os caracteres latinos: 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

Respostas:

7

Pitão, 14 13 bytes

Atualização: viu isso ser aceito e notou um trivial golfe de 1 byte. Ops.

:D"ll|ch|."1Q

Experimente online. Suíte de teste.

Para cada palavra, encontre todas as correspondências não sobrepostas para a regex ll|ch|.. Isso divide a palavra em "letras". Depois, basta classificar as palavras pelas listas divididas.

PurkkaKoodari
fonte
Ótima abordagem! (Agora que eu finalmente entendo) :-)
Luis Mendo
Esse código é absolutamente fascinante:D
Erik the Outgolfer
3

PowerShell, 46 44 51 50 bytes

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

O Αcaractere é a letra grega alfa que vem depois de todas as letras latinas na ordem de classificação padrão do PowerShell (pelo menos na minha máquina, não tenho certeza se é diferente em outros locais). É contado como 2 bytes na codificação UTF8.

Exemplo de uso, supondo que essa sequência seja salva em um arquivo chamado es-sort.ps1:

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

luego
lzego
llama
pswg
fonte
2

Mathematica, 81 bytes

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

Mesma abordagem que a resposta de TimmyD.

CalculatorFeline
fonte
1

Python 2, 128 116 bytes

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

Eu ainda sinto que definitivamente há espaço para melhorias aqui.

Orez
fonte
1

Javascript, 95 bytes

s=>s.map(a=>a.replace(/ll|ch/g,m=>m[0]+'~')).sort().map(a=>a.replace(/.~/g,m=>m>'d'?'ll':'ch'))
Charlie Wynn
fonte
1

Perl, 40 bytes

Inclui +1 para -p

Execute com a lista de palavras em STDIN:

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

spanisort.pl

s/ll|ch|./\u$&/g;$_="\L@{[sort split]}"
Ton Hospel
fonte