Viejo orden alfabético español

22

Antes de 1994, los diccionarios de español usaban el orden alfabético con una peculiaridad : los dígrafos lly chse consideraban como letras simples. chSeguido de inmediato c, e llinmediatamente seguido l. Agregando la carta ñ, que sigue nen español, el orden fue entonces:

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 lly chse consideran como grupos de dos letras ( l, ly c, hrespectivamente), y por lo tanto el orden alfabético es el mismo que en inglés, con la excepción de la letra ñ.

El viejo orden definitivamente era más interesante .

El reto

Ingrese una lista de cero o más palabras y envíe la lista ordenada según el antiguo orden alfabético español. La clasificación es entre palabras (no entre letras dentro de una palabra). Es decir, las palabras son atómicas y la salida contendrá las mismas palabras en un orden posiblemente diferente.

Para simplificar, no vamos a considerar la carta ñ, o vocales acentuadas á, é, í, ó, ú, o de letras en mayúsculas. Cada palabra será una secuencia de uno o más caracteres tomados del rango inclusivo desde ASCII 97 ( a) hasta ASCII 122 ( z).

Si hay más de dos lletras seguidas, deben agruparse de izquierda a derecha. Es decir, llles lly luego l(no ly luego ll).

El formato de entrada puede ser: palabras separadas por espacios, por nuevas líneas o cualquier carácter conveniente. Las palabras pueden estar entre comillas o no, a su elección. Una lista o conjunto de palabras también es aceptable. Cualquier formato razonable es válido; solo dilo en tu respuesta.

De manera similar, la salida tendrá cualquier formato razonable (no necesariamente el mismo que la entrada).

Código de golf, victorias más cortas.

Casos de prueba

En los siguientes ejemplos, las palabras están separadas por espacios. La primera línea es entrada, la segunda es salida:

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

cuchara cuchillo cubiertos cuco cueva
cubiertos cuco cuchara cuchillo cueva

Las "palabras" también pueden ser letras simples:

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

o combinaciones poco probables (recuerde la regla que lse agrupa de izquierda a derecha):

lll llc llz llll lllz
llc lll lllz llll llz

Una entrada vacía debería dar una salida vacía:



Por supuesto, este orden también se puede aplicar a otros idiomas:

chiaro diventare cucchiaio
cucchiaio chiaro diventare

all alternative almond at ally a amber
a almond alternative all ally amber at
Luis Mendo
fuente
55
Es demasiado tarde para corregir la pregunta ahora, porque tiene una respuesta, pero en realidad rr era una sola letra. Creo que perdió su estado como una sola letra después de ll y ch, por lo que la explicación en Wikipedia no es tan errónea como parcial.
Peter Taylor
"tweo"? filler +
CalculatorFeline
3
@PeterTaylor La academia oficial (RAE) no consideró rruna sola carta ; al menos no desde 1803. Pero es cierto que aparentemente se consideró una sola carta en las Américas
Luis Mendo
1
Parece que Húngaro merece un desafío por separado, mucho más difícil :-)
Luis Mendo
1
El alfabeto galés tiene muchos, y probablemente sea interesante ya que no están en orden alfabético (inglés) o incluyen todos los 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

Respuestas:

7

Pyth, 14 13 bytes

Actualización: vi que esto fue aceptado y noté un trivial golf de 1 byte. Whoops

:D"ll|ch|."1Q

Pruébalo en línea. Banco de pruebas.

Para cada palabra, encuentre todas las coincidencias no superpuestas para la expresión regular ll|ch|.. Esto divide la palabra en las "letras". Luego, solo ordena las palabras por las listas divididas.

PurkkaKoodari
fuente
Gran enfoque! (Ahora que finalmente lo entiendo) :-)
Luis Mendo
Ese código es absolutamente fascinante:D
Erik the Outgolfer
3

PowerShell, 46 44 51 50 bytes

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

El Αcarácter es la letra alfa griega que aparece después de todas las letras latinas en el orden de clasificación predeterminado de PowerShell (al menos en mi máquina, no estoy seguro de si es diferente en otras configuraciones regionales). Se cuenta como 2 bytes en la codificación UTF8.

Ejemplo de uso, suponiendo que esta cadena se guarde en un archivo llamado es-sort.ps1:

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

luego
lzego
llama
pswg
fuente
2

Mathematica, 81 bytes

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

El mismo enfoque que la respuesta de TimmyD.

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

Todavía siento que definitivamente hay margen de mejora aquí.

Orez
fuente
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
fuente
1

Perl, 40 bytes

Incluye +1 para -p

Ejecute con la lista de palabras en STDIN:

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

spanisort.pl

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