Ancien ordre alphabétique espagnol

22

Avant 1994, les dictionnaires espagnols utilisaient l'ordre alphabétique avec une particularité : les digraphes llet chétaient considérés comme s'il s'agissait de lettres simples. chimmédiatement suivi c, et llimmédiatement suivi l. En ajoutant la lettre ñ, qui suit nen espagnol, l'ordonnance était alors:

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

Depuis 1994 llet chsont considérés comme des groupes de deux lettres ( l, let c, hrespectivement), et donc l'ordre alphabétique est le même qu'en anglais, à l'exception de la lettre ñ.

L'ancien ordre était définitivement plus intéressant .

Le défi

Entrez une liste de zéro ou plusieurs mots et sortez la liste triée selon l'ancien ordre alphabétique espagnol. Le tri s'effectue entre les mots (et non entre les lettres d'un mot). Autrement dit, les mots sont atomiques et la sortie contiendra les mêmes mots dans un ordre éventuellement différent.

Pour simplifier, nous ne considérerons pas lettre ñou voyelles accentuées á, é, í, ó, úou lettres majuscules. Chaque mot sera une séquence d'un ou plusieurs caractères tirés de la plage incluse de ASCII 97 ( a) à ASCII 122 ( z).

S'il y a plus de deux llettres d'affilée, elles doivent être regroupées de gauche à droite. Autrement dit, lllest llet puis l(pas let puis ll).

Le format d'entrée peut être: des mots séparés par des espaces, des retours à la ligne ou tout autre caractère approprié. Les mots peuvent être entourés de guillemets ou non, à votre choix. Une liste ou un tableau de mots est également acceptable. Tout format raisonnable est valide; dites-le simplement dans votre réponse.

De la même manière, la sortie sera de n'importe quel format raisonnable (pas nécessairement le même que l'entrée).

Golf de code, victoires les plus courtes.

Cas de test

Dans les exemples suivants, les mots sont séparés par des espaces. La première ligne est entrée, la seconde est sortie:

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

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

Les "mots" peuvent aussi être des lettres simples:

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

ou combinaisons improbables (rappelez-vous la règle qui lest regroupée de gauche à droite):

lll llc llz llll lllz
llc lll lllz llll llz

Une entrée vide doit donner une sortie vide:



Bien entendu, cette commande peut également s'appliquer à d'autres langues:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at
Luis Mendo
la source
5
Il est trop tard pour corriger la question maintenant, car elle a une réponse, mais en fait rr était aussi une seule lettre. Je crois qu'il a perdu son statut de lettre unique plus tard que ll et ch, donc l'explication dans Wikipedia n'est pas tellement erronée que partielle.
Peter Taylor
"tweo"? filler +
CalculatorFeline
3
@PeterTaylor L'académie officielle (RAE) n'a pas considéré rrune seule lettre ; du moins pas depuis 1803. Mais il est vrai que, apparemment, il était considéré comme une seule lettre dans les Amériques
Luis Mendo
1
On dirait que le hongrois mérite un défi séparé, beaucoup plus difficile :-)
Luis Mendo
1
L'alphabet gallois en contient beaucoup, et est probablement intéressant car ils ne sont pas dans l'ordre alphabétique (anglais), ou incluent tous les caractères latins: 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

Réponses:

7

Pyth, 14 13 octets

Mise à jour: vu que cela a été accepté et remarqué un golf trivial de 1 octet. Oups.

:D"ll|ch|."1Q

Essayez-le en ligne. Suite de tests.

Pour chaque mot, recherchez toutes les correspondances qui ne se chevauchent pas pour l'expression régulière ll|ch|. . Cela divise le mot en "lettres". Ensuite, triez simplement les mots selon les listes fractionnées.

PurkkaKoodari
la source
Super approche! (Maintenant que je comprends enfin) :-)
Luis Mendo
Ce code est absolument fascinant:D
Erik the Outgolfer
3

PowerShell, 46 44 51 50 octets

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

Le Αcaractère est la lettre grecque alpha qui vient après toutes les lettres latines dans l'ordre de tri par défaut de PowerShell (au moins sur ma machine, je ne suis pas sûr que ce soit différent dans d'autres endroits). Il compte pour 2 octets dans le codage UTF8.

Exemple d'utilisation, en supposant que cette chaîne est enregistrée dans un fichier nommé es-sort.ps1:

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

luego
lzego
llama
pswg
la source
2

Mathematica, 81 octets

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

Même approche que la réponse de TimmyD.

CalculatorFeline
la source
1

Python 2, 128 116 octets

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

J'ai toujours l'impression qu'il y a certainement matière à amélioration ici.

Orez
la source
1

Javascript, 95 octets

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
la source
1

Perl, 40 octets

Comprend +1 pour -p

Exécutez avec la liste des mots sur STDIN:

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

spanisort.pl

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